Arduino Aufzug Sketch
|
11.01.2020, 15:21
Beitrag #1
|
|||
|
|||
Arduino Aufzug Sketch
Hallo zusammen,
ich habe mich entschieden für meine FIP Prüfung in Technik einen Aufzug zu bauen und mit meinem Arduino zu steuern. Hierzu möchte ich folgenden Sketch verwenden, der einen Schrittmotor, 4 Taster, 4 Lichtschranken und ein OLED Display enthält. Leider ist der Schrittmotor 28BYJ-48- 5V Stepper Motor zu schwach für mein Projekt. Deshalb habe ich mir einen Nema 17 mit A 4988 Steuerplatine gekauft. Leider schaffe ich es nicht den neuen Motor in meinen bisherigen Sketch zu integrieren. Ich bin total verzweifelt und muss das Projekt schon bald abgeben. Vielleicht kann mir jemand helfen. Hier der bisherige Sketch #include <Stepper.h> // Hinzufügen der Programmbibliothek. int SPU = 2048; // Schritte pro Umdrehung. Stepper Motor(SPU, 11,9,10,8); // Der Schrittmotor erhält die Bezeichnung "Motor" und es wird angegeben an welchen Pins der Motor angeschlossen ist. int T1=22, T2=2, T3=3, T4=4, S1=17, S2=16, S3=15, S4=14;// Pins für Taster und Sensoren festlegen int sT1=0, sT2=0, sT3=0, sT4=0, sS1=0, sS2=0, sS3=0, sS4=0;//Statusvariablen für Taster und Sensoren festlegen int EtageSoll=0, EtageIst=0;// Eingabespeicher für Taster und Sensoren festlegen int F=0; // Variable für den Fahrmodus oder Pausemodus int EtageAlt=0; int EtageSollAlt=0; //OLED initialisieren #include <Wire.h> #include "SSD1306Ascii.h" #include "SSD1306AsciiWire.h" #define I2C_ADDRESS 0x3C SSD1306AsciiWire oled; void setup() //Hier beginnt das Setup. { Serial.begin(9600); Motor.setSpeed(6); // Angabe der Geschwindigkeit in Umdrehungen pro Minute. pinMode (T1, INPUT); pinMode (T2, INPUT); pinMode (T3, INPUT); pinMode (T4, INPUT); pinMode (S1, INPUT); pinMode (S2, INPUT); pinMode (S3, INPUT); pinMode (S4, INPUT); //OLED Setup Wire.begin(); Wire.setClock(400000L); oled.begin(&Adafruit128x64, I2C_ADDRESS); oled.setFont(Verdana12); // Auswahl der Schriftart oled.clear(); //Löschen der aktuellen Displayanzeige oled.println("TESTFAHRT"); //Text in der ersten Zeile. "Println" sorgt dabei für einen Zeilensprung. oled.println("Aufzug faehrt"); // Text in der zweiten Zeile. "Println" sorgt dabei für einen Zeilensprung. oled.print("zum Startpunkt"); // Text in der dritten Zeile. delay (2000); // Aufzug in Ausgangsposition fahren for (int i = 0; i <= 1; i++) { Motor.step(-1); sS1 = digitalRead(S1); if (sS1!=1) i=0; Serial.println(sS1); } EtageIst=0; EtageSoll=0; delay(1000); Serial.println("Setup beendet"); oled.clear(); oled.println("Betriebsbereit"); oled.print("Etage: "); oled.println(EtageIst); oled.print("Ziel: "); oled.print(EtageSoll); } void loop() { // Eingabe Serial.print("Warte auf Etagenauswahl "); sT1 = digitalRead(T1); if (sT1==1) EtageSoll=0; sT2 = digitalRead(T2); if (sT2==1) EtageSoll=1; sT3 = digitalRead(T3); if (sT3==1) EtageSoll=2; sT4 = digitalRead(T4); if (sT4==1) EtageSoll=3; // Vor dem auslesen der neuen Position wird die alte Position gespeichert umd Änderungen detektieren zu können //Auslesen der aktuellen Aufzugposition sS1 = digitalRead(S1); if (sS1==1) EtageIst=0; sS2 = digitalRead(S2); if (sS2==1) EtageIst=1; sS3 = digitalRead(S3); if (sS3==1) EtageIst=2; sS4 = digitalRead(S4); if (sS4==1) EtageIst=3; Serial.print(sT1); Serial.print(EtageSoll); Serial.println(EtageIst); //Fahrmodus if (EtageSoll-EtageIst >0) Motor.step(8); // Wenn der Wert über 0 ist (Etage ist höher als Aufzugsposition), dann fahre hoch. if (EtageSoll-EtageIst <0) Motor.step(-8); // Wenn der Wert unter 0 ist (Etage ist tiefer als Aufzugsposition), dann fahre runter. //Display Ansteuerung if (EtageAlt!=EtageIst || EtageSoll!=EtageSollAlt) // Wenn der Aufzug fährt und zwischenzeitlich andere Etagen erreicht, ODER wenn die Etagenwahl geändert wurde, wird das Display aktualisiert mit den neuen Werten { oled.clear(); oled.println("Betriebsbereit"); oled.print("Etage: "); oled.println(EtageIst); oled.print("Ziel: "); oled.print(EtageSoll); } EtageAlt=EtageIst; EtageSollAlt=EtageSoll; } Für eine schnelle Hilfe wäre ich sehr dankbar. Freundliche Grüße luckylocke71 |
|||
11.01.2020, 15:46
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2020 15:47 von Tommy56.)
Beitrag #2
|
|||
|
|||
RE: Arduino Aufzug Sketch
Stelle Deinen Sketch bitte in Codetags. So ist er auch auf portablen Geräten lesbar.
Wie das geht, steht hier. Das kannst Du auch noch nachträglich ändern. Ordentliche Einrückung würde auch die Lesbarkeit erhöhen. (Tipp: <Strg>+T in der IDE hilft Dir dabei) Nema17 sagt nur etwas über die mechanische Befestigung aus. Welchen Motor hast Du genau (Link) und wie hast Du alles angeschlossen? Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
11.01.2020, 16:18
Beitrag #3
|
|||
|
|||
RE: Arduino Aufzug Sketch
Hallo,
danke für deine Hilfe ich probiere es, bin ein blutiger Anfänger. Das ist der Link vom Motor https://www.amazon.de/gp/product/B00PNEQ...UTF8&psc=1 Das ist der bisherige Code Code: #include <Stepper.h> // Hinzufügen der Programmbibliothek. Der Motor wurde mit der Steuerplatine A 4988 und externer Stromversorgung angeschlossen lt. folgender Anleitung https://starthardware.org/arduino-a4988-nema17/ Danke |
|||
11.01.2020, 17:18
Beitrag #4
|
|||
|
|||
RE: Arduino Aufzug Sketch
Ist das jetzt der Sketch für den neuen Stepper?
Du initiierst den Stepper immer noch so wie für den unipolaren 28BYJ-48. Das musst Du ändern, der A4988 wird ganz anders angesteuert und nur noch über 2 Leitungen (Dir/Step) angeschlossen, Ausserdem braucht der neue Motor nur noch 200 Steps/Umdr, da er kein Getriebe hat. Der A4988 ist auch etwas schwach für deinen Motor, der ja 2A braucht. Ist aber die Frage ob Du das volle Drehmoment brauchst. P.S. dein Code im letzten Post ist auch nicht vollständig. Du kannst die Codetags auch noch im ersten Post nachträglich einfügen. Gruß, Franz-Peter |
|||
11.01.2020, 17:30
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2020 17:34 von MicroBahner.)
Beitrag #5
|
|||
|
|||
RE: Arduino Aufzug Sketch
Hab' mir nochmal die Stepper.h angeschaut. Es sieht so aus, dass die den A4988 garnicht ansteuern kann - die kann keine Step/Dir Treiber.
Entweder Du nimmst eine einfache H-Brücke. Dann brauchst Du aber einen anderen Stepper, der für Spannungssteuerung ausgelegt ist. Oder Du verwendest eine andere Lib - z.B. meine MobaTools ( kannst Du über den Biblkiotheksverwalter installieren ). Da musst Du aber beachten, dass die nicht blockierend ist. D.h. der Sketch bleibt nicht stehen, wenn sich der Stepper dreht. Alternative ist die AccelStepper, da gibt es auch blockierende Aufrufe. Gruß, Franz-Peter |
|||
12.01.2020, 20:55
Beitrag #6
|
|||
|
|||
RE: Arduino Aufzug Sketch
(11.01.2020 17:18)MicroBahner schrieb: Ist das jetzt der Sketch für den neuen Stepper? Hallo Hans-Peter, das ist noch der ursprüngliche Sketch. Genau das ist ja mein Problem, dass ich in diesen Sketch den neuen Motor integrieren muss.... ich bringe den Motor mit der Anleitung https://starthardware.org/arduino-a4988-nema17/ alleine zum Laufen, er fährt dann halt nur rauf und runter. Anbei nochmal der vollständige ursprüngliche Sketch Code: include <Stepper.h> // Hinzufügen der Programmbibliothek. |
|||
12.01.2020, 22:03
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 22:15 von MicroBahner.)
Beitrag #7
|
|||
|
|||
RE: Arduino Aufzug Sketch
In der von dir verlinkten Anleitung werden die Stepimpulse ja auch direkt im Sketch - ohne die Stepper-Library - erzeugt. Das geht natürlich.
Du kannst das in deinem Sketch genauso machen. Also schmeiß die Stepper.h raus, und da, wo Du die 8 Schritte machst: Code: if (EtageSoll-EtageIst >0) Motor.step(8); // Wenn der Wert über 0 ist (Etage ist höher als Aufzugsposition), dann fahre hoch. Du musst nur beachten, dass dein neuer Stepper kein Getriebe hat. Du kannst das aber kompensieren, indem Du bei dem A4988 Microstepping einstellst. Mit 1/16 Microstepping kommst Du ja auch auf 200*16 = 3200 Steps/Umdrehung Edit: und da wo Du in die Ausgangsposition fährst natürlich genauso ![]() Gruß, Franz-Peter |
|||
15.01.2020, 16:54
Beitrag #8
|
|||
|
|||
RE: Arduino Aufzug Sketch
Hallo Franz-Peter,
sorry, dass ich mich jetzt erst melde, bin im Stress. Danke für deine Nachricht. Leider schaffe ich es nicht. Der Motor muss ja an verschiedenen Stellen im Sketch ausgetauscht werden und da komme ich schon nicht klar. Im Urspungssketch sind Beschreibungen im ersten Teil, die bei dem anderen erst im 2. Teil kommen.... im Ursprungssketch erhält der Motor die Bezeichnung Motor, das weiß ich auch nicht, wie ich das umsetzen soll... Ich glaube, mir kann man nur helfen, wenn man mir zeigt, wie ich die einzelnen Passagen abändern muss. Ich habe mich mit diesem Projekt total übernommen, leider ist es zu spät nochmal ein Neues zu starten.... Vielen Dank für jede Hilfe luckylocke71 |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste