Gleichstrommotor am Arduino

Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Gleichstrommotor am Arduino

Beitrag von e69-fan »

Hallo Franz,

durch Deinen optimierten Sketch für die Bushaltestelle habe ich nun einen nano frei.

Ich habe auf der Anlage einen kleinen Hubschrauber der mit einen Gleichstrommotor mit Untersetzungsgetriebe per Relais eingeschaltet wird.
Nach Ablauf einer einstellbaren Zeit schaltet der Arduino den Relaiskontakt wieder ab.

Der Motor läuft mit ca. 6 Volt und rund 30 U / Min.

Vorausgesetzt ich hätte die nötige Hardware ( H-Brücke ... ) könnte man den Motor so ansteuern?
  • "Eingabe" startet den Motor
    Die Drehzahl wird bis zu einem festgelegten Wert langsam erhöht
    Motor dreht ein bestimmte Zeit mit Höchstdrehzahl
    nach einer Weile geht die Drehzahl wieder langsam gegen Null
    Motor wird abgeschaltet
Also die Motordrehzahl soll per software gesteuert werden und simuliert einen startenden / landenden Hubschrauber.

Ist nur so ein Gedanke.
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Gleichstrommotor am Arduino

Beitrag von Admin »

Ja, das ist leicht möglich. Für den Hubschrauber brauchst du nicht mal eine H-Brücke. Der Motor muss ja nur in eine Richtung drehen. Also einfach nur ein Mosfet der einen PWM Ausgang verstärkt. Und eine Software die den PWM Wert von Null langsam hochstellt und dann wieder runter bis Null. Also keine Relais, nur so ein kleiner Treiber, und alles ist gut. Solche Dinger habe ich hier rumsausen. Da kannst du einen Einbauen, und wenn du ihn so lassen willst bestellst du einen, dass ich ihn wieder habe. So kannst du erst mal schauen ob du das so willst.

Franz
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Gleichstrommotor am Arduino

Beitrag von e69-fan »

Hallo Franz,

ich wollte mal wieder das Thema "Gleichstrommotor" anstoßen.
Ein Tastendruck o.ä. startet den Motor
Die Drehzahl wird bis zu einem festgelegten Wert langsam erhöht
Motor dreht ein bestimmte Zeit mit Höchstdrehzahl
nach einer Weile geht die Drehzahl wieder langsam gegen Null
Motor wird abgeschaltet

Also die Motordrehzahl soll per software gesteuert werden und simuliert einen startenden / landenden Hubschrauber.
Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Gleichstrommotor am Arduino

Beitrag von Admin »

Hi Wolfgang.
Was ich noch brauche. Wie heißt dieser Motor-Treiber, den du dir dafür besorgt hat. Dass ich weiß welche Steuer-Anschlüße der hat.

Servus
Franz :(V):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Gleichstrommotor am Arduino

Beitrag von e69-fan »

Hallo,

ich habe nur das gefunden:
l298n-dual-h-bruecke-treiber-fuer-2-dc-motoren-mit-pwm-geschwindigkeit-oder-einem-schrittmotor.jpg
l298n-dual-h-bruecke-treiber-fuer-2-dc-motoren-mit-pwm-geschwindigkeit-oder-einem-schrittmotor.jpg (41.04 KiB) 1971 mal betrachtet

Ich vermute damit lässt sich nicht die Geschwindigkeit regeln. :agt:

Servus - Wolfgang

( ich baue gerade eine digitale Schieblehre an die x - Achse )
Dateianhänge
Anschluß.png
Anschluß.png (528.43 KiB) 1971 mal betrachtet
Beschreibung.jpg
Beschreibung.jpg (64.13 KiB) 1971 mal betrachtet
Grüße aus der Heimat der E69
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Gleichstrommotor am Arduino

Beitrag von e69-fan »

Hallo Franz,

ich habe noch dieses Motorshield für einen UNO gefunden.

Ist aber "oversize": Schrittmotoren, DC-Motoren und Servos.

Servus - Wolfgang
Dateianhänge
motor shield.zip
(561.79 KiB) 68-mal heruntergeladen
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Gleichstrommotor am Arduino

Beitrag von Admin »

Der kleine Treiber funktioniert schon mit Drehzahl Reglung. IN1 ist der PWM Eingang von Pin.11, für den Motor-A.

OK. Alles klar. Hat so lange gedauert, weil ich einen Dämlichkeitsfehler gemacht habe. Ich hatte bei den if - Abfragen hinten einen ";" drann. Dann klapt die Abfrage nicht. Dann ist immer alles sofort wahr. Ich habe mit Serial.print() alle möglichen Werte vergleichen, und habe nur immer mehr Fragezeichen im Kopf gehabt. Ich habe echt nicht mehr gewusst was da gespielt wird, bis ich endlich zufällig diese verdammten ";" entdeckt habe. Da schreibt man den Scheiß schon ein paar Jahre, und plötzlich schreibt man solchen Mist rein, obwohl man weiß wie es eigentlich funktioniert :(o): :(o):

OK, alles klar. Hier ist das Programm. Rückwärts drehen brauchst du ja nicht. Also Pin. 15 ist der Taster gegen GND und Pin. 11 ist PWM zum MotorTreiber.
Das Display zeigt die PWM Werte an, die ausgegeben werden. Aber das Display brauchst du ja nicht anschließen.
So ist es jetzt, etwa 16 Sekunden gibt der Motor Gas, 60 Sek. läuft er dann und etwa 11 Sek. regelt er wieder runter.
Ich habe jetzt den Motor gar nicht dran gehabt. Aber habe das PWM - Signal mit den Oszi kontrolliert. Das ist alles super.
"PWM_Lauf" ist der Wert für Vollgas. Nicht über 255 gehen!
"PWM_Stopp" ist der Wert für Stillstand.
"PWM_Wert" nicht verändern, der wird im Programm dauernd verändert und muss anfangs "0" sein.
"Pausezeit01" ist für die Regelgeschwindigkeit beim Gas geben. Wert kleiner ist schneller.
"Laufzeit02" ist die Zeit in Millisekunden, die er Vollgas dreht. 60000ms ist eine Minute.
"Pausezeit03" ist für die Regelgeschwindigkeit beim Gas wegnehmen. Wert kleiner ist schneller.

Code: Alles auswählen

#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 20, 4);
//===================DEKLARATIONEN==============================
int PWM_Output = 11; // PWM Ausgang Pin auf 11
int PWM_Wert = 0;
int PWM_Stopp = 0;
int PWM_Lauf = 255;
byte Merker = 3;
//--Aktuelle Zeit für Zeitmessung---
unsigned long Aktuellzeit = 0;
//--------50ms Etappenzeit------------
unsigned long Startzeit01 = 0;
const unsigned long Pausezeit01 = 50;
//------Eine Minute Laufzeit----------
unsigned long Startzeit02 = 0;
const unsigned long Laufzeit02 = 60000;
//--------30ms Etappenzeit------------
unsigned long Startzeit03 = 0;
const unsigned long Pausezeit03 = 30;
//-----------------------Taster01----------------------------------------
// const byte ist im Programm Constant und byte ist fuer Werte 0-255
const byte Taster01 = 15;           // Pin 15 wird Constant als Taster01 bezeichnet
byte Tasterstatus01 = 0;            // Zum Abfragen des Tatsenpins
unsigned long Sekundenablauf04 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit04 = 200;
//=======================SETUP==================================
void setup()
{
  pinMode(Taster01, INPUT_PULLUP); // Pin 15 fuer Taster01
  pinMode(PWM_Output, OUTPUT);
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print (F("PWM Wert = "));
}
//=======================LOOP===================================
void loop()
{
  Aktuellzeit = millis();
  //------------------------------------------------------------
  //-----------Taster01 abfragen--------------------------------
  if (Aktuellzeit - Sekundenablauf04 >= Pausezeit04) // 200msec abgelaufen?
  {
    Tasterstatus01 = digitalRead(Taster01);         // Pin von Taster01 abfragen
    if (Tasterstatus01 == LOW)
    {
      Merker = 0;
      Sekundenablauf04 = Aktuellzeit;
    }
  }
  // -----------------------------------------------------------
  // -----------------------Tempo erhöhen-----------------------
  if ((Aktuellzeit - Startzeit01 >= Pausezeit01) && (Merker == 0))
  {
    if (PWM_Wert <= PWM_Lauf)
    {
      PWM_Wert ++;
      lcd.setCursor (14, 0);
      lcd.print ("   ");
      lcd.setCursor (14, 0);
      lcd.print (PWM_Wert);
      analogWrite(PWM_Output, PWM_Wert); // PWM_Wert als PWM auf Pin 11 ausgeben
      Startzeit01 = Aktuellzeit;
    }
    if (PWM_Wert == PWM_Lauf)
    {
      Merker = 1;
      Startzeit02 = Aktuellzeit;
    }
  }
  // ----------------------------------------------------------
  // ----------------------Tempo halten------------------------
  if ((Aktuellzeit - Startzeit02 >= Laufzeit02) && (Merker == 1))
  {
    Merker = 2;
  }
  // ----------------------------------------------------------
  // -------------------Tempo reduzieren-----------------------

  if ((Aktuellzeit - Startzeit03 >= Pausezeit03) && (Merker == 2))
  {
    if (PWM_Wert >= PWM_Stopp)
    {
      PWM_Wert --;
      lcd.setCursor (14, 0);
      lcd.print ("   ");
      lcd.setCursor (14, 0);
      lcd.print (PWM_Wert);
      analogWrite(PWM_Output, PWM_Wert); // PWM_Wert als PWM auf Pin 11 ausgeben
      Startzeit03 = Aktuellzeit;
    }
    if (PWM_Wert == PWM_Stopp)
    {
      Merker = 3;
    }
  }
}
//======================ENDE====================================
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Gleichstrommotor am Arduino

Beitrag von Admin »

Ich habe in dem Programm oben, eine Kleinigkeit geändert. Ist nicht Kriegsbedeutend nur eine Verbesserung die man im Ablauf nicht wirklich bemerkt.

Und ein paar Hinweise habe ich noch erklärend zum Programm dazu geschrieben.

Servus
Franz :(V):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Gleichstrommotor am Arduino

Beitrag von e69-fan »

:(V):

Ich werde das Mal am Wochenende testen - erstmal Danke.

Nun muss ich meinen Muskelkater auskurieren - ich habe mich übernommen - selber Schuld


Grüße - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Gleichstrommotor am Arduino

Beitrag von Admin »

OK, mache wie du meinst.
Gute Besserung.

Franz :(V):

PS: Ich bin jeden zweiten Tag 1,0 bis 1,5 Std. am Rudern. Zur Zeit sogar eher jeden Tag. Ich hoffe das führt mich bald zu einem kleinen Erfolg :roll: In einem Monat hoffe ich wieder besser gerüstet für den Sommer zu sein.

Heute sind nochmal 6 Taster mit grünen und roten LED Ring sowie Umschalte - Kontakt gekommen. Jetzt bin ich ganz gut bestückt mit diesen Tastern. Sobald man einen Taster mit Öffner oder Umschalte - Kontakt braucht, wirds immer wesentlich teurer als bei Schließer - Kontakten.
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste