PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kann ein Arduino asymmetrische Taktgeber oder Stromstossrelais ersetzen?



marodeste
24.08.2020, 20:18
Hallo,

ich bin Bildhauer und baute bislang die Schaltungen für meine Maschinen, die mit 12V funktionieren, immer mit asymmetrischen Zeitschaltrelais zusammen.
Nun erfuhr ich, dass ein Arduino solche Schaltungen ersetzen können soll.

In meinem konkreten Fall brauche ich drei Druckschalter die jeweils einen 12V Motor für eine bestimmte Zeit antreiben sollen.

Ich habe gelesen, dass ein Arduino nur 5V Ausgangsspannung hat, die Relais für die Hutschiene schalten aber erst ab 8V?
Oder gibt es Arduinos mit höherer Ausgangsspannung?
Oder kann der Arduino direkt die Motoren ansteuern?
Wo finde ich dazu Literatur?

Mit besten Grüßen in das digitale Neuland,

Marodeste

HaWe
24.08.2020, 20:42
hallo,
ein Arduino-Pin ist zu schwach (von der Stromstärke), um Verbraucher direkt zu schalten (außer LEDs), egal ob 5V oder mehr oder weniger.
Man kann aber mit Arduino-Pins Transistoren oder MOSFETS oder H-Brücken ansteuern, die dann ihrerseits die stärkeren Verbraucher schalten, z.B. auch Motoren oder Relais, und dann auch mit weniger oder mehr als den Arduino-eigenen 5V (oder 3,3V bei manchen anderen Typen), z.B. auch 8V oder 12V oder 230V.
Um diese höhere Spannung zu schalten, muss dann natürlich auch eine zugehörige zusätzliche höhere Spannungsquelle her.

http://www.elektronik-kompendium.de/sites/slt/1201131.htm

Andree-HB
25.08.2020, 05:14
Ich empfehle Dir:

https://www.ebay.de/itm/4-Kanal-Relais-Modul-5V-230V-Optokoppler-4-Channel-Relay-fur-Arduino-CP0404A/281353505918

https://funduino.de/

kimberly1895
28.08.2020, 12:00
Ich empfehle Dir:

https://www.ebay.de/itm/4-Kanal-Relais-Modul-5V-230V-Optokoppler-4-Channel-Relay-fur-Arduino-CP0404A/281353505918

https://funduino.de/

Danke für die Empfehlung. Sehr gut!

wkrug
28.08.2020, 15:04
Ein Arduino ist Microcontroller basiert und benötigt deshalb ein Programm das Du vermulich selber schreiben musst.
Dann sind aber die Möglichkeiten schier unendlich - Ich denke aber, das war Dir schon bewusst!

marodeste
29.08.2020, 14:18
Hallo HaWe,

Danke für die Informationen.
Habe mir nun also eine Arduino-Kit zugelegt und bin nun doch etwas verblüfft.
Zwar kann man easy asymmetrische Taktgeber ersetzen, Funktionen in Reihe schalten und mit Relais stärkere Stromkreise schalten, jedoch ist es nicht möglich gleichzeitig mehrere Schaltungen durchzuführen.
Also in meinem konkreten Fall: kann ich mit drei Schaltern zeitgleich drei Motoren separat für eine bestimmte Zeitspanne schalten oder benötige ich dafür drei Arduinos?
Eine andere Frage ist, gibt es eine Möglichkeit die Schaltimpulse anzusammeln?
Danke im Voraus,
Marodeste

HaWe
29.08.2020, 14:48
Hallo HaWe,

Danke für die Informationen.
Habe mir nun also eine Arduino-Kit zugelegt und bin nun doch etwas verblüfft.
Zwar kann man easy asymmetrische Taktgeber ersetzen, Funktionen in Reihe schalten und mit Relais stärkere Stromkreise schalten, jedoch ist es nicht möglich gleichzeitig mehrere Schaltungen durchzuführen.
Also in meinem konkreten Fall: kann ich mit drei Schaltern zeitgleich drei Motoren separat für eine bestimmte Zeitspanne schalten oder benötige ich dafür drei Arduinos?
Eine andere Frage ist, gibt es eine Möglichkeit die Schaltimpulse anzusammeln?
Danke im Voraus,
Marodeste

ja, das geht, und zwar sogar auf verschiedene Weise.
Zum Einen kann man sog. Timer-Interrupts programmieren, die alle unabhängig voneinander ihre eigenen Schaltzeiten haben (z.B. alle 2sec, alle 5 Minuten oder alle 3 Stunden). Die werden unabhängig von der Haupt-Loop aufgerufen, sobald sie ihren Timerwert erreicht haben.
Zum Anderen kann ein Schaltvorgang auch mit sog. Pinchange-Interrupts erreicht werden die ohne feste Zeit auf "äußere Signale" reagieren (Schalter, Ultraschall- oder RFID-Sensoren).
Weiterhin kannst du über die sog. millis()-Funktion auch selber für jeden Vorgang in der Loop eigene Stoppuhren programmieren ("wait without delay").
Außerdem ist mit bestimmten Arduinos (Arduino Due, Zero, ESP32 oder Nano33) auch sog. Multithreading möglich, wo du für jeden Schaltvorgang eine eigene Loop programmierst, die dann sowohl auf Zeitintervalle als auch auf Sensorsignale gesondert reagieren kann, und alle Loops laufen quasi gleichzeitig und unabhängig nebeneinander (über sog Zeitscheiben-Scheduler).
Alles das erfordert aber schon einen relativ tiefen Einstieg in die Programmier-Materie.

PS,
was du mit "ansammeln" meinst, verstehe ich jetzt nicht, aber probier erstmal die einfacheren Schritte, der Rest findet sich später... 8)

PPS,
wenn dein Interrupt (edit: per Timer oder Sensor) irgendwann auslöst, kannst du über die zugehörige Funktion (die du ntl auch schreiben musst) z.B. auch 2, 3 oder 10 Pins gleichzeitig schalten, die dann ihrerseits zugehörige Motoren ansteuern.

marodeste
29.08.2020, 17:02
Besten Dank, Meister HaWe!

Ja, das ist Stoff genug ! Vielleicht sollte ich freiwillig in Quarantäne geraten!


Mit "ansammeln" meine ich, dass wenn der Schalter 5x gedrückt wird und einmal drücken schaltet den Motor für 10s ein, dass dann der Motor eben 50s läuft.
Quasi die Impulse addieren, um insgesamt die Laufdauer davon abhängig zu machen, wie oft im Vorfeld der Schalter gedrückt wurde.
Ist das verständlich?

Nun wollte ich auch nochmal fragen, ob es denn ein richtiges Erklärungsbuch für den Arduino gibt, in dem auch die diversen Ebenen erläutert werden?

Nochmals besten Dank,
Marodeste

Moppi
29.08.2020, 18:40
Wenn Du was generelles zum Einstieg suchst, kann ich Dir dieses Einsteigerkit empfehlen: Arduino Starter Kit für Anfänger K040007
Das Buch enthält viele Schaltungen mit Programmbeispiel und die benötigte Elektronik.
Ich habe das auch immer noch im Schrank, zum Nachschlagen, vieler alltäglicher Problemlösungen.
Darüber hinaus tut es dann das Internet, wo man weitere in die Tiefe gehende Informationen findet.

MfG

HaWe
29.08.2020, 18:57
zum "Ansammeln": ja, auch das geht, ist aber auch eher was für die übernächste Level, nicht schon für absolut erste Schritte. Das Stichwort dazu heißt "Statemachine" oder "Zustandsautomat".

ich habe auch so ein ähnliches Anfängerset als Einstieg gehabt, samt Tutorial für verschiedene Lernprojekte.
Ein Lernprogramm, das alles abdeckt, gibt es nicht, da sind die Möglichkeiten viel zu unüberschaubar.
Vermutlich hast du einen Uno in deinem Starterset, dann guck dir doch mal auch diese Tutorials an (hoffe sie sind noch aktuell):

Arduino Playground
https://www.arduino.cc/en/Tutorial/HomePage

tronixstuff (free tutorials):
http://tronixstuff.com/tutorials/

Sainsmart_Uno-Starter-Kit:
http://www.selloutsoon.com/albums/documents/20-013/SainSmart%20UNO%20Starter%20Kits%20Tutorials.zip

Sainsmart_Nano-Starter-Kit:
http://www.selloutsoon.com/albums/documents/20-013-120/Nano+kit.rar

Sainsmart_Mega2560-Starter-Kit:
https://www.sainsmart.com/products/mega-2560-r3-starter-kit
http://s3.amazonaws.com/s3.image.smart/download/101-52-128/SainSmart%2BStater%2BKit%2BTutorals%2BMEGA2560.rar

Arduino-Praxisbuch_Sommer_Franzis
https://www.elo-web.de/electronic/div/common/registration_form.jsp?showLogin=false&downloadID=2455659&afterLogin=http%253A%252F%252Fwww.elo-web.de%252Felektronik%252Fangebot%252Fpraxisbuch-arduino-aktion&downloadMessage=userShouldBeAuthorized

Arduino-Codereferenz in deutsch (Forumslink):
https://www.arduinoforum.de/arduino-Thread-Code-Referenz-komplett-in-deutsch?pid=32885#pid32885

Funduino Tutorial
http://funduino.de/wp-content/uploads/2016/11/Anleitungen-deutsch-12-2016.pdf

Funduino Anleitung deutsch (Internet):
https://funduino.de/

wkrug
30.08.2020, 08:20
Ich würde das was Du vor hast mit einem Timer Interrupt lösen.
Ein Timer wird so programmiert, das er in festen Zeitintervallen einen Interrupt auslöst.

In diesem Interrupt werden dann ( im Prinzip beliebig viele ) Variablen heruntergezählt, bis sie den Wert 0 erreicht haben.

Im Hauptprogramm werden dann die entsprechenden Relais eingeschaltet und die Werte für die Variablen gesetzt.
Ebenfalls im Hauptprogramm wird das entsprechende Relais ausgeschaltet wenn die dazugehörige Variable den Wert 0 erreicht hat.

Das ist im Prinzip auch easy zu proggen.
Dein Mehrfachdruck ist auch einfach zu realisieren indem man z.B. bei 3 Tastendrücken zu der entsprechenden Variable einfach den gewünschten Wert dreifach addiert.
Bei den Variablen musst Du aufpassen. Eine 8Bit Variable geht maximal bis 255, eine 16Bit bis 65536 usw.
Wird der Wertebereich überschritten fängt die Variable wieder bei 0 an. Das ist gerade bei deinen Mehrfachdrücken gefährlich!

Tastendrücke zu erkennen ist schwieriger, da normale Tasten ( auch Relaiskontakte ) prellen - D.h. bei einem Druck mehrfach öffnen und schließen.
Das muss entweder in der Software, oder der Hardware berücksichtigt werden. Stichwort: Debouncing.

Ich mach das immer so, das ein Taster bei einer Änderung seines Zustandes nach 2, 5, 10ms ( Je nachdem wie "schlecht" der Schalter ist ) nochmals abgefragt wird.
Bestätigt sich die Änderung wird der Tastendruck akzeptiert.
Für die Zeitspanne verwende Ich ebenfalls einen Timer mit Interrupt der aber sehr viel schneller läuft, als der für die Relais - Dauern.

Damit hast Du eigentlich schon alles Rüstzeug für dein Projekt.

021aet04
30.08.2020, 10:53
Ich hätte es genauso gemacht wie wkrug. Ich verstehe nicht ganz warum HaWe immer alles mit MT machen muss. Es gibt sicher genug Anwendungen für MT, aber ein paar Relais ansteuern gehört sicher nicht dazu.

MfG Hannes

HaWe
30.08.2020, 11:01
Ich verstehe nicht ganz warum HaWe immer alles mit MT machen muss.
ich habe doch VIELE Möglichkeiten aufgezeigt, UNTER ANDEREM mit Interrupts, und u.a. AUCH mit Multithreading.
Wer Augen hat zu lesen, der lese!