Go Down

Topic: Lichtschranken timer (Read 401 times) previous topic - next topic

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


HotSystems

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

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Schuppeste

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

Code: [Select]

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();
}

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.

postmaster-ino

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
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

CoasterForce

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.

gregorss

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
Bei Vollmond ist Neuerde.

CoasterForce

#7
Jan 19, 2019, 06:04 am Last Edit: Jan 19, 2019, 08:59 am by uwefed Reason: add CODE TAGs </>
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 ?

Code: [Select]
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();
}

noiasca

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.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Schuppeste

#9
Jan 19, 2019, 12:49 pm Last Edit: Jan 19, 2019, 12:50 pm by Schuppeste
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:
Code: [Select]
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();
}

combie

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!
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

CoasterForce

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.  :smiley-sad:
Ja für euch mag es einfach sein aber für mich totales neuland, will es ja schliesslich ja auch nicht gleich grillen  :smiley-yell:

CoasterForce

#12
Jan 19, 2019, 05:43 pm Last Edit: Jan 19, 2019, 05:44 pm by CoasterForce
ich habe jetzt mal den sensor mit dem sketch überprüft.
Quote
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  :(
also keine rot nur die grüne led.

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

Schuppeste

#13
Jan 19, 2019, 07:50 pm Last Edit: Jan 19, 2019, 07:50 pm by Schuppeste
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.


CoasterForce

#14
Jan 19, 2019, 10:08 pm Last Edit: Jan 19, 2019, 11:20 pm by CoasterForce
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:
Code: [Select]
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

Go Up