erstellt 25.05.2015 |
Vor - Rückwärts Zähler |
Es
soll ein möglichst kleiner Zähler erstellt werden der die Anzahl der
Personen in einem Raum anzeigt. Es stellt sich zuerst die Frage wie das betreten oder das verlassen eines Raumes registriert werden soll. Das wäre beispielsweise mit einer Lichtschranke möglich ,besser noch mit einer Infrarot Lichtschranke, oder aber mit Ultraschallsensor . Beide Erfassungsarten benötigen aber in der Regel einen Reflektor, oder aber aber zwei gegenüber liegende Sensoren, also ein Sender und ein Empfänger. Um den Aufwand und die Größe möglichst gering zu halten starte ich einen Versuch mit PIR Wärmesensoren. |
Der PIR-Sensor (Pasive InfraRot)
reagiert optimal auf Winkeländerungen, wenn also eine Person am Sensor
vorbeigeht. Allerdings muss man für eine einwandfreie Funktion beachten das PIR Sensoren erst vernünftig funktionieren wenn sie die Umgebungstemperatur angenommen haben. |
In
Bild 1 sehen wird die Grundschaltung zur Auswertung der Sensoren.
Es werden 2 Sensoren benötigt um die Bewegungsrichtung zu erkennen, ob also jemand den Raumn betritt oder eben verläst. Je nachdem welcher Sensor zuerst
reagiert, wird also die Bewegungsrichtung erkannt.
Anschließend wird je nachdem welcher Ausgang der Schaltung zuerst schaltet ein Zähler rauf oder runter gezählt. |
Bild 1 |
Der Zähler wird mit einen Mikrocontroller Atmega 32 verwirklicht dessen Interrupt Eingänge wir benutzen. Interrupt 1 an Pin ??? und Interrupt 2 an Pin ???? |
Der Stromverbrauch der gesammten Schaltung liegt bei ca. 31 mA. Davon entfallen in etwa auf:
|
Probleme: Die eigentlich Funktion ist vorhanden, Zähler zählt auch Auf und Ab allerdings zählt er auch wenn man nicht vorbei geht sondern vorm Sensor stehen bleibt. Außerdem ist die Entfernung sehr eingeschränkt ca. auf 0,5 Meter weil keine Filter davor sitzt. |
Zum
Programm |
|
Programmzeile |
Beschreibung |
Vorwärts Rückwärts Zähler 1a mit Atmega 32 Version 1A Quarz 16 Mhz Display 2x 16 Zeichen an Port C Led weiß an PortA.7 Led rot an Port A.6 |
|
$regfile "m32def.dat" | Definiert den Atmega als Atmega 32 |
Konfiguration fürs Display
|
|
Config Lcd = 16 * 2 | |
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.1 , Db6 = Portc.0 , Db7 = Portc.5 , Rs = Portc.4 , E = Portc.3 | |
$crystal = 16000000 | Gibt die Quarzfrequenz an in Herz |
I/O Konfig
|
|
Ddra = &B11011100 | Port A6 + A7 + A3 +A2 +A4 als Ausgang rest als Eingänge |
Variable definieren
|
|
Dim Analogwert0 As Word | |
Dim Analogwert1 As Word | |
Dim Analogdiff As Word | |
Dim Personen As Byte | |
Analog Eingänge Konfigurieren
|
|
Admux = &B00000000 | |
Adcsr = &B11100111 | |
Versionsanzeige
|
|
Cls | |
Locate 1 , 1 | |
Lcd "Vor_Rueck_Zaehler" | |
Locate 2 , 1 | |
Lcd " Version 1A" | |
Wait 1 | |
P r o g r a m m
|
|
Cls | |
Do | |
Porta.6 = 1 | ' led rot an |
Auswertung Analogeingänge PIR Sensor
|
|
Admux.0 = 0 | Auf Analaogwert0 abfragen |
|
|
Analogwert0 = Adcd | Analogwert0 in Variable speichern |
Waitms 30 | |
Admux.0 = 1 | Analogwert1 Abfragen |
Analogwert1 = Adcd | Analogwert1 in Variable speichern |
Waitms 30 |
|
Analogdiff = Analogwert0 + Analogwert1 | |
Analogdiff = Analogdiff / 2 | |
Porta.6 = 0 |
Led aus |
Cls | |
Locate 1 , 1 |
Locate definiert Ausgabe in Zeile 1 und Spalte 1 |
Lcd "A0=" ; Analogwert0 | |
Locate 1 , 8 | |
Lcd "P=" ; Personen | |
Locate 2 , 1 | |
Lcd "A1=" ; Analogwert1 | |
Locate 2 , 8 | |
Lcd "Ad=" ; Analogdiff | |
If Analogdiff > 100 Then Gosub Kalk | |
Waitms 500 | |
Loop
|
Schleifenende |
Kalk: | |
Porta.7 = 1 | |
Waitms 100 | Pause einfügen |
If Analogwert0 > Analogwert1 Then Personen = Personen + 1 Else Personen = Personen -1 | |
Porta.7 = 0 | |
Return | |
Aktualisiert 30.05.2019 |
||||
Copyright by Ms 2009 |