INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.
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);
}

Der Motor wurde mit der Steuerplatine A 4988 und externer Stromversorgung angeschlossen lt. folgender Anleitung
https://starthardware.org/arduino-a4988-nema17/ Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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?

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.

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.
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;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.
if (EtageSoll-EtageIst <0) Motor.step(-8); // Wenn der Wert unter 0 ist (Etage ist tiefer als Aufzugsposition), dann fahre runter.
erzeugst Du die Impulse so wie im verlinkten Beispiel.
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 Wink

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sketch für WS2812 klappt nicht ThorstenP 9 119 Gestern 14:50
Letzter Beitrag: ThorstenP
  Sketch anders aufbauen ThorstenP 10 282 25.03.2020 14:01
Letzter Beitrag: MicroBahner
  Sketch Beispiel für WS2812 ThorstenP 5 173 23.03.2020 14:22
Letzter Beitrag: Tommy56
  Brauche Hilfe, Was Stimmt an meinem Sketch nicht Andi-1090 12 392 20.03.2020 10:04
Letzter Beitrag: hotsystems
  sketch mit 2 anstatt einem joystick ardutobias 0 172 14.03.2020 23:54
Letzter Beitrag: ardutobias
  Board Zuordnung zum Sketch arduino2108 1 225 03.03.2020 09:52
Letzter Beitrag: Tommy56
  Arduino Sketch LED luckylocke71 7 390 23.02.2020 15:00
Letzter Beitrag: senseman
  Arduino IDE 1.8.11 , lassen sich keine Sketch.zip hinzufügen Christian_Moba-Arduino 4 484 23.02.2020 13:18
Letzter Beitrag: Christian_Moba-Arduino
  Fehlermeldung bei Sketch upladen Tellen 9 637 10.02.2020 09:33
Letzter Beitrag: Tellen
  Frage zu meinem Sketch JaimyS 7 428 15.01.2020 18:15
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste