Ard. Ohne Verbindg z PC, über Vin : alles anders?

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);
}

5 Volt sind zu wenig für VIN, geh' direkt an 5V.

???

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 ?

Was für ein Arduino ist dein Arduino?

VIN ist für Spannungen zwischen 6,5V und 12V.

Ist 4,6 größer als 6,5?

Außerdem kann der Spannungsregler 7805 nicht genug Strom für zwei Servos liefern.

danke Whandall,

das ist ein Nano (Klone ?).

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.

hi,

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..

Nochmals,

Meine Bewegunsmelder-Lampe auf dem Speicher ist genauso konstruiert.
12V Versorgung, Step-Down auf 5V für den Arduino an 5V.

Neue Programme spiele ich ohne das Netzteil auf.

hi Whandhall,

ich weiß echt nicht wie du das meinst..bitte mal genauer..

wieviel Spannung darf denn der Nano an Vin haben ?
Soll ich evtl direkt 15V draufgeben ?
und nur die Servos laufen über den LM7805 ???

Vergiss VIN, verbinde 5V mit 5V.

VIN geht auf einen winzigen Spannungsregler, den du nicht brauchst,
da du ja schon 5V hast.

ach so..das wäre hier der pin27 da steht +5V..ich dachte, das wäre ein Ausgang
zur Versorgg von z.B. Lichtschranken oder so..

sehe grade, das ist Beides laut Layout-Angabe..

ok, probier ich nachher mal aus..hoffe Ardi verträgt das :slight_smile:

Da ist doch eine Diode zwischen 5V-Pin und 5V-USB. Warum das trennen?

Kann auch eine Einspeisung der Versorgungsspannung sein.

Grüße Uwe

Ich meine, ich hätte auch schon Modelle ohne gesehen,
die niedrige Versorgungsspannung bei Betrieb über USB ist mir aber häufiger aufgefallen.

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)

hallo Plumps,
danke auch für das sehr umfangreiche Datenblatt..

na dann kann ich den 5V-Pin Nicht benutzen , weder für die Servos (je max 30 mA)
noch die Lichtschranken (je max 15mA)

werde am WE mal die L200-Regler-Platine probieren..evtl gehts damit besser

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:

ist das so verwendbar ?

soviel hab ich allerdings nicht bezahlt vor 10 Tagen..
und an deren Webseite wurde auch was gebaut,sah anders aus vorher..