variabel 12-24V für Arduino Interrupt verwenden

OP #5146854
Lesenswert?

Hallo, ich habe folgendes Problem:

Ich entwickle/bastle/baue gerade ein Projekt mit dem Arduino und möchte 
einen Interrupt verwenden, dieser Interrupt kommt von einer 
Lichtschranke, die mit 10-30V arbeitet.
Bisher habe ich die Lichtschranke mit 12V betrieben und für den 
Interrupt einfach einen Spannungsteiler (10/6.8 Kiloohm) verwendet, 
funktioniert soweit auch problemlos.

Nun möchte ich aber das ganze Projekt so gestalten, dass ich es mit 12 
oder 24V betreiben kann.

Von dieser Spannung aus würde ich über so ein kleines "buck converter" 
Modul die 5V für den Arduino erzeugen.. hier schonmal die Frage: geht 
sich das mit so einem kleinen Modul von der Leistung her aus, oder wird 
das zu schwach?

https://www.amazon.de/WINOMO-1-23-30V-DC-Einstellbare-Spannung-Konverter/dp/B01B7EEWGK/ref=sr_1_3?ie=UTF8&qid=1505679764&sr=8-3&keywords=step+down

am Arduino hängt noch ein LCD Display(glaube um die 50mA), ein GPS Modul 
(ca. 20mA) und ein Relay(ca. 50mA).

-------------------------------------------------
Nun die zweite Frage
Kann ich, um den Interrupt für den Arduino zu erzeugen (also von 12-24V 
auf 5V) einen Optokoppler verwenden ...oder einen LM7805.. oder gibt es 
da eine 'Standardlösung')
eine eventuelle kleine Verzögerung <10ms ist egal

Ich hatte mir schonmal überlegt einfach einen 'variablen 
Spannungsteiler' mit einem Schalter zu basteln.. nur ist mir das zu 
gefährlich da das Projekt auch andere Leute verwenden werden.

Auch hatte ich mal überlegt, die 12-24V gleich beim Eingang mit einem 
Buck Converter Modul auf 10V zu bringen, dann aufteilen zwischen 
Lichtschranke und Arduino, fixer Spannungsteiler für den Interrupt... 
wäre dies die bessere Lösung?

PS. ich bin weit entfernt von fortgeschritten in dem Gebiet,daher bitte 
um Nachsicht

Danke im Vorraus,
   Thomas
Gast #5146885
Lesenswert?

Thomas S. schrieb:
> kannst du mir das bitte etwas genauer erklären,

Als ESD-Schutz sind bei den IC-Eingängen zu VCC (und zu GND) Dioden 
verbaut. Die kann man zweckentfremden, wenn man den Strom durch einen 
Vorwiderstand begrenzt leiten sie bei höheren Eingangssignalen den Strom 
zu VCC ab.
Leider sind diese Dioden selten spezifiziert, einige mA gehen aber fast 
immer.
Nimm doch einfach deinen 12V Spannungsteiler und bau selber eine 
Schottky-Diode zur Arduino-VCC dazu. Jetzt muss nur noch dein oberer 
Teilerwiderstand den Strom aushalten (bei 24V sind es (24V-5V)/10k, kein 
Problem). Der Stromverbrauch der Arduino-Schaltung muss aber höher sein, 
als diese 1.9mA!
Auch eine 5.1V Z-Diode parallel zum unteren Teilerwiderstand ist ein 
andere Alternative - ein 7805 jedoch eher nicht.
Gast #5146992
Lesenswert?

Diese Frage wird hier gefühlt jede Woche erneut gestellt. Offensichtlich 
ist es zu schwierig, die Antworten bzw. Artikel per Suchfunktion wieder 
zu finden.

Ich habe den Artikel selbst nicht mehr wieder gefunden, bin aber 
ziemlich sicher, daß wir dazu mal was hatten. Wer weiss, wie der Artikel 
hiess?
#5147038
Lesenswert?

Gast #5147059
Lesenswert?

Versorgung: Wenn der Konverter den benötigten Strom bei den gewünschten 
Eingangsspannungen liefern kann, ja klar.

Interrupt: Nimm einen Vorwiderstand und eine Z-Diode. Billig, einfach, 
...
Angehängte Dateien:
Gast #5147071
Lesenswert?

Norbert schrieb:
> Nimm einen Vorwiderstand und eine Z-Diode. Billig, einfach,
... und die Zeichnung ...
R1=2k2? Fast 10mA würde ich der Signalquelle nicht abverlangen wollen, 
kann die das überhaupt?

HildeK schrieb:
> Auch eine 5.1V Z-Diode parallel zum unteren Teilerwiderstand

Ich wollte den unteren Teilerwiderstand absichtlich mit drin haben, weil 
damit auch der LOW-Pegel (wie groß ist der max. bei dem vorhandenen 
Signal?) geringer wird. LOW-Störabstand.
Sollte der zuverlässig <0.8V sein, braucht man den natürlich nicht.
Gast #5147089
Lesenswert?

HildeK schrieb:
> Norbert schrieb:
>> Nimm einen Vorwiderstand und eine Z-Diode. Billig, einfach,
> ... und die Zeichnung ...
> R1=2k2? Fast 10mA würde ich der Signalquelle nicht abverlangen wollen,
> kann die das überhaupt?

Ich weiß das nicht, sag du es mir ;-)

Da wir beide nur vermuten können, hab' ich hier einfach nur einen 
unspektakulären Schätzwert genommen.
Gast #5147305
Lesenswert?

Und schon sind wir schon wieder dabei, Lösungsvorschläge zu posten, ohne 
zu wissen, ob sie überhaupt geeignet sind.

Egal ob Zenerdiode, Spannungsteiler, Optokoppler, Transistor (oder was 
auch immer). Es kommt immer auch auf die Signalquelle an und die 
erwarteten Störungen, die man bei der gelegenheit auch gleich mit 
lsowerden möchte.

Darüber sollten wir zuerst diskutieren.

Ansosten: Ich kann auch mit einer Boeing Zigaretten kaufen gehen. 
Funktioniert ganz bestimmt - ist trotzdem keine kluge Idee.
Gast #5147346
Lesenswert?

Nun, zum aktuellen Stand der Dinge/Informationen ist die 
Aufgabenstellung gelöst. <-PUNKT.

Warum sollten wir über andere Dinge diskutieren?

Wenn/falls irgendwann später Innenwiderstand, Strombegrenzung, 
Flankensteilheit, usw. eingebracht werden, kann sich das ändern.
Gast #5147347
Lesenswert?

Danke schonmal an alle für die vielen Ideen!

.. wäre es die bessere (oder zumindest eine sinnvolle) Lösung die 12-24V 
immer auf 10V zu bringen (also gleich am Eingang) und dann je ein Kabel 
zu Lichtschranke und Arduino (mit 5V buck converter davor)?

und dann ein Spannungsteiler für die 10 zu 5V für den Interrupt

Ps. heute abend poste ich hier einen Link zum Datenblatt der 
Lichtschranke, habe ich leider gerade nicht zur Hand
Gast #5147355
Lesenswert?

> Norbert schrieb:
> Nimm einen Vorwiderstand und eine Z-Diode. Billig, einfach,

Alles Kasperei: Einen NPN-Transistor BC_irgendweas mit 12k-Widerstand 
vor der Basis, fertig. Ob der nun ein oder zwei Basisstrom bekommt, ist 
egal und man hat ihn sowieso in der Schublade.

Ob er Interrupt bei high oder low stattfindet, macht die Software.
Gast #5147585
Lesenswert?

Manfred schrieb:
>> Norbert schrieb:
>> Nimm einen Vorwiderstand und eine Z-Diode. Billig, einfach,
>
> Alles Kasperei: Einen NPN-Transistor BC_irgendweas mit 12k-Widerstand
> vor der Basis, fertig. Ob der nun ein oder zwei Basisstrom bekommt, ist
> egal und man hat ihn sowieso in der Schublade.
>
> Ob er Interrupt bei high oder low stattfindet, macht die Software.

Na endlich einer der wirklich Ahnung hat und uns allen zeigt wie's auf 
die einzig richtige Art gemacht wird.
OP #5147900
Lesenswert?

Meinen loop muss es schaffen ~2 mal in der Sekunde 'abzuwerfen', 
außerdem brauche ich den Interrupt, da die Köder nur sehr sehr kurz die 
Lichtschranke aktivieren.

kurze Erklärung drumherum
Es geht darum, das aus einem Flugzeug Köder abgeworfen werden (Hardware 
dazu bereits vorhanden, funktioniert tadellos), dies geschieht bei 
Fluggeschwindigkeit 180km/h, die Genauigkeit soll +/-5m betragen
Der Abstand soll mit 2 Schaltern einstellbar sein.
Auf dem LCD Display sollen gewünschte (noch nicht fixe Daten) 
dargestellt werden, wsl. der Abstand, die Uhrzeit, irgend sowas.

Bei jedem Abwurf sollen die Daten auf einer SD Karte gespeichert werden.

PS. das ganze funktioniert im 'Autotest' (man hat nicht immer ein 
Flugzeug parat) schon sehr gut, bei gleichbleibender Geschwindigkeit 
+-1m
Beim Beschleunigen z.b. werden die Abstände zu lang, was jedoch beim 
Flugzeug kein Problem sein wird, da dieses nicht so schnell 
beschleunigen kann.

Ich habe nun einen Screenshot aus Fritzing, einen Schaltplan, und den 
Sketch (ich weiß, derzeit noch sehr sehr hässlich, aber funktioniert) 
hinzugefügt.

Hier der Link zur Lichtschranke

http://at.rs-online.com/web/p/optische-naherungsschalter/3146036/
Gast #5148139
Lesenswert?

> Meinen loop muss es schaffen ~2 mal in der Sekunde 'abzuwerfen',

In zwei Sekunden führt ein durchscnnittlicher Mikrocontroller 20 bis 200 
Millionen Befehle aus. Das ist quasi eine Ewigkeit.

Wenn du mit einem derart entspanntem Timin schon Probleme hast, muss ein 
ganz gravierender Designfehler im Programm vorliegen. Wenn du das nicht 
in Ordnung bringst, wird jede Erweiterung warscheinlich zu neuen 
Problemen führen.

Lies dich mal zum Thema Zustandsautomat ein. Zum Beispiel indem du mit 
dem ersten Kapitel auf dieser Seite beginnst: 
http://stefanfrings.de/net_io/protosockets.html
Gast #5148193
Lesenswert?

Das der Arduino grundsätzlich die Berechnung leicht schafft ist mir 
bewusst, nur braucht der LCD soweit ich es im Kopf habe nach jedem 
Update ein delay,
und wenn blöderweise genau in der Zeit ein Köder die Lichtschranke 
auslöst dann wird dieser übersehen, oder liege ich da falsch?

Ich könnte natürlich z.B. mit einem Attiny die Lichtschranke überwachen, 
möchte aber lieber alles mit dem Arduino machen.
Gast #5148244
Lesenswert?

"...nur braucht der LCD soweit ich es im Kopf habe nach jedem
Update ein delay,..."


Da wird der Hase im Pfeffer liegen.

Ein Delay kann man erzeugen, indem man zigtausendmal im Kreis springt 
(Wait-Funktion) und sonst nix tut... quasi Rechenzeit vergeudet. Das 
wendet man nur an, wenn Zeit keine Rolle spielt, oder man schnell 
provisorisch etwas austesten will.

Eine andere Möglichkeit ist, einen Task (z.B. LCD) nur bei jedem n_ten 
Programm-Durchlauf zu aktivieren (Bypass-Methode), damit ein Modul 
zwischenzeitlich seine geforderten Pausen hat. Dadurch steht die 
Rechenzeit den anderen Programmteilen zur Verfügung. Das ist angesagt, 
wenn das Delay zeitlich unkritisch ist und eine gewisse Varianz 
desselben unerheblich ist.

Die dritte, zeitlich präzise Methode, ist, den timing-relevanten Teil 
per Timer-Interrupt, oder Polling eines Timer-Flags einzubinden. Damit 
wird weder kostbare Prozesszeit "verwartet", noch muss man durch 
veränderliche Laufzeiten eine Varianz (Auslösung u. Dauer) des Delays in 
Kauf nehmen.

Ersetze alle Delays, die nach der ersten Methode arbeiten, durch solche, 
die die Rechenpower freigeben, dann hast du neben dieser Popelaufgabe 
der Dosierung noch jede Menge Zeit, um noch nebenher z.B. Statistik auf 
dem Display anzuzeigen, etc...
Gast #5148310
Lesenswert?

Die kommunikation mit dem Display darf beliebig verzögert werden.
Die Erfassung des Köders möchtest du aber möglichst ohne Verzögerung.

Für sowas würden Interrupts erfunden. Jetzt musst du dir nur noch 
überlegen, wer hier wen unterbrechen soll. Du schaffst das!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren