Wie auslesen ob Strom an der 12V Schiene anliegt?

Hallo,

ich habe einen Funkmeldeempfänger mit Dockingstation, an der Dockingstation hängt eine kleine Sirene (12,7 V/DC mit DMM gemessen), die im Falle eines Alarms ausgelöst wird. Die Sirene habe ich abgeklemmt, stattdessen soll über Arduino nun festgestellt werden ob Strom anliegt oder nicht. Im Prinzip ist der Aufbau ja wie ein Pushbutton aber das Problem liegt bei den 12V. Kann ich die iwie auf 5V wandeln? Im Netz habe ich Ansätze mit LM317 gefunden aber da gab's auch Nachteile. Oder wäre es einfacher mit einem Relais umzusetzen?

  1. Die kleine Sirene ist ein Verbraucher und zieht daher Strom. Diese ist ja nun abgeklemmt, muss ich mir trotzdem sorgen machen, dass mehr als 40mA durch den digitalen Pin reinkommen können? Das Board kann doch nicht als Verbraucher angesehen werden oder? Will da natürlich nichts zerstören auf dem Board.

Ich denke an der Art meiner Fragen habt ihr schon festgestellt, dass ich nicht aus der Elektrotechnik komme ^^ Danke für die Hilfe.

Dein Problem ist "Wie bekomme ich 12,7 Volt auf weniger als 5 Volt" Richtig?

Mach doch einen Spannungsteiler (2 Widerstände) dran. Damit gehst du dann in einen der analogen Eingänge. Oder du nimmst einen Festspannungsregler, der weniger als 5 Volt hat, z. B. 78L02.

Frank

Gelegenheitsbastler: Damit gehst du dann in einen der analogen Eingänge.

Unnötig. Es reicht auch ein Digital-Eingang. Die brauchen nämlich gar nicht genau 5V um als HIGH erkannt zu werden.

Das wusste ich nicht. Wieder was gelernt :slight_smile:

Zunächst mal rein sicherheitstechnisch die Frage: Du besitzt aber schon noch einen richtigen abgenommenen und garantiert funktionsfähigen Pager, oder?

Ich würde hier ebenfalls die Lösung mit dem 780* empfehlen, allerdings noch mit einem sehr großen Widerstand (10k oder so), wir wollen ja nur die Spannung messen (und mit dem Widerstand den Arduino schützen). Ich hätte imho gerne noch nen paar mehr Infos zu dem BME, weil ich mir nicht sicher bin, ob da wirklich einfach DC anliegt, oder noch andere Dinge.

Meistens können DMMs das nicht so einfach messen.

Noch ne Empfehlung: nimm einen Optokoppler, dann bist Du in mehrfacher Hinsicht auf der sicheren Seite.

Gelegenheitsbastler:
Das wusste ich nicht. Wieder was gelernt :slight_smile:

Atmega328 Datenblatt Seite 313:

“Input High Voltage: min. 0.6 * Vcc”, d.h. 3V

Maximal ist Vcc + 0.5V = 5.5V

Hallo zusammen,

vielen Dank für die vielen Vorschläge. Viele Wege führen wohl nach Rom ^^ Ich werde mich in der kommenden Woche mal damit befassen.

Optokoppler kannte ich gar nicht, klingt auf jeden Fall nach einer interessanten Technik.

@Manawyrm: Der ist von Bosch und heißt "BOSCH FME 85" ist baugleich mit Swissphone re228

Gelegenheitsbastler: Dein Problem ist "Wie bekomme ich 12,7 Volt auf weniger als 5 Volt" Richtig?

Mach doch einen Spannungsteiler (2 Widerstände) dran. Damit gehst du dann in einen der analogen Eingänge. Oder du nimmst einen Festspannungsregler, der weniger als 5 Volt hat, z. B. 78L02.

Frank

Der 78L02 ist nicht für 5V sondern gibt ca 2,5V.

Ein guter Vorschlag ist ein Optokoppler. Grüße Uwe

Hallo Leute,

habe einen 4N36 von einem Kumpel bekommen. Erst wusste ich nicht auf welcher Seite LED und Emitter/Collector waren, weil die Kerbe war nicht unten oder oben sondern seitlich ^^

Auf der LED-Seite liegen 13,3V (schwankt wohl um 0,5V) mit einem 730Ohm Widerstand an. Beim Messen mit aktivem 4N36 werden daraus allerdings 1,15V und ich weiß nicht warum das so ist … aber es funktioniert. Auf der Emitter/Collector kann der der Arduino seine eigenen 5V über einen Digitaleingang als HIGH auslesen, wenn Spannung auf der 12V Schiene liegt (10k Ohm Widerstand).

Auf dem Arduino läuft auch ein Ethernet-Server (EhternetShield W5100 [wohl nicht offiziell]) da ich die aktuelle Zeit und das Datum (über NTP Server) benötige. Den Arduino pinge ich während des Betriebs um zu schauen ob eine Verbindung besteht.

Trotz des Erfolgserlebnisses mit dem Optokoppler, kam es gestern zu Schwierigkeiten, deren Ursache ich noch nicht herausgefunden habe: Ping war auf einmal nicht mehr möglich, aber Arduino hat noch seine Schleife (in der er gerade war, die ging über 30Sek.) durchgeführt, dann hat er aber auch keine Befehle mehr entgegen genommen (z.B. Pushbutton, was vorher noch funktionierte).

Echt schade, dass alle Pins beim Shield durchgeschliffen werden, ich hoffe ich verwende keine Pins die vom Shield benötigt werden. Das offizielle Shield benötigt folgende Pins:

Der Arduino kommuniziert mit dem W5100-Chip und der SD-Karte über den SPI-Bus (über den integrierten ICSP-Anschluss auf den Platinen). Dieser liegt auf den digitalen Anschlüssen 11, 12 und 13 beim Arduino Duemilanove bzw. auf den Anschlüssen 50, 51 und 52 beim Arduino Mega.

Bei der SD-Karte setzt man dazu den Anschluss 4 als Ausgang und setzt ihn auf HIGH. Beim W5100-Chip setzt man dazu den Anschluss 10 als Ausgang und setzt ihn auf HIGH.

Ich benutze den Mega, wieso die Pins 50, 51 und 52 erwähnt werden ist mir schleierhaft, diese Pins werden vom Shield doch gar nicht berührt…?

Tja und gestern abend, konnte ich keinen Kontakt mehr mit Arduino aufnehmen. Die COM-Verbindung war weg und kam auch nicht zurück als ich ein paar mal USB abgezogen und wieder angesteckt habe. Auch blieben die LEDs auf dem Shield ausgeschaltet die normalerweise rot und grün werden.

Seit heute morgen habe ich wieder Kontakt. Vllt lag’s auch am PC. Ich muss mal weiter teste…
P.S. Ich habe gerade bemerkt, dass sich Arduino neustartet sobald ich den SerialMonitor öffne, sehr strange … :confused:

Vllt habt ihr ja eine Idee.
Auf jeden Fall wollte ich mich noch für die Sache mit dem Optokoppler bedanken :slight_smile:

P.S. Ich habe gerade bemerkt, dass sich Arduino neustartet sobald ich den SerialMonitor öffne, sehr strange

Willkommen im Club, das hast du gut gesehen ;)

Das hilft beim Hochladen neuer Sketche, wofür zunächst ein Reset erforderlich ist. Wenn möglich, schreib deine Sketche so, dass ein gelegentlicher Reset nicht weiter stört.

Ansonsten kann man das auch verhindern, viel Spass beim googeln.


Und dass an einer LED von 13V nicht viel übrig bleibt, gilt genauso für einen Optokoppler ( mit z.B. nur 1,2V Vf ), für den Rest ist der Vorwiderstand da. Auch richtig gesehen ;) Wenn der Open Collektor Ausgang des Optokopplers vom Pullup des Arduino betrieben wird, brauchst du auch nur einen minimalen Strom auf der Eingangs-Seite: dein 730 Ohm Widerstand könnte also auch höher sein, muss aber nicht. ( Kannst ja mal 4,7k ausprobieren, das sollte auch noch gehen. )

michael_x:

P.S. Ich habe gerade bemerkt, dass sich Arduino neustartet sobald ich den SerialMonitor öffne, sehr strange

Willkommen im Club, das hast du gut gesehen ;)

Das hilft beim Hochladen neuer Sketche, wofür zunächst ein Reset erforderlich ist. Wenn möglich, schreib deine Sketche so, dass ein gelegentlicher Reset nicht weiter stört.

Ansonsten kann man das auch verhindern, viel Spass beim googeln.

...

Danke für die Anwort.

Bezüglich der Resets: Sicher, dass wir von der gleichen Sache sprechen? Dass ein Reset nach dem Upload eines Sketches passiert ist mir schon klar und ist ja auch nachvollziehbar.

Ich bezog mich allerdings auf Resets die passieren wenn ich nur den SerialMonitor öffne. Ich möchte jetzt nicht meine Hand ins Feuer legen, aber ich bin mir sicher, dass das vorher nicht so war.

Schönen Sonntag

Du kannst Dir sicher sein, das war vorher auch so.

Kleine Anmerkung zum Resetten:

Beim Serial Monitor ist mir das auch aufgefallen.

Dann hatte ich mir mal mit Delphi und der ComPort-Komponente so was wie nen kleines Terminal gebastelt. Zunächst habe ich das aus dem Demo-Code genommen, weil es für erste Test sehr gut geeignet war und man kleine Erweiterung "on th fly" dazuschreiben konnte. Auch dieses Terminal verursachte jedes Mal bei Aufbau der seriellen Verbindung einen Reset, was mich eigentlich nie wirklich (bisher) gestört hat.

Nun habe ich greade dabei, für mein MegaStepper-Projekt eine entsprechende Steuerungs-Soft zu schreiben - und benutze auch da die gleiche Komponente. Ich bin mir sicher alles 1:1 kopiert zu haben - es funktioniert ja auch tadellos. ABER: In der "Konstellation" habe ich interessanterweise KEINEN Reset ! Ich bin bisher noch nicht drauf gekommen, warum.

Meines Wissens kann man nicht verhindern, dass das Betriebssystem ( Windows oder Linux ) beim Öffnen eines Seriellen Ports erstmal dessen DTR Signal mindestens kurz auf 0 zieht. Das führt in der Regel bei einem Arduino zu dessen Reset ( um Uploads zu erleichtern ).

@TERWI: Kann es sein, dass dein Programm so früh Serial.Open ausführt, dass du entsprechende Anzeichen gar nicht siehst ? Sonst würde es mich schon interessieren wie du es per PC Software hinkriegst, denn alles andere ( Harware-Modifikationen am Arduino, zumindest ein Kondensator am Reset Pin, der für Uploads wieder weg sollte ) ist doch so lästig, dass ich mich an den Reset notgedrungen gewöhnt habe.

Nein, ich hab auch auf Windoof-Seite immer noch ne Knopf, mit dem ich COM öffne. Der Mega liegt immer im Blickbereich. Wenn ich mit meiner App öffne, blinkt nix auf dem Mega - zumindestens nicht sichtbar. In der Startsequenz stehen z.Zt. auch noch gleich einige Befehle an, die nach dem öffnen sofort ausgeführt werden und mit passendem Echo auch quittiert werden. Da kann kein Reset sein ....

Mache ich das mit dem "baugleichen" Terminal oder dem Serial-Monitor, dann schon. Der Unterschied zwischen App und dem "fertigen" Terminal in Delphi liegen darin, das beim Terminal die grafische Komponente auf der Form liegt - in meiner App habe ich die Komponente in einer nichtgrafischen Unit und initialisiere alles selbst. Vermutlich wird da unterschiedlich initialisiert .... ich "ziehe" jedenfalls nicht an RTS oder DTR.

Ich hab das eben mal schnell ausprobiert und mein Proggie ein bischen erweitert.

"Sende DTR" ist hier wohl das Zauberwort. Das veranlasst den Arduino ganz offensichtlich zum Reset ! Das scheint wohl das OS (hier Windoof XP) mal ausnahmsweise NICHT selbst zu machen - da muss der Progger schon tippen .... Leider kommt kein übliches "Sende DSR Echo" zurück, damit man feststellen kann, wann Herr Arduino mit dem Reset fertig und wieder empfangsbereit ist.

Baut man allerdings in void SetUp so was wie ein

Serial.println(F("... ich bin jetzt wach ..."));

mit ein, dann weiß man wann er empfangsbereit ist. Muss man nur drauf reagieren ... ansonsten gehen ggf. Daten auf den Schnittstellen verloren, was recht unschön ist und wieder separat geprüft werden müsste.

..... vielleicht sollte man mal im BootLoader ein DSR nach Reset implementieren ?

"Sende DTR" ist hier wohl das Zauberwort. Das veranlasst den Arduino ganz offensichtlich zum Reset ! Das scheint wohl das OS (hier Windoof XP) mal ausnahmsweise NICHT selbst zu machen - da muss der Progger schon tippen .... Leider kommt kein übliches "Sende DSR Echo" zurück, damit man feststellen kann, wann Herr Arduino mit dem Reset fertig und wieder empfangsbereit ist. [...] ..... vielleicht sollte man mal im BootLoader ein DSR nach Reset implementieren ?

Ein DTR / DSR Handshake scheitert erstmal daran, dass ein entsprechendes Signal zurückgesendet werden müsste. Über welchen Pin des atmega328 oder 2560 (?). Und auch beim 16U2 des Arduino UNO ist da nichts vorgesehen. Wohl auch nicht in dessen Software.

Wenn der PC wissen muss, wann "Herr Arduino" bereit ist, sollte der besser was auf Tx senden. Software-Handshake hiess das früher, und dafür waren die ASCII -Zeichen XON / XOFF mehr oder weniger reserviert. https://en.wikipedia.org/wiki/Software_flow_control Kannst natürlich auch was ausführlicheres senden, Sketch-Name+Versionsnummer oder so...

Kann sein, dass dein Prog ( anders als andere ) DTR einfach unverändert lässt, so dass der Arduino gar nichts mitkriegen kann. Müsste ich mal ausprobieren, ob das in .NET auch hinzukriegen ist. Fragt sich dann, ob -- angenommen der Arduino war sonstwie stromversorgt -- nicht schon das Aufstecken des USB-Kabels einen Reset auslöst, wenn der PC erkennt, dass jetzt die serielle Schnittstelle existiert.

(Danke rancor, dass wir deinen Thread so nett missbrauchen dürfen. Reset passiert übrigens vor dem Upload, damit der bootloader überhaupt drankommt) ;)

michael_x: (Danke rancor, dass wir deinen Thread so nett missbrauchen dürfen. Reset passiert übrigens vor dem Upload, damit der bootloader überhaupt drankommt) ;)

Kein Ding :D

Vllt kann mir noch jem. erklären warum soviel Spannung abfällt beim Optokoppler, das habe ich nicht verstanden.

Danke

kann mir noch jem. erklären warum soviel Spannung abfällt beim Optokoppler

So viel ? Eher warum so wenig, wenn du die Eingangsseite nimmst ? Eine "normale" LED hat in der Regel einen Spannungsabfall von 1.8V (rot) bis 3.2V (blau/weiss), die LED in deinem Optokoppler nur typ. 1.2V ( bei IF = 10mA ) Datenblatt 4N36

Auf der LED-Seite liegen 13,3V (schwankt wohl um 0,5V) mit einem 730Ohm Widerstand an. Beim Messen mit aktivem 4N36 werden daraus allerdings 1,15V und ich weiß nicht warum das so ist .... aber es funktioniert. Auf der Emitter/Collector kann der der Arduino seine eigenen 5V über einen Digitaleingang als HIGH auslesen, wenn Spannung auf der 12V Schiene liegt (10k Ohm Widerstand).

Ich hoffe, du hast den 730 Ohm Widerstand in Reihe mit dem Optokoppler an deinen 13,3V. Dann teilen sich die 13.3V in 1.3V am Optokoppler und 12.0V am Widerstand, und es fliessen 12/0.73 = 16.5mA ( Just fine )