wir haben vor einigen Tagen angefangen uns mit Arduino zu beschäftigen und sitzen gerade an einem Problem fest. Bei unserem Projekt wollen wir mithilfe eines Arduino Uno + Motor Shields einen 12v DC Linearaktuator bewegen.
Von den Werten dürfte es unserer Meinung passen, aber wir schaffen es nicht den Aktuator zu bewegen.
Den Motor vom Aktuator haben wir an + und - vom Shield angeschlossen und über ein externes Netzteil (12v) versorgen wir den Shield. Reicht das so überhaupt für den Motor oder müssen wir diesen direkt ans Netzteil hängen, reicht diese einfache Schaltung schon oder übersehen wir hier etwas?
Wir sind uns auch nicht sicher ob der Code funktioniert, er sollte eigentlich nur vor- und zurückfahren tut er aber nicht, außer piepsen kommt da leider nichts bei rum.
Wir haben eine andere Steuerung, welche eigentlich zum ausrichten von Sattelitenschüsseln gedacht ist, mit dieser können wir den Aktuator bewegen, aber nur in sehr kleinen Schritten, was uns nichts bringt. Aber generell bewegt sich der Aktuator. Der Arduino müsste eig auch einwandfrei funktionieren, da wir diesen mit LEDs getestet haben und alles gut geklappt hat.
für einen Loopdurchlauf braucht ihr 5 Sekunden, macht die delay's mal kleiner,
außerdem, wenn der Motor vorwärts dreht, dreht er sofort danach wieder zurück. Lasst ihn erstmal nur in eine Richtung laufen.
Haben jetzt noch ein Netzteil gefunden welches uns 4A liefert bei 12V und den Motor ohne den Arduino zum laufen bringt. Können wir dieses Netzteil direkt mit dem Shield verbinden oder nur sollten wir es nur für den Motor benutzen und das Shield über ein anderes versorgen?
Motor auf + und - am Shield, 12V an Vin und GND am Shield und aufpassen. daß der Strom nicht über 2A steigt.
Vin auf der Schraubklemme bezeichnet die Versorgungsspannung des
Motors. Eine angeschlossene externe Spannungsversorgung versorgt eben-
falls das Arduino-Board mit Spannung. Durch Trennung des Vin Connect“-”
Jumpers wird die Spannungsversorgung ausschliesslich für den Motor
verwendet.
ardubu:
Motor auf + und - am Shield, 12V an Vin und GND am Shield und aufpassen. daß der Strom nicht über 2A steigt.
Was Du schreibst ist falsch. Einen Motor mit Nennstrom 3,2A an einen Treiber anschließen und dann aufpassen daß der Strom nicht zu groß wird???
Da ist Knaus-Ogino noch sicherer.
Im Leerlauf wird der Motor keine 3,2A ziehen und damit können sie ihren Sketch testen, außerdem können sie mit dem Shield den Motorstrom messen und beim Überschreiten von 2A das Duty des PWM Signals verkleinern.
danke für die ganzen Vorschläge. Hätte uns vielleicht jemand einen Link zu einem 10A Motor Shield von einem deutschen Händler? Bis jetzt haben nur welche auf amerikanischen Seiten gefunden. Der Aktuator fährt zwar jetzt, aber die Power fehlt doch eindeutig. Über Tipps wären wir sehr dankbar.
wir wollen unseren Aktuator jetzt per Tasterdruck starten, also soll er einfach warten bis der Taster gedrückt wird und sein Programm durchlaufen und dann wieder auf den nächsten Tasterdruck warten usw.
Jetzt haben wir aber auch noch zwei LEDs dabei, Rot und Blau, die Rote soll leuchten während der Aktuator fährt, die Blaue soll dann leuchten wenn der Aktuator auf den Tasterdruck wartet. Bis jetzt klappt es den Aktuator über den Taster zu starten, aber die LEDs machen nicht das was sie sollen.
// Inkludierung der Bibliotheken
#include <Servo.h>
// Initialisierung der Pins
const int MotorPinDirection = 12;
const int MotorPinSpeed = 3;
const int MotorPinBrake = 9;
const int LEDblau = 7;
const int LEDrot = 10;
const int Taster = 4;
int TasterState;
// Arbeitsweise der Pins
void setup()
{
pinMode (MotorPinDirection, OUTPUT);
pinMode (MotorPinSpeed, OUTPUT);
pinMode (MotorPinBrake, OUTPUT);
pinMode (LEDblau, OUTPUT);
pinMode (LEDrot, OUTPUT);
pinMode (Taster, INPUT);
digitalWrite(Taster, HIGH);
}
// Programm
void loop()
{
TasterState = digitalRead(Taster); // Auslesen des Tasterwertes
if (TasterState == HIGH) // Signal zum Programmstart
{
// Programmablauf // LEDrot permanent an während des Programms
// 1. Vorwärts für 2 Sekunde (Vmax)
digitalWrite(LEDblau, LOW);
digitalWrite(LEDrot, HIGH);
digitalWrite(MotorPinDirection, HIGH);
analogWrite(MotorPinSpeed, 255);
delay(2000);
// 2. Bremsen
digitalWrite(LEDblau, LOW);
digitalWrite(LEDrot, HIGH);
digitalWrite(MotorPinBrake, HIGH);
delay(2500);
digitalWrite(MotorPinBrake, LOW);
// 3. Rückwärts für 2,26 Sekunde (Vmax)
digitalWrite(LEDblau, LOW);
digitalWrite(LEDrot, HIGH);
digitalWrite(MotorPinDirection, LOW);
analogWrite(MotorPinSpeed, 255);
delay(2260);
// 4. Bremsen
digitalWrite(LEDblau, HIGH);
digitalWrite(LEDrot, LOW);
digitalWrite(MotorPinBrake, HIGH);
delay(5000);
digitalWrite(MotorPinBrake, LOW);
// Programmende
}
else
digitalWrite(LEDblau, HIGH); // Standby Mode, LEDblau leuchtet
digitalWrite(LEDrot, LOW);
digitalWrite(MotorPinBrake, HIGH);
}
Wie gesagt der Aktuator fährt auf Tasterdruck sein Programm einmal durch und wartet dann, die LEDs wiederholen die Schleife aber immer weiter und ignorieren den "else" Teil.
Falls jemand den Fehler erkennt oder uns einen Vorschlag hätte fänden wir das super.