Habe eine kleine Bahnschranke gebaut als Protoyp .
Die Betätigung erfolgt mit 2 Linear-Servos.
Die Steurung geschieht mit 2 Reflex-Lichtschranken.
Am PC über USB-Kabel : funzt einwandfrei !
Wenn aber die Versorgung über Vin mit gleicher Stromquelle wie die
Servos erfolgt, wackeln die Servos hin und her ohne erkennbaren Zusammenhang mit den Ereignissen an den Lichtschranken.
Auch bei nur einem Servo wird gewackelt !
Die Spannungsversorgung erfolgt über einen Spannungsregler 7805CV,
eine andere Anwendung ohne Ard. mit Gleichstrommotor schafft sie ohne Probleme.
Aber hat das was mit dem Sketch zu tun (?) , den ich hier mal präsentiere :
//- schrankensteurg_w_lsUservo1 : sk_lsUs1.ino
//- Stand : 10.09.2021
//- Autor : W.W.Fietz Hofbieber
#include <Servo.h>
Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo
#define DELAY_MOTOR 500
#define DELAY_LOOP 300
#define DELAY_SERVO 130
int led_red = 4;
int led_yellow = 3;
int led_green = 2;
int pin_geber1 = 5; //-Taster
int pin_geber2 = 6; //-Taster
int pin_ls1 = 9;
int pin_ls2 = 10;
int val_t1 = 1; //-Wert in Taster1
int val_t2 = 1; //-Wert in Taster2
int val_ls1 = 1; //-Wert in LS1
int val_ls2 = 1; //-Wert in LS2
int maxpos = 150;
int startpos = 30;
int pos = startpos;
int stepp = 2;
int lastpos = maxpos;
int counter = 0;
void setup()
{
Serial.begin(9600);
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
pinMode(pin_ls1,INPUT_PULLUP);
pinMode(pin_ls2,INPUT_PULLUP);
myservo1.attach(7);
myservo1.attach(8);
val_t1 = 1; //-Wert in Taster1
val_t2 = 1; //-Wert in Taster2
val_ls1 = 1; //-Wert in LS1
val_ls2 = 1; //-Wert in LS2
}
void loop()
{
digitalWrite(led_yellow, HIGH);
//val_t1 = digitalRead(pin_geber1);
//val_t2 = digitalRead(pin_geber2);
val_ls1 = digitalRead(pin_ls1);
val_ls2 = digitalRead(pin_ls2);
show_vals();
//-delay(1000);
//show_vals();
if(val_ls1 == 0)
{
if(counter == 0)
{
schranke_schliessen();
counter++;
delay(DELAY_MOTOR);
}
else
{
schranke_oeffnen();
counter = 0;
delay(DELAY_MOTOR);
}
}
if(val_ls2 == 0)
{
if(counter > 0)
{
schranke_oeffnen();
counter = 0;
delay(DELAY_MOTOR);
}
else
{
schranke_schliessen();
counter++;
delay(DELAY_MOTOR);
}
}
digitalWrite(led_yellow, LOW);
delay(300);
}
void show_vals()
{
//- der print-Befehl ist Nicht identisch mit dem von Standard-C oder Standard-Java !
//- 2. Parameter ist hier für das Ausgabeformat, nicht für nen numerischen Wert zur Ausgabe !
Serial.print(" LS1 :");
Serial.print(val_ls1);
Serial.print(" LS2 : ");
Serial.print(val_ls2);
Serial.print(" T1 :");
Serial.print(val_t1);
Serial.print(" T2 : ");
Serial.print(val_t2);
Serial.print(" Lastpos : ");
Serial.print(lastpos) ;
Serial.print(" Counter : ");
Serial.println(counter) ;
delay(DELAY_LOOP);
}
void schranke_schliessen()
{
digitalWrite(led_red, HIGH);
for (pos = startpos; pos <= maxpos; pos += stepp)
{ // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo1.write(pos); // tell servo to go to position in variable 'pos'
myservo2.write(pos); // tell servo to go to position in variable 'pos'
delay(DELAY_SERVO); // waits 15ms for the servo to reach the position
}
lastpos = pos;
digitalWrite(led_red, LOW);
}
void schranke_oeffnen()
{
digitalWrite(led_green, HIGH);
for (pos = maxpos; pos >= startpos; pos -= stepp)
{ // goes from 180 degrees to 0 degrees
myservo1.write(pos); // tell servo to go to position in variable 'pos'
myservo2.write(pos); // tell servo to go to position in variable 'pos'
delay(DELAY_SERVO); // waits 15ms for the servo to reach the position
}
lastpos = pos;
digitalWrite(led_green, LOW);
}
Nur die Steuerleitungen der Servos gehen an den Ard.,
die Versorgg erfolgt direkt aus dem LM7805;
eingangsseitig hat dieser etwa 12V aus bereits geregelter Spannungsquelle.
Heraus kommen etwa 4,6V : reichen die dem Ard. Nicht ?
hab hier noch eine Platine mit einem L200 rumliegen..da könnte ich
eine Spannung zwischen 3 und 12 V einstellen, möchte aber auch die Linear-Servos (SOL Expert S15JST von völkner) versorgen, die ja nur 3,7 - 5,0 V haben dürfen..
Warum willst du die 5V nicht einfach in den 5V Zweig einspeisen?
Musst du natürlich trennen, wenn du einen neuen Sketch aufspielst,
alternativ kann man auch die Verbindung lassen,
und ein USB Kabel mit unterbrochener/schaltbarer 5V Leitung verwenden.
Wenn ich mich recht entsinne, kann der 7805 mit Kühlkörper 1 A
(ich war ziemlich nah dran, er kann 750mA Kurzschluss, 2,2A Peak Strom),
für zwei kleine Servos sollte das reichen denke ich.
also der Ard. soll dann völlig unabhängig vom PC auf meiner H0-Anlage tätig werden !
Und ich möchte eigentlich Nicht noch 2 Versorgungen für ein Objekt (Schranke)
bereitstellen müssen, erscheint mir ja reichlich aufwändig..
Wollte gerne mal wissen, wieviel Strom bzw Spannung welche Anschlüsse vertragen,
jetzt auch wg 5V+,Vin usw
hab zwar n Datasheet vom AtMega, aber da stehen überhaupt keine solche Werte drin..
die 2 Lichtschranken brauchen je 15mA..das dürfte auch Ardi mit dem 5V-Pin schaffen, wenn dieser als Ausgang betrieben wird, gelle ?
Kommt ein bissl darauf an, welche Chips wirklich verbaut sind.
Wieviel Spannung am Vin angelegt werden kann, hängt vom verbauten Spannungsregler und vom Strom ab, die die Schaltung auf 5V dann verbraucht. Der Spannungsregler verheizt die zu viele Leistung. Je mehr Spannung, um so heißer. Je mehr Strom um so heißer. Zu viel Hitze bereitet ihm Schaden und im günstigsten Fall schaltet er nur ab. Im Algemeinen sagt man 12 bis 7 V am Vin.
Am 5V sollte man nicht mehr als 5,5V anlegen. Unter 4,5V kann es zu Rechenfehlern kommen (Annahme 16Mhz). Maximal darf da 6V anliegen, das sind aber absolute maximum Ratings. Das steht auch im Datenblatt vom ATMega328P (Wenn du einen anderen ATMega hast steht garantiert auch in diesem die entsprechenden Werte).
Über alles darf der ATMega328P nicht mehr als 200mA treiben.
Pro Port solltest du nicht mehr als 100mA durch den ATMega328P treiben.
Pro Pin solltest du nicht mehr als 20mA treiben.
Dies, und noch mehr, steht im Datenblatt noch genauer unter 28. Electrical Characteristics ATmega328P (microchip.com)
Warum nicht? Vom Gefühl her geht es.
Wie willst du den Arduino nun versorgen? Direkt am 5V-Pin oder am Vin?
Welcher Spannungsregler ist auf deinem Arduino verbaut? Bzw. hast du scharfes Foto von deinem Arduino. Dann kann man bestimmt Rückschlüsse auf den Regler ziehen.
Edit: Und ein Schaltplan wie du die Lichtschranken und den Servo anbinden möchtest währe hilfreich.
Da ich ganz neu bei Ardi bin, muß ich ja erstmal Infos und
Erfahrung sammeln in vielerlei Hinsicht..
Hab jetzt mal am 5V-Pin eingespeist..tut sich beim Servo garnix mehr,
nur die Kontroll-LED's blinken lustig vor sich..keine geregelte Sache mehr !
naja, mit dem Foto : mit welchem Symbol hier im Edotor könnte ich denn
ein Foto einfügen ? ist das das mit 'Hochladen' ?
evtl mach ich morgen maln Foto..
kann Dir aber sagen, was bei völkner angegeben wurde per Screenshot: