ich bin der Ardunio "Szene" noch komplett neu und beginne gerade damit, die ersten Sketch zu erstellen.
Ich habe ein Ardunio Uno mit einem 2 Kanal Relais gekauft.
Folgendes möchte ich erreichen:
Relais 1 soll beim Start dauerhaft geschlossen sein.
(Hierfür habe ich den Pin vom Relais (IN2) auf GND gesetzt; beim Start ist es dauerhaft geschlossen)
Relais 2 (IN1) soll beim Starten nur kurz schließen und danach wieder öffnen. Es soll erst wieder angehen, wenn eine Spannung auf 2 bestimmten Pins, z.B. 3 Volt, vorliegt. Allerdings nur dann wieder nur einmal kurz schließen und dann wieder öffnen.
Zudem möchte ich erreichen, dass ich beim Start des Arduino kein wildes schalten und klacken der Relais habe.
Ich würde mich über eure Hilfe zu einem Sketch freuen!
Dann poste doch mal Deinen Sketch (setze ihn bitte in Codetags: </>.Button im Forumseditor) und beschreibe genau, wo es klemmt.
Dann können wir Dir sicher helfen.
Benne96:
ich bin der Ardunio "Szene" noch komplett neu und beginne gerade damit, die ersten Sketch zu erstellen.
a) dann zur Klarstellung: keiner erstellt dir hier etwas fertiges. Es gibt nur Hilfe zur Selbsthilfe.
b) Stell deinen Sketch in Code-Tags rein was du hast und beschreibe woran es mangelt.
c) Beschreibe deinen Ablauf IN KURZEN SÄTZEN mit einem Punkt dahinter und schreibe daneben was dein Programm NICHT MACHT.
Bei dem Code ist es ja allerdings so, dass das Relais öffnet und dann wieder schließt.
Ich habe leider noch keinen Code gefunden, bei dem das Relais erst kurz schließt, dann direkt wieder öffnet und erst beim anliegen einer Spannung am Pin bspw. 7 und 8 wieder kurz schließt und dann direkt wieder öffnet.
Ich hoffe du weißt wie ich das meine.
Der Zweck dahinter ist, dass ich meine nachgerüstete Standheizung im Fahrzeug damit steuern möchte.
Hier ist es allerdings so, dass die "REST" Wärme Taste im Auto kurz gedrückt werden muss, damit der Kühlerkreislauf anspringt. Die REST-Wärme geht alledings nach ungefähr 15 min wieder aus. Hier möchte ich die Spannung der LED abgreifen, welche leuchtet wenn sie aktiv ist und das Arduino halt so einbinden, dass es die REST-Wärme Taste "drückt", sobald die LED aus geht.
Gewöhne Dir für die Pin-Zuordnung den Daten-Typ const byte an - viel mehr als 255 Beinchen wird der verwendete µC die nächsten Monate nicht bekommen. (spart ggf. jeweils ein Byte, wobei der Kompiler bei const eh die Werte fest im Programm einträgt)
Wird der Arduino von der Zündung versorgt?
Sonst stelle ich mir 'Relais 1 Dauer AN' irgendwie doof vor.
Nimm Dir ggf. ein Blatt Papier und schreibe auf, was in welcher Reihenfolge passieren soll.
Wenn irgendwelche Knöpfchendrückereien da mit einfließen, erstellst Du so einen durchaus anspruchsvollen Programm-Ablauf-Plan - Diesen musst Du dann 'nur noch' programmieren
da hast Du Dir für den Anfang ja schon mal einiges vorgenommen. Den Blink-Skatch hast Du schön irgendwo her kopiert, jedenfalls hat er mit dem was Du machen willlst fast nichts zu tun.
Da Du uns nicht verraten hast was Du fü einen Controler hast gehe ich jetzt mal von einen UNO oder einem seiner Zwilligsbrüder aus, der arbeitet mit 5V es gibt auch andere Controler die arbeiten mit 3,3V. Achtung Alles was 3,3V hat kann meistens keine 5 Volt vertragen.
Also Du hast drei Themenbereiche. Zu den drei Themen findest Du in der IDE Beispiele und unter Hilfe / Refferenz / die Befehle und auch kleine Beispiele wie diese Befehle verwendet werden.
Du willst bei einer beliebigen Spannung an einen Eingang etwas machen. Dazu wirst Du einen Analogen Eingang benötigen. Also erst mal mit analogen Eingäng beschäftigen, dazu gibt es Beispiele. Um die Spanung ändern zu können verwendest Du am besten ein Potentiometer. Es gibt aber auch Starter -Sets die haben einen LDR mit dabei oder andere analoge Bauteile. Der Widerstandswert für ein Poti ist eigendlich fast egal 1KOhm bis 10 KOhm sind gut geeignet. 0-5V am Eingang des UNO entsprechen dann einem Zahlenwert von 0-1023. Den Zahlenwert kannst Du nun umrechnen auf die Spannung 0-5V.
Wenn das soweit klappt solltest Du Dich mit der If... Else Abfrage beschäftigen. Das ist nicht so schwer wenn Du willst kannst Du auch damit anfangen.
3 Zeitabhängige Ereignisse. Dazu hast Du delay() verwendet. Das Kannst Du zwar machen es bringt aber ein Probelm mit sich. Der Befehl delay sollte eigendlch pause heißen. Der Prozessor mach während der angegebene Zeit nichts mehr ausser zu warten bis die Zeit um ist. Es gibt zwar einige Ausnahmen , aber vergess das jetzt mal, damit kannst Du dich in 3 Monaten mal beschäftigen. Also wenn delay läuft kannst Du keine Analgwert mehr einlesen und auch keine Taster mehr abfragen und nichts anderes mehr schalten. Es ist eben Pause.
Um dennoch sinnvoll mit Zeiten arbeiten zu können kommst Du um die Funktion millis() nicht herum. Dazu gibts Beispiele. Blink without delay das solltes Du duchgearbeitet und verstanden haben. Es gibt auch noch weitere Beispiele zu dem Thema millis() die die da weiter helfen. Es gab hier auch mal eine schöne Erklärung zum Thema " Nachtwächter".
Allerdings habe ich weiterhin das Problem, dass beim Start, dass Relai wie wild klackert. Ein Pin Wechsel brachte keine Abhilfe.
Was genau ist mit "boot loader töten" gemeint?
Oder habt ihr einen anderen Vorschlag?
Dein Problem ist nachwievor der Pin 13.
Du definierst im Setup den Pin 12 als HIGH, verwendest aber Pin 13 als Output.
Verwende ausschließlich Pin 12, dann sollte Ruhe sein.
Benne96:
Allerdings habe ich weiterhin das Problem, dass beim Start, dass Relai wie wild klackert. Ein Pin Wechsel brachte keine Abhilfe.
Hallo,
Pin 13 ist mit der eingebauten LED verbunden. Den Pin solltest Du nicht für ein Relais verwenden. Warum das Realis trotzdem klackert... Ich denke es liegt an der programmierung, ein Relais wird meistens mit LOW hochgezogen, Du hast in der Setup nichts für den Pin stehen, das setzt ihn auf LOW, was wiederum das Relais hochzieht.
void setup()
{
pinMode(8, OUTPUT);
digitalWrite(8, HIGH); // damit das Realis unten bleibt.
digitalWrite(12, HIGH);
Serial.begin(9600);
}
In wie fern 'dauerhaft geschlossen bleibt'?
Auch ist mir akut nicht ganz klar, welches Relais an welchem Pin was genau machen soll.
Solange der Arduino keinen Saft hat, ist der Pin undefiniert - wenn hier die Relais-Platine schon bestromt wird, kann 'Alles Mögliche' passieren - bis zum Sterben des Arduino.
Sobald der Arduino Strom bekommt (und der Bootloader fertig ist), wird Pin 12 (warum gibst Du dem Pin keinen sprechenden Namen und arbeitest mit der Variable? aka const byte BlinkRelaisPin=12; ) auf low gesetzt und das Relais sollte, sofern low-aktiv, anziehen.
Da Du diesen Pin im restlichen Programm in Ruhe lässt, sollte sich daran auch Nichts mehr ändern.
Wenn doch, habe ich Deine Aussagen falsch verstanden - dann möchte ich Dich bitten, das IST und das SOLL möglichst genau zu beschreiben.
Benne96:
Jetzt besteht allerdings das Problem, dass das eine Relais, also das auf Pin 12, nicht dauerhaft geschlossen ist. Woran liegt das?
Was du bisher gut verstehst, ist copy&paste.
Aber du solltest auch unbedingt lernen und den Sketch verstehen..
Das ist aktuell bei dir nicht vorhanden.
Also lerne bitte die Grundlagen.
HotSystems:
Was du bisher gut verstehst, ist copy&paste.
Aber du solltest auch unbedingt lernen und den Sketch verstehen..
Dem kann ich nur zustimmen.
@TO: Du hast offensichtlich meinen Code hergenommen und die flasche Zeile hinausgeschmissen.
digitalWrite(12, HIGH); // hab ich nur aus versehen drinnen lassen, dachte es gibt einen pinMode dazu
void setup()
{
pinMode(8, OUTPUT);
//digitalWrite(12, HIGH); // Der Pin 12 wird nirgends verwendet wenn Du Dich für Pin 8 entschieden hast
digitalWrite(8, HIGH); // Das muss dann aber durchgägig sein.
Serial.begin(9600);
}
Verstehst Du wie Du den Pin ändern kannst, zB: auf Pin 12. Du kannst den Pin auch in einer Variable speichern, so ist es übersichtlicher