Zauberer benötigt Hilfe!

Hallo zusammen,

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:

  1. Arduino wird mit einer 9V Blockbatterie betrieben und eingeschaltet.
  2. Nach ca. 30 Sek. soll eine Art kleine akkubetriebene "Mini - Rauchmaschiene" eingeschaltet werden (ich denke über ein Relais?) und etwa 20-30 Sek. Nebeln.
  3. dann soll eine LED langsam einfaden (ca. 5 Sek.)
  4. 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.

Viele Grüße aus Köln
Andreas

Swann777:
Hallo zusammen,

ich bin Zauberer...

Viele Grüße aus Köln
Andreas

So so, der Zauberer aus Köln benötigt Hilfe, kannst nicht zaubern? :smiley:

  1. Wie lange willst du denn zaubern?
  2. Solid State Relais, Mosfet. Genaueres erst wenn Daten zur Rauchmaschiene herzauberst.
  3. 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.

hi,

typischer fall von "geht ganz einfach mit delay". warum auch nicht?

gruß stefan

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 :wink: 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.

Was soll eigentlich danach passieren?

na dann zaubert er...

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 :wink: )
Welche Nebelmaschiene (wie ansteuern)
Welche LED

Einen 9V Batterie ist für einen Servo zu schwach.

Grüße Uwe

Hallo alle zusammen,

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 :slight_smile:

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
  }   
 }

hier die Fotos

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

 void loop() {}  // schon fertig

Swann777:
... leider dreht sich der Servo immer bei Programmstart auf die "Nullstellung" ...

Dazu habe ich was geschrieben: RC-Servo mit Istpositionsmeldung - Anfangszucken eines Servos unterdrücken

Kosmetik:

const byte relaisPin = 4;
const byte ledPin = 5;
byte pos;

Der Anfangswert 75 wird nicht verwendet.

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).

uwefed:
Einen 9V Batterie ist für einen Servo zu schwach.

Wieso das? Habe ich übersehen, wo der Servo mit Leistungsdaten beschrieben ist?

Gruß

Gregor