Offline
Newbie
Karma: 0
Posts: 7
|
 |
« on: October 24, 2011, 09:23:35 am » |
Hallo zusammen, ich möchte einen Besucherzähler am Eingang eines Raums installieren, der immer dann ein Signal ausgibt, wenn jemand den Raum betritt. Das ganze möchte ich mit einer Infrarot Lichtschranke lösen. Nun einige grundsätzliche Fragen. Ich denke da an eine Lichtschranke wie diese hier: http://www.conrad.de/ce/de/product/191710/IR-LICHTSCHRANKESENDEREMPFAeNGERMein Arduinoboard ist ein Duemilanove. Lässt sich so ein Lichtschranken Sender/Empfänger an das Bord anschließen? Wenn ja, gibt es da vll. eine Art Tutorial oder Anleitung für? Ich habe bisher nur sowas hier gefunden http://makeprojects.com/Project/PIR-Sensor-Arduino-Alarm/72/1Dort wird aber nicht mit einer Lichtschranke gearbeitet und ich denke, dass eine solche doch wesentlich "zuverlässiger" ist als ein Bewegungssensor, oder? Für jegliche Tipps bin ich dankbar! Es geht mir erstmal um die generelle Möglichkeit sowas ans Laufen zu bringen. Die Tatsache, dass natürlich auch zwei Personen gleichzeitig durch die Schranke gehen können oder rein und wieder raus gehen, ist mir bewusst, aber lasse ich hier erstmal außen vor. Gruß, leander
|
|
|
|
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #1 on: October 24, 2011, 09:31:38 am » |
So ne Lichtschranke ist bei der Beschaltung im Prinzip nichts anderes als ein Button, kein Problem für den Arduino.
Guck Dir mal das Tutorial zum entprellen eines Buttons an, das könnte Dir da helfen.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #2 on: October 24, 2011, 10:21:59 am » |
Hallo Joghurt, danke für deine schnelle Antwort. Dass diese Lichtschranke gut zu meinem Projekt passt beruhigt mich schon mal. Vielen Dank dafür. Mit den entsprechenden Tutorials meinst du dann sicherlich diese Links hier? http://arduino.cc/en/Tutorial/Buttonhttp://arduino.cc/en/Tutorial/ButtonStateChangehttp://arduino.cc/en/Tutorial/DebounceWenn die Lichtschranke nach dem selben Prinzip funktioniert (Signal an/ Signal aus) und auch technisch so funktioniert wie in den Tutorials - wunderbar! Dann komm ich damit hoffentlich weiter!
|
|
|
|
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #3 on: October 24, 2011, 10:47:59 am » |
Ja, die meinte ich. Wenn ich nach den Bildern hinter dem von Dir gelieferten Link gehe arbeitet das mit einem Relais, was Dir den ganzen Kram auch elektrisch entkoppelt, sollte also wirklich kein Problem sein. Du könntest ein Bein der Kontakt-Seite des Relais auf Masse am Arduino legen und die andere an ein Digital-In-Pin des Arduino. Wenn Du dann noch die Lichtschranke mit Strom versorgst sollte das elektrisch eigentlich alles sein.  Du müsstest dann noch bei besagtem Digital-In-Pin des Arduino per Software den Pull-Up einschalten, ansonsten fällt mir auf der "Pflicht"-Seite nichts mehr ein, der Rest wäre dann "Kür"... 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 135
|
 |
« Reply #4 on: October 24, 2011, 12:24:09 pm » |
Hallo,
hast Du daran gedacht, dass - die Besucher den Raum auch wieder verlassen ? - das einige Leute hin und her laufen - Spielkinder wie ich, wenn sie so eine Lichtschranke erkennen, mehrfach mit der Hand davor herum wedeln - mehrere Leute gleichzeitig die Lichtschranke unterbrechen ( eine große Menschenmasse würde eventuell nur als eins gezählt )
Gruss kurti
|
|
|
|
|
Logged
|
Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #5 on: October 24, 2011, 12:35:30 pm » |
Hallo Kurti,
danke für deine Einwände! Das verlassen des Raumes ist nicht so entscheidend, da gibt es einen seperaten Ausgang am anderen Ende. Das hin und herlaufen sollte eigentlich kein Problem sein, da man aus einem dunklen Flur in einen hellen Raum kommt. Die wenigsten werden da zurücklaufen, für den Fall dass doch, wäre es nicht allzu schlimm. Die Lichtschranke erkennen ist noch ein interessanter Punkt. Wenn man hindurchgeht soll das Signal erkannt werden, aber das was damit ausgelöst wird erst später. Stell dir vor du gehst in den Raum und dadurch wird am anderen Ende immer eine LED aufleuchten. Diese siehst du aber nur wenn du dort auch bist. Also nur für diejenigen interessant, die dort stehen, du bist in dem Fall nur der Signalgeber.
Aber danke für die Einwände genau das macht mir nämlich auch noch Gedanken. Aber ich versuche zunächst mal die Technik zu begreifen. Da ich Arduino Neuling bin wird das sicherlich komplex genug ;-)
|
|
|
|
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #6 on: October 24, 2011, 12:51:26 pm » |
Die Richtung zu bestimmen wäre kein Problem wenn Du zwei Lichtschranken parallel verwenden würdest. 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #7 on: October 24, 2011, 03:30:08 pm » |
So, also dieses Tutorial hab ich soweit jetzt: http://arduino.cc/en/Tutorial/DebounceIch drücke meinen Button und die LED leuchtet auf. Denke auch, dass ich das mit der Lichtschranke dann hinbekommen sollte. Kurze Frage, die ein wenig abschweift. Ich würde gerne das Signal (Lampe leuchtet / Lampe leuchtet nicht) bzw. Button gedrückt / Button nicht gedrückt an Processing senden. Durch den Knopfdruck soll eine Processing Animation abgespielt werden. Jetzt kämpfe ich hier den halben Abend und bekomm die beiden Dinge irgendwie nicht verbunden. Ich habe dies hier versucht... http://www.sundh.com/blog/2011/05/get-processing-and-arduino-to-talk/.. allerdings blinkt meine LED da nur kurz auf wenn ich das ganze von Processing aus laufen lasse und das wars dann... hmm, gibts da irgeneine zusätzliche Einstellung wie man Arduino und Processing verbinden kann? So schwer kann das doch einfach nicht sein ... Ich danke für eure Hilfe!!!!
|
|
|
|
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #8 on: October 25, 2011, 12:59:59 am » |
Bei Processing kann ich Dir leider überhaupt nicht helfen, da muss jemand anderes ran. 
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #10 on: October 27, 2011, 03:04:07 am » |
Hallo Harald, danke für den Link, nach genau diesem Tutorial habe ich die beiden auch kommunizieren lassen. Das funktioniert *puhhh* Jetzt wollte ich das ganze aber mal abwandeln. Ich habe einen Pushbutton an mein Arduino gebaut und wann immer ich diesen drücke, soll in Processing etwas passieren. Dafür will ich mir zunächst mal das Signal auslesen lassen um überhaupt zu sehen ob Processing registriert, wenn ich den Button drücke. Ich bekomme in Processing keine Fehlermeldung, der Code wird ausgeführt. Sobald ich das Fenster in Processing schließe, erhalte ich diese Meldung im Ausgabefenster: Experimental: JNI_OnLoad called. Hm, ich hab das Gefühl, so schwer kann das doch nicht sein. Ist vll. int die falsche Variable um sich die Werte des Pushbuttons anzeigen zu lassen? Ich danke euch!!!!!! Mein Arduino Script ist folgendes: int ledPin = 13; // choose the pin for the LED int inPin = 2; // choose the input pin (for a pushbutton) int val = 0; // variable for reading the pin status
void setup() { Serial.begin(57600); pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inPin, INPUT); // declare pushbutton as input }
void loop(){ val = digitalRead(inPin); // read input value if (val == HIGH) { // check if the input is HIGH (button released) digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON } Serial.println(digitalRead(inPin)); } Und mein Processing Code ist dieser hier: // libraries import processing.serial.*; // serial connection Serial port; String message = null; String elements[] = null; // arduino int sensorValues;
void setup() { // size size(800, 600); println(Serial.list()); port = new Serial(this, Serial.list()[0], 57600); }
void draw() { }
// serial event void serialEvent(Serial p){ // get message till line break (ASCII > 13) message = port.readStringUntil(13); // just if there is data if (message != null) { // try catch function because of possible garbage in received data try { elements = splitTokens(message); // loop through sensor values println(sensorValues); } catch (Exception e){ } }
}
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 35
Arduino rocks
|
 |
« Reply #11 on: October 27, 2011, 03:24:27 am » |
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 13
Arduino rocks
|
 |
« Reply #12 on: October 27, 2011, 01:13:59 pm » |
deinen Code habe ich nicht ganz verstanden (bin noch Anfänger). Deshalb habe ich mal folgendes probiert: Arduino-Code: /* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor This example code is in the public domain. */
void setup() { Serial.begin(19200); pinMode(2, INPUT); }
void loop() { int sensorValue = digitalRead(2); Serial.println(sensorValue, DEC); }
Processing-Code: import processing.serial.*;
int sensorValue; int linefeed = 10; float valFloat;
Serial serport;
void setup() { size(600,600); serport = new Serial(this, "COM40", 19200); }
void draw() { while (serport.available()>0) { String valString = serport.readStringUntil(linefeed); if (valString !=null) { print (valString); valFloat=float(valString); sensorValue=int(valFloat); } } background(153); fill(255,200,0); ellipse(200,200,sensorValue*100,sensorValue*100); serport.clear(); }
Vielleicht hilft die das weiter. Bei einem Tastendruck erscheint ein gelber Kreis, solange bis du den Taster wieder los lässt.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #13 on: November 18, 2011, 12:32:35 pm » |
Hallo zusammen,
@ Saasemer: super, vielen Dank für deinen Code, der hat ein riesen Problem für mich gelöst!!!!!
Die Lichtschranke habe ich ans Laufen bekommen. Einziger kleiner Schönheitsfehler: Ich bekomme - mittels dem Code von Saasemer - in Processing das Signal vom Pin2. Wenn man die Lichtschranke durchbricht, wird dieses Signal nun ständig gesendet, bis man die Lichtschranke verlässt. Dadurch werden alle Befehle natürlich viel zu oft ausgeführt. Ich möchte das Signal in Processing empfangen, aber nur einmal soll etwas passieren.
Möglicherweise muss ich dafür nicht nur in Processing, sondern auch in Arduino etwas ändern?
Danke für eure Hilfe!!!
|
|
|
|
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #14 on: November 18, 2011, 01:36:21 pm » |
Mach Dir eine Variable, die den Stand vom letzten Durchgang speichert. Wenn die Variable und der aktuelle Stand voneinander abweichen hat sich grade eben was getan, dann reagier. Eigentlich ganz einfach. 
|
|
|
|
|
Logged
|
|
|
|
|
|