ich bräuchte eure Hilfe und Meinung. Möchte zwei Motoren mit einem Arduino ansteuern. Ich habe hierzu schon ein wenig im Forum gelesen
Ich habe bisher keinerlei Erfahrungen mit Arduino Programmieren.
Und zwar möchte ich gerne zwei Motoren ansteuern. Einer soll Links einer Rechts drehen, beide sollen in der gleichen Geschwindigkeit laufen. Das ist machbar habe einiges in Forum dazu gefunden.
Jetzt wird es kompliziert!
Die Steuerung sollte z.B. mit einem Taster programmiert werden, 5 sec. Taster Drücken damit werden die Motoren programmiert und laufen ausgelöst über einen Abstandssensor immer nur die Zeit die man vorher am Taster gedrückt ( zum Beispiel die 5 sec. )hat! Solange bis man wieder eine neue Zeit durch Druck auf dem Taster programmiert.
Na dann mal was zum lernen
Ich hoffe ich habe es genügend kommentiert.
AnStelle eines Motortreibers habe ich erstmal die OnBoardLED als "Kontroll"Medium ausgesucht.
Taste anschliessen und drücken.
Ich habe einige Ausgaben auf dem Seriellen Monitor bei.
Bitte beachte, das ich den SerMon mit 115200 betreibe - kannste unten rechts einstellen.
Und das ich auch etwas anders formatiere, als die Grundeinstellungen sind.
Viel Spass mit.
const byte tasterPin = 2;
const unsigned long bounceTime = 25; // zeit in ms zum entprellen der Taste
unsigned long lastTime = 0; // Merker für Tastendruck
unsigned long laufZeit = 0; //
unsigned long startZeit = 0; // Startzeit, zum hoch UND runterzählen
bool startFreigabe = false;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
pinMode(tasterPin, INPUT_PULLUP); // Taster zwischen PIN und GND
digitalWrite(LED_BUILTIN, LOW);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
unsigned long aktuelleZeit = millis();
if (aktuelleZeit - lastTime >= bounceTime) // Taste wird freigegeben
{
if (digitalRead(tasterPin) == LOW) // Taste gedrückt
{
lastTime = aktuelleZeit; // Merke Zeitpunkt zum entprellen
if (startZeit == 0) // Merker zur Zeitberechnung wird nur ...
{
// // ... gesetzt wenn vorherige Laufzeit abgelaufen
startZeit = aktuelleZeit; // Merken, wann Taste erstmals gedrückt
Serial.println(F("Start Zeit gedrückt"));
}
}
else // Taste nicht gedrueckt
{
if (startFreigabe == false && startZeit != 0)
{
laufZeit = aktuelleZeit - startZeit; // Laufzeit ermitteln
startFreigabe = true; // Ab jetzt darf runtergezählt werden
startZeit = aktuelleZeit; // Merken, wann Taste losgelassen
Serial.print(F("Ende Zeit gedrückt - Laufzeit:"));
Serial.println(laufZeit);
}
}
}
if (startFreigabe == true) // Wenn freigegeben
{
digitalWrite(LED_BUILTIN, HIGH); // Aktion
}
else // Wenn nicht freigegeben
{
digitalWrite(LED_BUILTIN, LOW); // andere Aktion
}
if (aktuelleZeit - startZeit > laufZeit && // Prüfung, ob Zeit abgelaufen
startFreigabe == true) // und freigegeben
{
startFreigabe = false; // Schalte Freigabe ab
startZeit = 0; // setze zurück
Serial.println(F("Ende Laufzeit"));
}
}
Umsetzbar: Ja.
Ich habe allerdings leichte Bedenken wegen der Motoren und der Anforderung "gleiche Geschwindigkeit" .
Lese da PWM und L293D. Gleichstrommotoren könnten etwas auseinanderlaufen. Kommt natürlich auf die Anwendung an; exakter Gleichlauf geht wohl besser mit Schrittmotoren.
Hallo Heinz,
Dankeschön, werde mir einige Komponenten zum Testen bestellen.
Handwerklich sehe ich kein Problem aber das Programmieren ist noch Schwarze Magie für mich…
och das kann man lernen. Willst Du denn den Taster zum "einstellen der Laufteit jedes mal neu nutzen , oder ist das ehr eine Voreinstellung die man letztlich in Zusammenhang mit z.B einem Display als zur Einstellung einer Laufzeit für die Motoren nutzt.
Zum Thema Gleichlauf mit DC Motoren wird das schwierig , Du könntest Encoder (Incrementalgeber)mit an die Drehenden Teile bauen damit die Antriebe gleich laufen und eine"elektronische Welle" nachbauen. Das ist allerdings schon etwas anspruchsvoller.
Schrittmotoren geht auch gut und machen hier Sinn, Oder Du verbindest beide Walzen mit einem Zahnriemen und dann kommst Du mit einem Motor aus.
Heinz
Hallo
Die Laufzeit der Motoren wird nur ab und zu verändert.
Gleichlauf über Riemen wird nicht funktionieren da die Motoren in unterschiedliche Drehrichtung laufen sollen.
Denke es werden die Schrittmotoren.
Erstmal muss ich in das Thema reinkommen.
Hallo,
dann nimm doch noch einen Taster dazu und einer kleinen Disp-Anzeige dann kannst du Zeit mittels Taster +- einstellen und musst da nicht irgendwie mit einer Stoppuhr rum hantieren.
Wie soll denn dann der Start für die Motoren erfolgen, durch den Näherungssensor ? Sensor belegt , Motor ein, Zeit abgelaufen, Motor aus.
Wenn Du eh auf Schrittmotoren wechsen willst kannst Du auch die Schritte ( Winkel) vorgeben Dann kannst Du das mit der Zeit ganz vergessen.
Kannst Dir ja mal erst so einen kleinen Schrittmotor besorgen, die kosten 8€ mit Treiber, ein kleines 0,96" Display bekommst Du auch für 5€ . Ein Uno zum probieren.
Heinz