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");
}
```