Lichtschranken timer

Hallo erst einmal bin Anfänger und habe mich in richtung arduino noch nicht Beschäftigt. Ausser zu googln.

Ich habe eine Projekt Ider und hoffe das die mit arduino nano umzusetzen ist.
Zu meiner Idee.

Eine Lichtschranke erfasst ein und aus. Sollte das ein oder das aus länger als 1 sekunde ( am besten einstellbar über poti) betätigt oder unbetätigt sein leuchtet eine Led auf. (Später soll ein Servo auslösen.)

Das ganze sollte sich dann so nach 5 sek. Resten.

Also ist das sozusagen eine überwachungs schaltung.
Hat jemand ideen ob das so geht. Vil. Ein tuturial ?

Mfg

Leider anhand deiner Beschreibung nicht.
Kannst du das bitte noch einmal besser beschreiben ?

Hi, mit int0 oder Int1 an Pin2 und Pin3 ist das ganz einfach.Nur mal als Beispiel(kein vollendeter Code)

unsigned long mycount =millis();
void setup(){
attachInterrupt(digitalPinToInterrupt(2), MyonChange , CHANGE); 
}

void loop(){
if(millis()-mycount>=1000)
{
digitalWrite(LEDpin,HIGH);
delay(5000);
digitalWrite(LEDpin,LOW);
}
}

MyonChange(){
mycount=millis();
}

Die Lichtschranke wird in Regelmässigen abständen betätigt. Ca. Alle 400ms geht sie an und nach 600ms geht Sie aus. Dieses wiederholt sich.
Jetzt wenn dieser rythmus unterbrochen wird für 2 sec. Dann soll eine Led leuchten. Wenn der rythmus wieder beginnt geht die led wieder aus.
Hoffentluch verständlicher.

Hi

Wenn Da nicht mehr zu tun ist, geht der Code von Schuppeste ja schon fast direkt.
Statt dem delay(5000); schreibst Du aber }else{ und in der IF änderst Du die 1000 in 2000.
Alternativ kannst Du vorher einen Analog-Wert an A0...A5 einlesen und über MAP auf eine Zeit 1000...10000 wandeln und in der IF verwenden.

MfG

Nach googln und videos denke ich verstehe es etwas. Ist ja eigetnlich nicht so schwer. Habe mir jetzt erst mal ein nano und eine tcrt5000 bestellt. Werde mich dann mal versuchen.

CoasterForce:
Hallo erst einmal bin Anfänger und habe mich in richtung arduino noch nicht Beschäftigt. Ausser zu googln.

Ich habe eine Projekt Ider und hoffe das die mit arduino nano umzusetzen ist.
Zu meiner Idee.

Eine Lichtschranke erfasst ein und aus. Sollte das ein oder das aus länger als 1 sekunde ( am besten einstellbar über poti) betätigt oder unbetätigt sein leuchtet eine Led auf. (Später soll ein Servo auslösen.)

Das ganze sollte sich dann so nach 5 sek. Resten.

Also ist das sozusagen eine überwachungs schaltung.
Hat jemand ideen ob das so geht. Vil. Ein tuturial ?

Mfg

Deine Idee ist grundsätzlich umsetzbar. Du solltest Dich allerdings zunächst mit ein paar Grundlagen beschäftigen - zum Beispiel damit, Deine Idee in Form eines Programmablaufplans zu formulieren.

Gruß

Gregor

Guten Morgen miteinander,
Heute kommt mein nano Board.
Ich habe mich eben mal hingesetzt und versucht einen Code zu erstellen.
Würde das so gehen ?

int sensorPin = A0;
int sensorValue = 0;
int ledPin = 13;

void setup() {
  pinMode (ledPin,OUTPUT)
  attachInterrupt(digitalPinToInterrupt(2), MyonChange , CHANGE); 
}

void loop() {
  sensorVALUE = analogeRead(sensorPin)
  Serial.println(sensorValue);
  
  if(millis()-mycount>=2000)
  {
  digitalWrite(LEDpin,HIGH);
  delay(15000);
  digitalWrite(LEDpin,LOW);
}
}

MyonChange(){
mycount=millis();
}

was passiert wenn du kompilieren drückst?

Einfach mal alle Fehler die der Kompiler reklamiert abarbeien.

Aber am besten noch mal von vorne beginnen.
Ein "3-Zeiler-Sketch" mit einem Delay und einem Interupt ist für mich die Kombination von Weihwasser und Teufel.

noiasca:
Aber am besten noch mal von vorne beginnen.
Ein "3-Zeiler-Sketch" mit einem Delay und einem Interupt ist für mich die Kombination von Weihwasser und Teufel.

Jeder hat mal klein angefangen.. Ich finde gerade am Anfang ist minimalistisch und einfach das man es direkt versteht besser als sich an anderen Sachen aufzuhalten.

Versuch es mal damit:

int sensorPin = A0;
int sensorValue = 0;
int LEDpin = 13;
volatile unsigned long mycount = millis();

void setup() {
  pinMode (LEDpin, OUTPUT);
  pinMode (sensorPin, OUTPUT);
  pinMode (2, INPUT);
  //löse bei änderung von Pin2(INT0) die Funktion "MyonChange" aus
  attachInterrupt(digitalPinToInterrupt(2), MyonChange , CHANGE);
}

void loop() {
  int  sensorVALUE = analogRead(sensorPin);
  //wandle den wert 0-1024 nach 0-10000 um
  int waitms = map(sensorVALUE, 0, 1024, 0, 10000);
  Serial.println(sensorValue);
  // wenn aktuelle millis minus letztes mycount über 2000ms ausführen
  if (millis() - mycount >= waitms)
  {
    digitalWrite(LEDpin, HIGH);
    delay(15000);
    digitalWrite(LEDpin, LOW);
  }
}

void MyonChange() {
  //setze mycount bei änderung von Pin 2 auf aktuell fortlaufende Millis
  mycount = millis();
}

CoasterForce:
Die Lichtschranke wird in Regelmässigen abständen betätigt. Ca. Alle 400ms geht sie an und nach 600ms geht Sie aus. Dieses wiederholt sich.
Jetzt wenn dieser rythmus unterbrochen wird für 2 sec. Dann soll eine Led leuchten. Wenn der rythmus wieder beginnt geht die led wieder aus.
Hoffentluch verständlicher.

Du möchtest einen endlichen Automaten bauen!

So controller kam an und gleich mal ausprobiert. Verkabelt und den Sketch von schuppeste hochgeladen. Hat geklappt. Allerdings geht die LED an und auf dem Board leuchtet es grün und rot. Angeschlossen ist eigentlich alles richtig. So ganz verstehe ich in dem Script noch nicht wo er die 2000 ms herbekommen soll. :slightly_frowning_face:
Ja für euch mag es einfach sein aber für mich totales neuland, will es ja schliesslich ja auch nicht gleich grillen :stuck_out_tongue_closed_eyes:

ich habe jetzt mal den sensor mit dem sketch überprüft.

void setup() {
Serial.begin(9600);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1);
}

dann in dem Script die 0, 1024, 0, 10000); auf 40, 950, 0, 10000); gesetzt siehe da es passiert nix :frowning:
also keine rot nur die grüne led.

wenn ich statt 40 auf 1 setzte geht sie wieder an.

Also millis() gibt die Millisekunden des Systems seit einschalten aus, das heisst nach 10 Sekunden gibt millis() 10000 aus.. nach einer Stunde 3600000ms.. und so weiter.

mycount=millis() ist der Wert jetzt (letzte Änderung)

analogRead gibt einen Wert zwischen 0 und 1024 aus.. wenn man ein Poti gegen GND,5V und Mittelabgriff auf A0 setzt.

angenommen das Poti steht auf 1/4 dann sind das ca. 250.

map(0, 1024, 0, 10000); skaliert die 250 auf 2500 =2,5Sekunden in der Variable waitms.

Wenn die aktuellen Millisekunden des Systems - letzte mycount setzung größer waitms ist wird der Codeteil im IF ausgeführt.

Ich habe das Gefühl die Lichtschranke gibt jetzt ein Dauer Impulse aus. Kann das an dem nicht verbautem Poti liegen?

Denke deswegen Schaltet die LED sich ein und geht nicht aus.
Der Sensor geht aber das habe ich überprüft.

Also soweit verstehe ich das. Danke für die Gute Erklärung.

edit:

int licht;
unsigned long mycount =millis();

void setup(){
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop(){
  licht = analogRead(0);
  Serial.println(licht);
  
  if(millis()-mycount>=9000){
   digitalWrite(13, HIGH);
   delay(5000); 
   digitalWrite(13, LOW);
}
else {
  digitalWrite(13, LOW);
}
}

ich habs jetzt nochmal ganz simpel versucht. trotzdem schaltet die LED

Hi

Hängt Ihn nicht begnadigen.

Ein Komma kann Vieles verändern!

So, zurück zum Sensor - was gibt der Sensor aus?
Hast Du den Arduino am PC/Laptop?
Dann kannst Du per Serial.print Dir die Werte des Sensor ausgeben lassen.
Denke, Dir fehlt ein PullUP/-DN Widerstand am Sensor, da Der nur in eine Richtung arbeiten kann - oder die dem Sensor zugehörige LED ist nicht angeschlossen/defekt und deshalb zeigt der Sensor keine Reaktion.

MfG

Sensor arbeitet. Arduino hängt am Pc und die Werte wurden von mir schon ausgelesen. Werte von 1028 bis 3.

D2 = Sensor D0
A0 = A0
VCC = 5V
GND =GND
D13 = LED
GND = GND

Led natürlich mit wiederstand diese Funktioniert ja auch weil Sie angeht.
Im Sketch kann ich z.b. die 9000 ändern und die LED geht nach bestimmter Zeit an. Sprich 3000 = 3sek. 9000 = 9sek.
Aber das soll Sie ja nicht, so lange am Sensor Werte verändern.
Verändern sich keine soll die Led nach bestimmter Zeit leuchten.