ich bin Zauberer von Beruf und ein Freund wollte mir das Arduino Nano für eine Illusion programmieren. Aus Zeitmangel hat er es mir gegeben und ich habe mein Glück versucht.
Leider komme ich, nach knapp 13 Stunden Recherche und programmieren ohne Pause nicht weiter.
Ich möchte folgendes Programmieren:
Arduino wird mit einer 9V Blockbatterie betrieben und eingeschaltet.
Nach ca. 30 Sek. soll eine Art kleine akkubetriebene "Mini - Rauchmaschiene" eingeschaltet werden (ich denke über ein Relais?) und etwa 20-30 Sek. Nebeln.
dann soll eine LED langsam einfaden (ca. 5 Sek.)
am Hellsten Punkt geht die LED aus und ein kleiner ServoMotor (Blue Arrow, Sub-Micro, Standart Servo) soll sich kurz drehen.
einzeln oder parallel bekomm ich das einigermassen hin, aber nacheinander also Zeitgetimed das ist mir ein wahres Rätsel... Ich hoffe jemand kann mir helfen.
So so, der Zauberer aus Köln benötigt Hilfe, kannst nicht zaubern?
Wie lange willst du denn zaubern?
Solid State Relais, Mosfet. Genaueres erst wenn Daten zur Rauchmaschiene herzauberst.
Kein Problem für ein Zauberer
Zeig doch mal wie du es bereits einzeln oder parallel gezaubert hast, ich vermute mal mit delay();
Schau dir das Beispiel Blink Witout Delay an und ersetze die delays aus deinem Code.
Mit der 9V Blockbatterie kommst Du nicht weit. Vielleicht reicht der Akku der Nebelmaschine auch für den Rest, ansonsten nimm einen größeren Akku.
Vielleicht helfen Dir die Task Makros, um das Timing hinzukriegen. Damit läßt sich jede einzelne Funktion völlig unabhängig von den übrigen entwickeln. Jede Task wartet erst mal auf ihr Startsignal, dann läuft sie los und startet zwischendrin oder am Ende die nächsten Tasks.
einzeln oder parallel bekomm ich das einigermassen hin, aber nacheinander also Zeitgetimed das ist mir ein wahres Rätsel...
Deiner Frage nach glaub ich dir das nicht zeig mal.
Die Frage ist doch eher: Wie steuerst du Nebel-Relais, Power-LED, Servo an?
Und nicht: Wie kriegst du eine Zeitverzögerung hin? Das ist doch trivial.
Eisebaer:
"geht ganz einfach mit delay".warum auch nicht
Ja, jedenfalls wenn das tatsächlich die beschriebene Aufgabe darstellt.
Auch ich sehe kein Hinderungsgrund nicht delay zu verwenden.
delay(30000);
Nebelmaschiene einschalten
delay (20000 bis 30000)
Nebelmaschiene ausschalten
for-schleife zum Faden mit delay()
Servo ansteuern hin und zurück
While(1); // Endlosschleife als Ende
Fragen: ( bin kein Hellseher )
Welche Nebelmaschiene (wie ansteuern)
Welche LED
erstmal vielen Dank, dass sich einige gemeldet haben.
Zur 9V Batterie: reicht für diesen Servo vollkommen aus. Das ganze wird auch nicht lange Laufen (2-3 Minuten)
Zur "Nebelmaschiene": Es ist eine Art "E-Zigarette" mit Akku, was genau da für eine Technik drin steckt kann ich nicht sagen. Auf dem Akku steht nichts drauf. Am Ende soll Arduino das Teil einfach nur Schalten und den Taster, der an dem Gerät dran ist quasi ersetzen.
Zum "Delay" es hat jetzt funktioniert (warum auch immer) leider dreht sich der Servo immer bei Programmstart auf die "Nullstellung" und setzt dann später ein... das sollte nicht sein, da sonst die "Tricktechnik zu früh ausgelöst würde. Zudem soll alles nur 1x durchlaufen. Das habe ich auch noch nicht hinbekommen. Fotos im Anhang
Hier mal mein Code:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
const int relaisPin = 4;
int ledPin = 5;
int pos = 75; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(relaisPin, OUTPUT);
}
void loop() {
delay(1000);
digitalWrite(relaisPin, HIGH);
delay(1000);
digitalWrite(relaisPin, LOW);
delay(1000);
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 2) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
digitalWrite(5, LOW);
for (pos = 45; pos >= 0; pos -= 1) {
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 0; pos >= 45; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
leider dreht sich der Servo immer bei Programmstart auf die "Nullstellung"
Das ist doch das einzig sinnvolle, oder? Kannst aber auch gleich in setup() nach myservo.attach(9);
gleichmyservo.write(45);schreiben. Evtl. isrt das schnell genug.
Sonst musst du eben mechanisch so aufbauen, dass der Servo bei 0 anfängt und aufhört.
Zudem soll alles nur 1x durchlaufen. Das habe ich auch noch nicht hinbekommen
Was nur einmal laufen soll, kommt nach setup().
Du brauchst also nur
Nebenbei angemerkt: alle halbwegs modernen E-Zigaretten schalten nach einer gewissen Zeit ab. Meist bei etwa 10 Sekunden und das ist nicht umgehbar.
Du könntest höchstens nen mittelalterlichen, mechanischen Akkuträger benutzen (die haben einfach nur nen Knopf der den Stromkreis schliesst) aber: das wiederum kann ein Arduino nicht schalten (da gehn einige Ampere durch).
Rechenexempel: meine läuft mit 8W (das ist relativ wenig, Dampfmenge ungefähr wie ne normale Zigarette) bei 3.4V-das gibt bereits etwas über 2A- das ist viel zu viel für einen Arduino-Pin.
Und: dass ein Modellbauservo mit ner 9V-Block-Batterie vernünftig arbeitet, ist ein Gerücht.
Erstens sind die keineswegs für eine so hohe Spannung ausgelegt (generell 4.8V bzw. 5V, einige können bis zu 8V ab), und zweitens ziehn sie bis zu 2A- das schafft so ein Block im Leben nich.
Wenn es trotzdem klappt, hast du Glück- geh aber mal lieber davon aus, ab und zu ein neues Servo zu brauchen, da du es permanent mit Überspannung betreibst (vermutlich geht einfach der 9V-Block so tief in die Knie, dass das Servo überlebt).