Skip Navigation
 

Testaufbau

Projekt Phase 1

Projekt Phase 2

Amateurfunk - HAM info » *** magnetic Loop - Antennen

HB9 - Loop Steuerung mit Enccoder

Dokumentation:
Unten steht jeweils der aktuelle Sketch.

- sketch_juni_01.ino

Stepper 28BYJ_48 (Nr 1 = Loop-Stepper) fährt sauber an und Stoppt sofort mit Interrupt
Wenn Stepper auf 0 oder Interrupt - kein Stromverbrauch
Display 16x2 I2C zeigt den Wert der Geschwindigkeit (0 - 50 / 0 - -50) wenn Stop wird STOP angezeigt
Gemessen wurde:
in Geschwindigkeit (1 bzw -1) mit 1500 Sek / 360Grd =ca 0.24 Grd / Sekunde (das kann man kaum sehen dass es dreht).
in Geschwindigkeit (50 bzw -50) mit 25 Sek / 360Grd =ca 14.4 Grd / Sekunde .

Nächste Ausbauten:
- Zweiten Encoder und Stepper (Nr 2 = Anpass-Stepper) dazu bauen- 433MHz Funkfernsteuerung einbauen und als TX und RX trennen

Bemerkung: Messwerte zB SWR von der Loop zurück übertragen hat keinen Wert.
Das SWR am Tranceiver is massgebend und das schliesst das Koax-Kabel mit ein (Aircell7 oder ggf RG-58)


```cpp
// Sketch_juni_01.ino
#include <MobaTools.h>
MoToStepper Step1(2048);  // 4096 Halbschritt   2048 Vollschritt
//MoToTimer   delayTime;

#include <Wire.h>                    // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h>       // LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x3f, 16, 2);  //

//#include <Encoder.h>  // Bibliothek für den Encoder (brauchts nicht)

boolean test = false;    // true schaltet die serielle Ausgabe der Testanzeigen ein

int encoderPinA = 6;
int encoderPinB = 5;
int encoderPos = 0;
int encoderPinALast = LOW;
int encoderPinANow = LOW;


void setup() {
  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  if (test) { Serial.begin(9600);}

  lcd.init();         //Im Setup wird der LCD gestartet
  lcd.backlight();    //Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
  pinMode(2, INPUT);  // Interrupt zum sofort Stop
  digitalWrite(2, HIGH);
  attachInterrupt(digitalPinToInterrupt(2), Interrupt, CHANGE);
  // Set für Stepper
  Step1.attach(8, 9, 10, 11);  // Anschluß an digitalen Ausgängen; Treiber IN1,IN2,IN3,IN4
  Step1.setSpeed(0);           // = 24 U/Min 240 // 120=12 / 60=6 30=3
  Step1.setRampLen(0);         // Beschleunigung
  Step1.setZero();             // Referenzpunkt für Motor 1 setzen
  Step1.stop();
  Step1.rotate(0);
}
void loop() {

  encoderPinANow = digitalRead(encoderPinA);
  if ((encoderPinALast == HIGH) && (encoderPinANow == LOW)) {
    if (digitalRead(encoderPinB) == HIGH) {
      encoderPos--;
    } else {
      encoderPos++;
    }
    if (test) {Serial.println(encoderPos);}
    lcd.clear();
    lcd.print("Encoder:  ");
    lcd.print(encoderPos);
  }
  encoderPinALast = encoderPinANow;
  if (encoderPos > 0) { Step1.rotate(-1); }     // Motor  dreht dauerhaft Rechts
  if (encoderPos < 0) { Step1.rotate(1); }      // Motor  dreht dauerhaft Links
  encoderPos = constrain(encoderPos, -49, 49);  // Min und Max des counters
  Step1.setSpeed(abs(encoderPos));              // RPM des Motors
  if (encoderPos == 0) {
    Step1.stop();
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
  }
}

void Interrupt()  // Druck auf den Encoder Knopf - alles sofort stoppen

{
  encoderPos = 0;
  Step1.stop();
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  if (test) { Serial.print(" STOP "); }
  if (test) { Serial.println(encoderPos); }
  lcd.clear();
  lcd.print("STOP");
}

```

 
 
 
« zurück|drucken