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:
  • PIR Modul = 3 mA
  • auf IR Diode= 2 mA
  • Display = 2 mA

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