projekte:magloop-dl2ab

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
projekte:magloop-dl2ab [05/06/2023 22:45] danielwfprojekte:magloop-dl2ab [05/06/2023 23:19] (aktuell) danielwf
Zeile 1: Zeile 1:
 ====== MagLoop mit DC-Fernsteuerung ====== ====== MagLoop mit DC-Fernsteuerung ======
-Bauvorschlag von DL2AB mit Schrittmotoransteuerung und Steuerung über DC-Speiseweiche+**Bauvorschlag von Daniel DL2AB mit Schrittmotoransteuerung und Steuerung über DC-Speiseweiche**
  
 Eines vorweg: MagLoops sind Kompromiss-, keine Wunderantennen ;)  \\ Eines vorweg: MagLoops sind Kompromiss-, keine Wunderantennen ;)  \\
Zeile 12: Zeile 12:
   * In der Steuereinheit wird hinter einer gleichen Fernspeiseweiche die gegebene DC-Spannung über einen Arduino in Schritte für einen Schrittmotor verwandelt, der wiederum zweimal im Verhältnis 60:20 untersetzt ist und im Vollschritt gefahren wird. Sollten durch den Arduino Störungen empfangen werden, lässt sich die Steuereinheit über die Fernbedienung abschalten, ohne den Drehkondensator zu verstimmen. \\   * In der Steuereinheit wird hinter einer gleichen Fernspeiseweiche die gegebene DC-Spannung über einen Arduino in Schritte für einen Schrittmotor verwandelt, der wiederum zweimal im Verhältnis 60:20 untersetzt ist und im Vollschritt gefahren wird. Sollten durch den Arduino Störungen empfangen werden, lässt sich die Steuereinheit über die Fernbedienung abschalten, ohne den Drehkondensator zu verstimmen. \\
   * Als Antriebsmotor arbeitet hier ein Schrittmotor "2BBYJ-4B" mit ULN2003-Treiberplatine. Diese sind überall günstig als Set zu bekommen.  \\ Für die Untersetzung werden "GT2-Zahnriemenscheiben" mit 60, 40 und 20 Zähnen verwendet, die es ebenfall überall als Set gibt. Da die Zahnriemen einen Draht enthalten könnten, eignet sich ein 5mm-Acrylstab für die Verbindung zweier Zahnräder (siehe Bild). Je größer das Verhältnis zwischen den Räder ist, desto feiner ist die Abstimmung. Wie fein man diese auswählen möchte, ist einem selbst überlassen. \\    * Als Antriebsmotor arbeitet hier ein Schrittmotor "2BBYJ-4B" mit ULN2003-Treiberplatine. Diese sind überall günstig als Set zu bekommen.  \\ Für die Untersetzung werden "GT2-Zahnriemenscheiben" mit 60, 40 und 20 Zähnen verwendet, die es ebenfall überall als Set gibt. Da die Zahnriemen einen Draht enthalten könnten, eignet sich ein 5mm-Acrylstab für die Verbindung zweier Zahnräder (siehe Bild). Je größer das Verhältnis zwischen den Räder ist, desto feiner ist die Abstimmung. Wie fein man diese auswählen möchte, ist einem selbst überlassen. \\ 
-\\ Hier sind ein paar Bilder von meinem ersten Aufbau (links Fernsteuerung, rechts Steuereinheut mit Dreko-Motor) :\\ +\\ Hier sind ein paar Bilder von meinem ersten Aufbau (links Fernsteuerung, mitte Steuereinheut mit Dreko-Motor, rechts Gesamtaufbau mit beklebtem Kunststoffring) :\\ 
-{{:projekte:magloop2-dl2ab.jpg?200 |}}{{:projekte:magloop1-dl2ab.jpg?400|}}+{{:projekte:magloop2-dl2ab.jpg?200 |}}{{:projekte:magloop1-dl2ab.jpg?400|}} {{:projekte:magloop3-dl2ab.jpg?200|}}\\ 
 +\\ 
 +**[[https://wiki.funkfreun.de/_media/projekte/magloop-stepper.zip|Download Schaltplan und Arduino-Sketch]]** \\ 
 +Beide Schaltungen lassen sich leicht auf Lochrasterplatinen aufbauen. Beim Bau der Fernspeiseweiche sollte diese jedoch eine eigene Schirmung erhalten. \\ 
 +Die Schaltungen sind auf diesem Schaltplan zusammengefasst (Klicken für größere Ansicht): \\ 
 +{{ :projekte:mag-loop-dl2ab_circuit.png?direct&600 |}} \\ 
 +Arduino-Code: \\ 
 +Wie immer eine kurze Warnung vorab: ich bin kein Programmierer und es gibt die ein oder andere Stelle, die man noch verbessern könnte. Auch wenn der Code gut funktioniert, bin ich für jeden Tipp per Mail an dl2ab@darc.de dankbar - man lernt ja schließlich nie aus ;) \\ 
 +//Benutzung auf eigene Gefahr, ich übernehme keine Haftung bei Schäden durch Benutzung oben stehender Schaltung und untenstehendem Code!//
  
 +<code c>
 +//    .----------------------------------------------------------------------------------------------------------------------------------------------------------------.
 +//    |                                                                    MagLoop-Stepper with DC-feeder                                                              |
 +//    '----------------------------------------------------------------------------------------------------------------------------------------------------------------'
 +//     by Daniel Wendt-Fröhlich, DL2AB (BugReports/Changes to danielwf@hackerspace-bremen.de, dl2ab@darc.de) for https://funkfreun.de
 +//     License CC-by-SA 3.0 - 02/2023-06/2023 - Bremen(GER) -- http://creativecommons.org/licenses/by-sa/3.0/de/ 
 +//     Circuit and further informations: https://wiki.funkfreun.de/projekte/magloop-dl2ab
 +
 +// Source Motorcontrol: https://github.com/NikodemBartnik/ArduinoTutorials/tree/master/28BYJ-48 and https://www.roboter-bausatz.de/projekte/schrittmotor-mit-arduino-ansteuern
 +
 +// Configuration:
 +#define WAIT_TIME 500     // time between fine step and continous drive
 +#define FINESTEPS_LEFT 10  // motor steps for left fine step
 +#define FINESTEPS_RIGHT 20 // motor steps for right fine step
 +
 +// Connections: 
 +#define STEPPER_PIN_1 8      // Connections for stepper motor driver ULN2003
 +#define STEPPER_PIN_2 9
 +#define STEPPER_PIN_3 10
 +#define STEPPER_PIN_4 11
 +#define VOLT_PIN A2          // Connection for voltage sensing, for up to 15V:  VCC--[Resistor 2.2k]--AnalogIn--[Resistor 1.0K]--GND
 +
 +//Voltage Levels (max Voltage per Button x 100)
 +//Example: 12V(VCC) -- 10V(Level1) -- Button1 -- 9V(Level2) -- Button 2 -- 8V(Level3) -- Button 1+2 -- 7V(Level4)
 +// Use Serial Monitor at 9600 to read the ADC-Levels for different buttons
 +#define VOLTAGE_LEVEL_1 1000
 +#define VOLTAGE_LEVEL_2 900
 +#define VOLTAGE_LEVEL_3 800
 +#define VOLTAGE_LEVEL_4 700
 +
 +
 +byte step_number = 0;
 +byte button = 0;
 +byte old_button = 0;
 +unsigned long button_time = 0;
 +unsigned long debounce_time = 0;
 +unsigned long serial_time = 0;
 +
 +void setup() {
 +  pinMode(STEPPER_PIN_1, OUTPUT);
 +  pinMode(STEPPER_PIN_2, OUTPUT);
 +  pinMode(STEPPER_PIN_3, OUTPUT);
 +  pinMode(STEPPER_PIN_4, OUTPUT);
 +  analogReadResolution(10);
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +
 +  buttonRead();
 +
 +  if (old_button != button) {
 +    button_time = millis() + WAIT_TIME;
 +    if (button == 0) {
 +      digitalWrite(STEPPER_PIN_1, LOW);
 +      digitalWrite(STEPPER_PIN_2, LOW);
 +      digitalWrite(STEPPER_PIN_3, LOW);
 +      digitalWrite(STEPPER_PIN_4, LOW);
 +      if (old_button != 0) {
 +        digitalWrite(VOLT_PIN, HIGH); 
 +        delay(20);
 +        digitalWrite(VOLT_PIN, LOW); 
 +      }
 +    }  
 +    if (button == 1) {
 +      for (int i=0; i < FINESTEPS_LEFT; i++){
 +        OneStep(false);
 +        delay(30);
 +      }
 +    }
 +    if (button == 2) {
 +      for (int i=0; i < FINESTEPS_RIGHT; i++){
 +        OneStep(true);
 +        delay(30);
 +      }
 +    }
 +  }
 +  
 +  if ( (millis() > button_time) && (old_button == button) ) {
 +    if (button == 0) {
 +      digitalWrite(STEPPER_PIN_1, LOW);
 +      digitalWrite(STEPPER_PIN_2, LOW);
 +      digitalWrite(STEPPER_PIN_3, LOW);
 +      digitalWrite(STEPPER_PIN_4, LOW);
 +      if (old_button != 0) {
 +        digitalWrite(VOLT_PIN, HIGH); 
 +        delay(20);
 +        digitalWrite(VOLT_PIN, LOW); 
 +      } 
 +    }  
 +    if (button == 1) {
 +      OneStep(false);
 +      delay(2);
 +    }
 +    if (button == 2) {
 +      OneStep(true);
 +      delay(2);
 +    }
 +        
 +  }
 +
 +
 +  
 +}
 +
 +void buttonRead() {
 +  old_button = button;
 +  int button_voltage = analogRead(VOLT_PIN) * 1.562;  //short for: 5V / 1024steps * 3,2KOhm(R1+R2) / 1KOhm(R2) * 100
 +  byte button_temp = 0;
 +  if ( ( button_voltage > VOLTAGE_LEVEL_1 ) || ( button_voltage < VOLTAGE_LEVEL_4 ) ) button_temp = 0;
 +  if ( ( button_voltage <= VOLTAGE_LEVEL_1 ) && ( button_voltage > VOLTAGE_LEVEL_2 ) ) button_temp = 1;
 +  if ( ( button_voltage <= VOLTAGE_LEVEL_2 ) && ( button_voltage > VOLTAGE_LEVEL_3 ) ) button_temp = 2;
 +  if ( ( button_voltage <= VOLTAGE_LEVEL_3 ) && ( button_voltage > VOLTAGE_LEVEL_4 ) ) button_temp = 3;
 +  if ( (button_temp != button) && (millis() < debounce_time) ) debounce_time = millis() + 2000;
 +  if ( (millis() >= debounce_time) && (button_temp != button) ) button = button_temp;
 +    
 +  if ( millis() >= serial_time ) {  
 +    Serial.print(button_voltage); 
 +    Serial.print(" /100 V - Button pressed: ");
 +    Serial.println(button);
 +    serial_time = millis() + 500;
 +  }
 +  
 +}
 +
 +
 +void OneStep(bool dir){
 +  if(dir){
 +    switch(step_number){
 +      case 0:
 +        digitalWrite(STEPPER_PIN_1, HIGH);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +      break;
 +      case 1:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, HIGH);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +      break;
 +      case 2:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, HIGH);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +      break;
 +      case 3:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, HIGH);
 +      break;
 +    } 
 +  }else{
 +    switch(step_number){
 +      case 0:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, HIGH);
 +      break;
 +      case 1:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, HIGH);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +      break;
 +      case 2:
 +        digitalWrite(STEPPER_PIN_1, LOW);
 +        digitalWrite(STEPPER_PIN_2, HIGH);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +      break;
 +      case 3:
 +        digitalWrite(STEPPER_PIN_1, HIGH);
 +        digitalWrite(STEPPER_PIN_2, LOW);
 +        digitalWrite(STEPPER_PIN_3, LOW);
 +        digitalWrite(STEPPER_PIN_4, LOW);
 +    } 
 +  }
 +  
 +  step_number++;
 +  if(step_number > 3){
 +    step_number = 0;
 +  }
 +}
 +
 +</code>
  
  
  
  
  • /var/www/virtual/funkfr/wiki.funkfreun.de/data/attic/projekte/magloop-dl2ab.1685997945.txt.gz
  • Zuletzt geändert: 05/06/2023 22:45
  • von danielwf