Motor Steuerung über Taster Programmieren möglich?

Hallo Zusammen,

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.

Die Hardware habe ich noch nicht.

Ist das umsetzbar?

Gruß

ja.

Hallo,
Vielen Dank für die Antwort.

Entschuldige das ich noch ahnungslos bin.

Bin seit Tagen auf der Suche nach einer ähnlichen Steuerung hier im Forum.
Können Sie mir bitte eine wenig Orientierung geben wie das umgesetzt wird!?

Die Hardware hab ich für mein Projekt ausgesucht, vielleicht können Sie mir noch ein paar Tipps dazu geben.

Arduino Uno Rev3
Abstandssensor LJ18A3-8-Z/BX /
Taster, 3V LED
2 x Motor
MINI-L293D Motortreiber
Motor PWM-Drehzahlregler

Moin's,

hier wird geDutzt :wink:
Ahnungslos wohl eher nicht - gibt ja schonmal Hardware;)

Das könnte ein Problem werden.
Laut Roboter-Bausatz ist der für eine Betriebsspannung von 6-36V ausgelegt.

Damit ist ein Direktanschluß nicht ohne Weiteres möglich.

Prinzipiell brauchst erstmal einen Grundcode, mit dem Du das "hochzählen" der Zeit möglich machst.

Zusatzfrage:
Darf/soll das hochzählen der Laufzeit auch möglich sein, während runtergezählt wird? Also sprich: retriggerbar?

Im Moment bin ich noch ziemlich orientierungslos.

Nein das hochzählen während der Laufzeit wird nicht benötigt.

Na dann mal was zum lernen :wink:
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"));
  }
}

Vielen Dank :pray: für deine Mühe.

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,
es sollen zwei kleine Walzen angetrieben werden die benötigte Geschwindigkeit muss ich noch austesten, denke max. 20 Umdrehungen pro Minute

Hallo,
20U/min ist ja recht langsam, da wirst Du auf jeden Fall einen Getriebemotor benötigen.
Heinz

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…

Hallo,

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

Genau so.

Die Laufzeit soll mit einem Taster eingestellt werden.
Es muss nicht per Display auf eine zehntel genau eingestellt werden.

Als Anfänger bin ich froh wenn es so funktionieren würde wie beschrieben.

hast Du einen zweiten Taster zum spielen?

Der Sensor ist erstmal aussen vor - der braucht wie ich schon schrieb noch ein wenig Hühnerfutter etc.

Ist bestellt…

Hünerfutter :joy: Stromquelle?

Wenn die Hardware in ein paar Tagen da ist werde ich deinen Code testen.
Das ist echt spannend! Freue mich schon drauf.

Gruß

Spannungsquelle.
Und Spannungsteiler.

Bezeichnet so paar kleine (meisst) passive Bauelemente. In diesem Fall wenigstens 2 Widerstände...

Drehrichtung umdrehen kann man mit zwei gleich großen Zahnrädern.
Oder statt dem Riemen eine Welle und 4 Kegelzahnräder.

Beschreibe und zeichne mal was du wirklich vor hast.
Etwas woraus man Dimensionen erkennt, was brauchst an Kräften.
20upm sind ja schon mal gefallen.

Guten Morgen,
Vielen Dank für die Unterstützung.
Ihr seid echt Mega.

Als Anfänger versuche ich mich erstmal an my_xy_projekt Vorschlag und Code.

Schritt für Schritt, ansonsten verliere ich den Überblick.
Wenn die Hardware da ist werde ich mich wieder melden :grin: