Problem beim Versorgen mit einem Trafo + PN532

Hallo an alle,
ich versuche momentan immernoch einen Arduino Nano (wie sich herausgestellt hat ein Klon) für ein Rückmeldesystem mit NFC für eine Modelleisenbahn zu verwenden. Der Nano bzw. das Programm soll erstens die UIDs von vorbeifahrenden Fahrzeugen auslesen und danach einen Servo stellen, und zweitens zufällig einen zweiten Servo hin- und herbewegen. Das ganze funktioniert auch ganz gut solange der Nano an den Pc angeschlossen ist, aber sobald ich ihn über den Trafo mit Strom versorge blinken nur die TX und L LED und es kommt ein leichtes Klickgeräusch vom Servo an PIN 6 im gleichen Tempo wie das Blinken der LEDs und das Programm startet nicht. Ich glaube aber nicht, dass das Problem beim Trafo(der auch ein extra Modellbahn Trafo ist und zudem relativ neu ist) liegt, sondern vielleicht eher daran, dass das PN532 Modul irgendeine Rückmeldung vom PC benötigt um zu starten. Hat jemand vielleicht eine Idee wo der Fehler liegt und wie man das Problem lösen könnte?

Anbei der Code und ein ganz grober Schaltplan.

Danke für die Antworten im voraus

 #include <SPI.h>
  #include <PN532_SPI.h>
  #include "PN532.h"
    #include <Servo.h>

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
  
unsigned long ReisebusUid = 4294960315;
unsigned long RTWUid = 30636;
unsigned long LoeschfahrzeugUid = 4294942658;
unsigned long GelenkbusUid = 29612;

String Fahrzeug;

long startzeit2 = 0 ;
Servo servo_pin_7;
int zufall = 0 ;
long startzeit1 = 0 ;
Servo servo_pin_6;

long interval1 = 0 ;
long interval2 = 0 ;

void Kreuzung();
void Bus();

void setup(void) {
  Serial.begin(115200);
  Serial.println("Hello!");
  servo_pin_7.attach(7);
  randomSeed(analogRead(A0) + analogRead(A1) + analogRead(A2));
  servo_pin_6.attach(6);
 interval1 = 2000 ;
 interval2 = 1 ;

  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
  
  Serial.println("Waiting for an ISO14443A Card ...");
}


void loop(void) {
  uint8_t success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
  uint8_t uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
    
  // Wait for an ISO14443A type cards (Mifare, etc.).  When one is found
  // 'uid' will be populated with the UID, and uidLength will indicate
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
  
  if (success) {
    // Display some basic information about the card
    Serial.println("Found an ISO14443A card");
    //Serial.print("  UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    //Serial.print("  UID Value: ");
    nfc.PrintHex(uid, uidLength);
    //Serial.println("");
    unsigned long vorhandeneUid;
  vorhandeneUid =  uid[0] << 24;
  vorhandeneUid += uid[1] << 16;
  vorhandeneUid += uid[2] <<  8;
  vorhandeneUid += uid[3];

     if (vorhandeneUid==ReisebusUid){
          Fahrzeug="Reisebus";     
        }
        if (vorhandeneUid==RTWUid){
          Fahrzeug="RTW";   
        }
        if (vorhandeneUid==LoeschfahrzeugUid){
          Fahrzeug="Loeschfahrzeug";
        }
        if (vorhandeneUid==GelenkbusUid){
          Fahrzeug="Gelenkbus";    
        }

  }
   Kreuzung();
   Bus();
}
void Kreuzung()
{
  zufall =   random( 6 ) ;
  if (millis() - startzeit1 >= interval1)
  {
    startzeit1 = millis() ;
    if (zufall <= 2)
    {
      servo_pin_6.write( 105 );
    }
    else
    {
      servo_pin_6.write( 82 );
    }
  }
  
}
void Bus()
{
  if ( millis() - startzeit2 >= interval2 )
  {
    startzeit2 = millis() ;
    if ( Fahrzeug.equals("Reisebus") || Fahrzeug.equals("Gelenkbus"))
    {
        if (Fahrzeug.equals("Gelenkbus"))
    {
      servo_pin_7.write( 50 );
    }
    else
    {
      servo_pin_7.write( 70 );
    }
    }
    else
    {
      servo_pin_7.write( 95 );
    }
  }
 
  
}

Ein Trafo alleine reicht nicht aus.

Ein Trafo liefert eine Wechselspannung, die du niemals ohne erforderliche Gleichrichter und Regler sowie div. Kondensatoren an den Nano anschließen darfst.

Du solltest ein stabilisiertes Netzteil dafür verwenden.

Und was für eine Rückmeldung sollten denn der PC liefern ?

Edit:
Und dein PN532 braucht auch GND

Also der Trafo liefert Gleichspannung habe auch nochmal nachgeschaut.

Das PN532 Modul hat auch den GND angeschlossen, ich habe nur vergessen das zu zeichnen.

Eigentlich soll der PC keine Rückmeldung liefern, ich habe nur den Verdacht das einer der Befehle aus der Library für das Modul das Starten verhindert, dadurch dass der PC nicht angeschlossen ist. Zudem kenne ich mich mit der Library (PN532 library elechouse ) nicht besonders gut aus und weiß nicht ob vielleicht eine serielle Verbindung zum PC benötigt wird zum Auslesen von NFC Tags, darauf bezieht sich die Frage.

Danke für die schnelle Antwort.

Zemizz:
Also der Trafo liefert Gleichspannung habe auch nochmal nachgeschaut.

NEIN....ein Trafo liefert immer Wechselspannung.
Was du vermutlich verwendest, ist ein Netzteil!
Warum schreibst du das nicht und führst uns in die Irre ?

Genaue Angaben sind immer wichtig, wir sehen nicht, was du da aufgebaut hast.

Evtl. sind die 12 Volt ja auch schon zu hoch für deinen Aufbau.

Das PN532 Modul hat auch den GND angeschlossen, ich habe nur vergessen das zu zeichnen.

Eigentlich soll der PC keine Rückmeldung liefern, ich habe nur den Verdacht das einer der Befehle aus der Library für das Modul das Starten verhindert, dadurch dass der PC nicht angeschlossen ist. Zudem kenne ich mich mit der Library (PN532 library elechouse ) nicht besonders gut aus und weiß nicht ob vielleicht eine serielle Verbindung zum PC benötigt wird zum Auslesen von NFC Tags, darauf bezieht sich die Frage.

Danke für die schnelle Antwort.

Dann solltest du dir die Library ansehen.

Normal sind Ausgaben nur zur optionalen Anzeige aber nicht zwingend nötig.

Der Spannungsregler auf dem NANO, der die 12V in 5V wandelt, den NANO, das PN532, + die 2 SERVOS versorgen muss, schaft das nicht. Du benötigst für die Servos ein seperates 5V Versorgungs-Modul. Solange die 5V über USB vom PC kommen (der liefert max 500mA) reicht das bei unbelasteten oder schwach belasteten Servos noch, da der 5V Regler auf dem Nano-Board dann umgangen wird. wenn dieser jedoch den ganzen Strom liefern muss, ist er überfordert. Einerseits durch die grosse Differenz zwischen 12V und 5V und dem Hohen Strom den er da auch noch liefern sollte.
Also ein seperater Regler (od. Stepdown-Modul) für die Servos ist da Pflicht. nicht vergessen GND des 5V-Moduls/Reglers) für die Servos mit GND des Arduinos verbinden, sonst bekommen die Servos kein definiertes Steuersignal mehr.

LG Stefan

@Hotsystems,
Sein Eisenbahn-trafo kann durchaus Gleichspannung liefern, nur ist die sehr wahrscheinlich nicht besonders stabilisiert und oft auch sehr schlecht bis garnicht gesiebt, da in diesen Trafo's meist die Siebelkos eingespart werden - so nem DC-Lokmotor ist dies ja auch relativ egal, der läuft trotzdem. wenn man glück hat, ist wenigstens ein Vollwellen-Gleichrichter eingebaut und nicht nur ne einzelne Diode.

LG Stefan

Deltaflyer:
@Hotsystems,
Sein Eisenbahn-trafo kann durchaus Gleichspannung liefern, nur ist die sehr wahrscheinlich nicht besonders stabilisiert und oft auch sehr schlecht bis garnicht gesiebt, da in diesen Trafo's meist die Siebelkos eingespart werden - so nem DC-Lokmotor ist dies ja auch relativ egal, der läuft trotzdem. wenn man glück hat, ist wenigstens ein Vollwellen-Gleichrichter eingebaut und nicht nur ne einzelne Diode.

Wo steht denn, das es ein Eisenbahn-"Trafo" ist.
Und auch da gibt es Unterschiede.

Ich kann keine Gedanken lesen.

Wenn der TO genauere Angaben macht, können wir auch die richtigen Tipps geben.
So ist das immer nur "stochern im Trüben".

Edit:
OK...habe nochmal gelesen, es soll ein "Modellbahntrafo" sein.

Der aber ganz sicher keine stabilisierte Gleichspannung liefert, die für den Arduino geeignet ist.

Also sollte der TO eine besser geeignete Spannungsquelle verwenden, die auch eine stabilisierte Gleichspannung liefert.

Oder alternativ einen Spannungsregler hinter den Spannungsausgang schalten.

Sorry für mein fehlerhaftes Lesen. :wink:

@HotSystems,

Es sei Dir vergeben :slight_smile:
Ja, als absolutes minimum ist ein Elko, so 1000uf/25V an den Trafo-Ausgang od besser Arduino Vin und GND zu schalten.

und iwie ich schon sagte, ich würde dem Arduino-Spannungsregler bei 12V am Eingang nicht unbedingt 2 Servos aufbürden.
Finde ich etwas gewagt.
Auch das PN532 braucht noch ein bisschen was, das bei annäherung (auslesen des Tags auch noch ansteigt.
Ebenso bei der Datenübermitlung zum Arduino steigt der Strombedarf.

LG Stefan

Deltaflyer:
Ja, als absolutes minimum ist ein Elko, so 1000uf/25V an den Trafo-Ausgang od besser Arduino Vin und GND zu schalten.

und iwie ich schon sagte, ich würde dem Arduino-Spannungsregler bei 12V am Eingang nicht unbedingt 2 Servos aufbürden.
Finde ich etwas gewagt.

Und ich bezweifel, dass die Ausgangsspannung tatsächlich 12 Volt ist.
Ich vermute, die ist jetzt schon höher und wird durch einen Elko an eine für den Arduino kritische Spannung kommen.

Somit sollte der TO mal messen und nicht immer nur raten.
So wie im Eingangspost: Am Trafo liegt es nicht.

Und wie wir sehen, liegt es doch am Trafo.

Also ein vernünftiges Netzteil oder einen Regler dazwischen.

Ja es liegt also doch am Trafo.

Der Spannungsregler auf dem NANO, der die 12V in 5V wandelt, den NANO, das PN532, + die 2 SERVOS versorgen muss, schaft das nicht.

Genau daran wird es liegen.

Danke für die Antworten.

Zemizz:
Ja es liegt also doch am Trafo.

Genau daran wird es liegen.

Danke für die Antworten.

Hast du denn mal die Spannung gemessen ?