wie der Titel erahnen lässt, möchte ich eine Spannungsquelle (max 10V, max 500mA) beim Unterschreiten eines gemessenen Spannungs- oder auch Stromwertes im Schaltkreis, zeitverzögert (5000ms) ausschalten.
(Im Schaltkreis befindet sich ein Draht, der an Dicke verliert und deshalb immer weniger Strom leitet, bis er schließlich abreißen würde (Kontakt also unterbrochen))
Selbst habe ich kein großes Wissen über Elektrotechnik, aber so weit ich weiß, würde man das mit Bauelementen über einen Komparator und einen Timer mittels NE555 machen. Ich würde es aber gerne digital umsetzen, also durch ein Programm geregelt und am Besten nur mittels fertig gekaufter Produkte.
Es wäre sehr freundlich, wenn mir jemand sagen könnte, ob so eine Schaltung mit einem fertigen Arduino Board (leicht) realisiert werden könnte.
Ich nehme ean Du hast eine Konstantspannungsquelle.
Die Strommessung mußt Du über externe Elektronik machen. Ich weiß nicht ob es sinnvoll ist das Unterschreiten eines gewissen Stroms durch einen Komparator zu messen oder über einen analogeingang.
Ja, als Netzteil habe ich bisher ein Voltcraft PS-1302 D verwendet. Wobei der Current maximal eingestellt war.
Wenn ich dich weiter richtig verstehe, dann brauche ich ein Teil, dass mir den Strom misst und mir das ganze dann als Output Signal liefert (um das an das Arduino Board anzuschließen).
Aber mit Aussicht auf Erfolg werde ich mich dann erstmal tiefer in Arduino einlesen.
als Stromfühler kannst Du einen einfachen Widerstand nehmen.
Wenn in Deiner Anordnung z.B. 500mA Strom fliessen und Du möchtest bei Unterschreitung von 300mA abschalten, könntest Du einen 1-Ohm Widerstand nehmen und die darüber abfallende Spannung mit einem analogen Eingang messen.
Sobald Dein Grenzwert unterschritten wird, startest Du dann die Verzögerungszeit, und anschliessend schaltest Du den Strom durch Deinen Draht mit einem als Öffner angeschlossenen Relais ab.
Den Meßwiderstand schaltest Du zwischen Draht und Minus-Pol und verbindest den Minus-Pol mit der Masse des Arduinos und den anderen Anschluß des Meßwiderstandes über einen 1kOhm Widerstand an einem Analogeingang.
es ist einige Zeit vergangen, aber nun habe ich mein Projekt soweit realisiert. Allerdings habe ich noch ein Problem mit dem Einlesen der Spannung, um diese gegen einen Referenzwert zu vergleichen.
Dort wo im Bild eine LED ist, befindet sich in Wirklichkeit der Draht im Laugebad.
Was soll es tun:
Die angelegten 7,5V führen zu einem Strom, welcher über eine chemische Reaktion dazu führt, dass der Durchmesser des Drahtes kleiner wird. Der Widerstand ändert sich also. Nun soll Arduino über einen Messwiderstand die Spannung messen (und so indirekt den Widerstand des Drahtes) und im Falle U(eingang)<U(schwelle) das Relais anschalten. Dieses unterbricht den Kreis.
Wo ist das Problem:
Ich habe den schweren Verdacht, dass ich das nun falsch angeschlossen habe. Ich habe schon Uwe's Vorschlag probiert und auch noch mehr herumprobiert, aber ein Eingangssignal wurde wohl nie gemessen.
Das Programm an sich funktionniert aber und auch auch das Relais ist richtig angeschlossen, denn schalte ich das Relais von Anfang an auf HIGH, dann öffnet es auch brav den Kreis. Ich glaube also es ist eher ein Verkabelungsfehler, als ein Programmierfehler.
Hier noch mein Code:
const int analogOutPin = 9; // Relais-Pin
const int analogInPin = A0; // Drahtspannung einlese
float threshold = 15/256; // Schwellspannung von altem Roboter
int led = 13; // Lampe auf Bord
void setup () {
Serial.begin(9600); // bits per sec
pinMode(analogOutPin, OUTPUT); // Pin festlegen als Output
pinMode (analogInPin, INPUT); // Pin festlegen als Input
pinMode(led, OUTPUT); // Lampe als Output, soll ja blinken
}
void loop () {
int sensorValue = analogRead(analogInPin); // Analog Read Eingangsspannung
float voltage = sensorValue*(5.0/1023.0); // Eingangssignal in Spannung umrechnen 1024=Auflösung
if(voltage < threshold) {
delay(5000); // 5s warten und dann..
digitalWrite(analogOutPin, HIGH); // Relais-Spannung anschalten
}
else {
digitalWrite(led, HIGH); // Lampe an
delay(100); // warten
digitalWrite(led, LOW); // Lampe aus
}
}
Für Vorschläge bin ich sehr dankbar, bestimmt ist mein Fehler relativ blöd, ich sehs wohl nur nicht.
Danke!
Marcus
könnte 0.0 sein, da 15 und 256 zwei Integer Zahlen sind...
8-bit µController können von sich aus keine Gleitkomma-Berechnungen, und meist kommt man auch als Mensch ganz gut ohne aus...
Was misst du denn überhaupt ? Welchen Widerstand hat der Draht ( am Anfang, minimal / später ... )
Kannst du mit einem Messgerät die Spannung an deinem 82 Ohm Widerstand messen?
Da du den Arduino über USB mit Strom versorgst, kannst du sicher auch den SerialMonitor aus der IDE anschliessen und dir mit Serial.print sagen lassen was passiert.
Erst mal dürfte es dich doch wundern, dass deine LED an Pin 13 dauerhaft leuchtet, oder? Wenn man schon delay() benutzt, sollte man zwei Pausen einfügen: Einschalten-Pause-Ausschalten-Pause, ansonsten kommt gleich wieder die nächste Ausschalt-Anweisung.
Dann sollte dich interessieren, wie und ob sich voltage tatsächlich verändert. Ein Serial.begin hast du schon in der setup-Routine, mit Serial.print kannst du auch die sich ändernde Spannung ausgeben.
Zum Schaltplan: Sieht ein bisschen wirr aus, schaltest du das Relais tatsächlich direkt am Pin? Ist die Stromaufbnahme nicht zu groß? Hast du eine Löschdiode verbaut, die deinen Pin vor Spannungsspitzen schützt?
Du kannst zum Testen auch ein Poti mit 1000 Ohm einbauen (statt der LED ;)), um die Spannungsänderung zu simulieren.
Ich teste eure Vorschläge durch und werde mir die Werte mal über den Serial ausgeben lassen. Habe den Messwiderstand schon über ein Multimeter mitgemessen, da fällt die Spannung wunderbar. Allerdings stimmt vielleicht mit der Umrechnung was nicht, denn auch wenn das Multimeter 0,02V anzeigt (Schwellenwert sollte 0,058V sein) unterbricht er nicht. Einen Transistor gegen Peaks habe ich (2N2222), nur war die Zeichnung schon "wirr" genug
Danke soweit, ich teste weiter und frage nochmal, wenn ich weiter bin.
Ihr hattet natürlich vollkommen recht, ich habe schon extra double hergenommen und dann schreibe ich aber einen Integer hin. My bad.
Habe die Werte ausgetauscht und lasse mir nun getaktet die Werte auf dem Serialmonitor ausgeben und alles klappt wunderbar - die Drähte sehen so aus, wie sie sollen.