|
|
erstellt 03.03.2014
|
GSM Alarm
|
Habe
ein GMS Modul für 99 Euro erstanden, dieses Modul ist mehr oder weniger
frei Konfigurierbar und hat Ein und Ausgänge,
an denen man
natürlich auch etwas anschließen kann.
|
Hier zuerst einmal das erstandenen GSM- Modul
|
Ein 3,6 Volt Akku versorgt das GSM Modul mit Spannung
Dieses Modul verfügt über potentialfreie
Kontakte für zwei Ausgänge,
sowie Eingänge die über
Optokoppler abgesichert sind.
Allerdings gibt es keine Sensoren, die irgend etwas erfassen und somit einen Aktion
auslösen können.
Also benötige ich noch eine kleine Schaltung die verschiedene Sensorwerte erfassen
und auswerten kann.
Anschließend sollen die ausgewerteten Sensoren an einem Eingang des GMS Moduls
einen SMS Versand auslösen. |
 |
Also baue ich mir eine kleine Schaltung die bei folgenden Eigenschaften eine Meldung per SMS absetzen kann.
- Hell/Dunkel Information ( LDR)
- Bewegung über PIR
- Bewegung über Radar
|
1. Schaltung
|
Die Schaltung wird
mit an die vorhandene Betriebsspannung des GSM Modul angeschlossen,
diese führt aber nur eine Spannung von max 3,8 Volt
also muss auch der
Controller mit dieser Spannung auskommen.
Die meisten Atmega Prozessoren benötigen 5 Volt, es gibt aber einige
die auch mit viel weniger auskommen, einer dieser Atmega ist der
"Atmega 8 L" der mit Spannungen zwischen 3,5 und 5 Volt arbeitet.
Dazu brauchen wir noch eine Programmierschnittstelle, und schon ist der Controller Betriebsbereit.
|

|
Zur
Überwachung wird noch ein Rote Status Led eingelötet, die uns
später zeigen soll ob das Programm einwandfrei läuft,
oder aber ob es
irgendwo hängen bleibt.
Dazu wird die Led permanent Ein und wieder Ausgeschaltet. Sollte dann
irgendwann die Led dauerhaft ein oder Aus sein,
ist das ein Zeichen
dafür das unser Programm hängen geblieben ist und somit einen Fehler aufweist ! |
 |

|
1. Programm
|
Das
folgende Programm lässt nur die Rote Led blinken, um zu testen ob die
Datenübertagung bzw. unsere Programmierschnittstelle inklusive Hardware
funktioniert.
|
Programmcode
|
Beschreibung
|
$regfile "m8def.dat" |
Definiert den Atmega als Atmega8 |
$crystal = 1000000 |
Gibt die Quarzfrequenz an in Herz |
$hwstack = 32
|
Default use 32 Hardware reservierte Speicher |
$swstack = 10 |
Default Software resvierung Speicher |
Ddrb = &B00000001 |
Port B.0 als Ausgang für Rote led setzen |
Do |
Schleifenanfang
|
Portb.0 = 1 |
Ausgang einschalten
|
Waitms 15 |
Pause
|
Portb.0 = 0
|
Ausgang ausschalten
|
Wait 1 |
Pause
|
Loop |
Rücksprung zum Schleifenanfang
|
|
2. Schaltung
|
Weiter
geht es indem ein LDR ( Lichtempfindlicher Widerstand) angeschlossen und über einen Analogeingang die Spannung gemessen wird.
Außerdem wird noch eine Led (Grün) an Pin 11 angeschlossen um bestimmte Ereignisse während der Programmierfase anzuzeigen.
Der LDR benötigt einen zweiten Widerstand um so ein Spannungsteiler darzustellen.
Wie groß aber muss dieser Widerstand R4 nun sein. Zum einen
möglichst groß, damit ein geringer Verlust ensteht,
andererseits muss er möglichst klein sein um einen großen
Spannungshub
zwischen Hell und Dunkel zu bewirken.
|
Dazu ein Besispiel:
Der
LDR kann einen Widerstand von 0,6 bis 12 Kilo Ohm annehmen, das
würde bei einen Reihen widerstand von 22 Kiloohm einen Spannungswert
zwischen 3,24 und 4,87
Volt bedeuten, entspricht einem Verhältnis von 1:5
In der Tabelle sehen wir das dass Verhältnis zunimmt wenn der Reiehenwiderstand kleiner wird.
Deswegen gehen wir einen Kompromiss ein und wählen einfach mal die Größe von 2000 Ohm.
|
LDR/Ohm
|
U1
|
U2
|
Verhältnis
|
22 000
|
3,24
|
4,87
|
1,5
|
10 000
|
2,27
|
4,72
|
2,08
|
5000
|
1,47
|
4,46
|
3,04
|
4000
|
1,25
|
4,35
|
3,48
|
3000
|
1,0
|
4,17
|
4,17
|
2000
|
0,71
|
3,85
|
5,38
|
1000
|
0,38
|
3,13
|
8,13
|
|

|
2. Programm
|
Neu hinzugekommen sind alle Programmzeilen in Grün (Fett und Unterstrichen) .
Damit wird der Analogeingang abgefragt , und wenn LDR eine bestimmte Helligkeit überschritten hat wird Led (Grün) eingeschaltet.
Pin
28 am Controller ist der Analogeingang 5 ( ACDC5) und hat eine
Auflösung von 8 Bit , kann also Werte annehmen zwischen 0 und 255.
|
Programmcode
|
Beschreibung
|
$regfile "m8def.dat" |
Definiert den Atmega als Atmega8 |
$crystal = 1000000 |
Gibt die Quarzfrequenz an in Herz |
$hwstack = 32
|
Default use 32 Hardware reservierte Speicher |
$swstack = 10 |
Default Software resvierung Speicher |
Ddrb = &B00000001 |
Port B.0 als Ausgang für Rote Led setzen |
Ddrd = &B00100000
|
Portd.5 als Ausgang für grüne Led |
Ddrc = &B00000000
|
Kompletter Port C als Eingänge setzen
|
Admux = &B01100101
|
Analogeingänge Konfigurieren
Bit7=0 und Bit6=1 benutzt die interne Referenzspannung von 2,54 Volt
Bit 5 =1 ist eine 8 Bit Auflösung
Bit 3-2-1 gibt an welcher ADC Eingang abgefragt wird (1-0-1 = ADC5)
|
Adcsr = &B11100100
|
Analogeingänge Konfigurieren
Bit 7=1 für ADC einschalten
Bit 6=1 ADC Starten
|
Do |
Schleifenanfang
|
If Adch > 200 Then Portd.5 = 1 Else Portd.5 = 0
|
Analogeingang abfragen und Led Grün steuern
|
Portb.0 = 1 |
Ausgang einschalten
|
Waitms 15 |
Pause
|
Portb.0 = 0
|
Ausgang ausschalten
|
Wait 1 |
Pause
|
Loop |
Rücksprung zum Schleifenanfang
|
|
3.Schaltung
|
Um Einstellungen
oder Vorgaben machen zu können benötigen wir noch eine Methode um
Variable anzupassen,
dazu wird noch eine IR Empfangsdiode eingelötet
die einen Digitalen Ausgang besitzt, es werden also direkt Digitale
Daten am Ausgang ausgegeben
die mit dem Controller verarbeitet werden
können.
Also Infrarot Sender kann man fast jede Handelsübliche Fernseher Infrarot Fernbedienung nutzen.
Außerdem wird auch noch eine zusätzliche Led (weiß) an Pin 10 angeschlossen.
|

|

|
Dazu wird wieder das Programm angepasst.
Mit Taste 1,2 oder 3 wird die Empfindlichkeit bei der der LDR auslösen soll eingestellt.
Dabei bedeutet Taste 1 reagiert der LDR schon auf ganz wenig Helligkeit
Taste 2 auf etwas mehr Helligkeit und Taste 3 bei viel Helligkeit.
|
3. Programm
|
Programmcode
|
Beschreibung
|
$regfile "m8def.dat" |
Definiert den Atmega als Atmega8 |
$crystal = 1000000 |
Gibt die Quarzfrequenz an in Herz |
$hwstack = 32
|
Default use 32 Hardware reservierte Speicher |
$swstack = 10 |
Default Software resvierung Speicher |
Ddrb = &B00000001 |
Port B.0 als Ausgang für Rote Led setzen |
Ddrb = &B10000001
|
Portb b.0 und B.7 für Rote und Weiße Led
|
Ddrd = &B00100000
|
Portd.5 als Ausgang für grüne Led |
Ddrc = &B00000000
|
Kompletter Port C als Eingänge setzen
|
Config Rc5 = Pind.2 |
Pind.2 als Eingang für Infrarotdiode deklarieren
|
Dim Address As Byte |
Geräteadresse
|
Dim Command As Byte |
Commando auswerten
|
Dim Analogvariable As Byte
|
Variable für Analogwert6 des LDR
|
Enable Interrupts
|
Interrupt Global einschalten
|
Admux = &B01100101
|
Analogeingänge Konfigurieren
Bit7=0 und Bit6=1 benutzt die interne Referenzspannung von 2,54 Volt
Bit 5 =1 ist eine 8 Bit Auflösung
Bit 3-2-1 gibt an welcher ADC Eingang abgefragt wird (1-0-1 = ADC5)
|
Adcsr = &B11100100
|
Analogeingänge Konfigurieren
Bit 7=1 für ADC einschalten
Bit 6=1 ADC Starten
|
Do |
Schleifenanfang
|
Getrc5(address , Command)
|
Adresse und Commando aus IR Signal entnehmen
|
If Address <> 255 Then Reset Command.7
|
|
If Command = 1 Then Analogvariable = 80 |
Taste 1 der Fernbedienung abfragen
|
If Command = 1 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 1 Then Waitms 20
|
|
If Command = 2 Then Analogvariable = 160 |
|
If Command = 2 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 2 Then Waitms 20
|
|
If Command = 3 Then Analogvariable = 220 |
|
If Command = 3 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 3 Then Waitms 20
|
|
If Adch > 200 Then Portd.5 = 1 Else Portd.5 = 0
|
Analogeingang abfragen und Led Grün steuern
|
If Adch > Analogvariable Then Portd.5 = 1 Else Portd.5 = 0
|
|
Portb.0 = 1 |
Ausgang einschalten
|
Waitms 15 |
Pause
|
Portb.0 = 0
|
Ausgang ausschalten
|
Wait 1 |
Pause
|
Loop |
Rücksprung zum Schleifenanfang
|
|
4.Schaltung
|
Hinzugefügt wird noch ein PIR (Pyroelektrischer Sensor).
Ein PIR-Sensor ist ein Halbleite rsensor der zur Detektion von Temperaturänderungen dient.
Leider benötigt dieser Sensor eine Spannung von mindestens 4,0 Volt um sauber zu arbeiten.
|
 |
4.Programm
|
Programmcode
|
Beschreibung
|
$regfile "m8def.dat" |
Definiert den Atmega als Atmega8 |
$crystal = 1000000 |
Gibt die Quarzfrequenz an in Herz |
$hwstack = 32
|
Default use 32 Hardware reservierte Speicher |
$swstack = 10 |
Default Software resvierung Speicher |
Ddrb = &B10000001
|
Portb b.0 und B.7 für Rote und Weiße Led
|
Ddrd = &B00100000
|
Portd.5 als Ausgang für grüne Led |
Ddrc = &B00000000
|
Kompletter Port C als Eingänge setzen
|
Config Rc5 = Pind.2 |
Pind.2 als Eingang für Infrarotdiode deklarieren
|
Dim Address As Byte |
Geräteadresse
|
Dim Command As Byte |
Commando auswerten
|
Dim Analogvariable As Byte
|
Variable für Analogwert des LDR
|
Enable Interrupts
|
Interrupt Global einschalten
|
Admux = &B01100101
|
Analogeingänge Konfigurieren
Bit7=0 und Bit6=1 benutzt die interne Referenzspannung von 2,54 Volt
Bit 5 =1 ist eine 8 Bit Auflösung
Bit 3-2-1 gibt an welcher ADC Eingang abgefragt wird (1-0-1 = ADC5)
|
Adcsr = &B11100100
|
Analogeingänge Konfigurieren
Bit 7=1 für ADC einschalten
Bit 6=1 ADC Starten
|
Do |
Schleifenanfang
|
Getrc5(address , Command)
|
Adresse und Commando aus IR Signal entnehmen
|
If Address <> 255 Then Reset Command.7
|
|
If Command = 1 Then Analogvariable = 80 |
Taste 1 der Fernbedienung abfragen
|
If Command = 1 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 1 Then Waitms 20
|
|
If Command = 2 Then Analogvariable = 160 |
|
If Command = 2 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 2 Then Waitms 20
|
|
If Command = 3 Then Analogvariable = 220 |
|
If Command = 3 Then Portb.7 = 1 Else Portb.7 = 0 |
|
|
|
If Command = 3 Then Waitms 20
|
|
If Pinc.4 = 1 Then Gosub Pir |
|
If Adch > Analogvariable Then Portd.5 = 1 Else Portd.5 = 0
|
Analogeingang abfragen und Led Grün steuern
|
Portb.0 = 1 |
Ausgang einschalten
|
Waitms 15 |
Pause
|
Portb.0 = 0
|
Ausgang ausschalten
|
Wait 1 |
Pause
|
Loop |
Rücksprung zum Schleifenanfang
|
|
|
Pir: |
Unterroutine für PIR Detection
|
Portb.7 = 1 |
Led weiß an
|
Waitms 200 |
Pause
|
Portb.7 = 0 |
Led weiß aus
|
Return
|
Rücksprung
|
|
|
|
|
5. Schaltung
|
Hinzufügen eines Radar Sensor.
Der Sensor benötigt eine Betriebsspannung zwischen 3,3 und
|
Betriebsfrequenz: Bei der Produktspezifikation wird die Betriebsfrequenz weggelassen. Ich habe auf meinem Gerät mit einem HackRF One SDR einen Träger bei 3,181 GHz gefunden Radio (siehe Spektrum-Diagramm unten). Ich
vermute, dass diese Frequenz von Gerät zu Gerät unterschiedlich sein
wird: Es wäre schwierig, eine enge Spezifikation mit einem solchen zu
haben einfache HF-Schaltung auf FR4-Leiterplatte. Arbeitsspannung: 4 - 28V. Es bietet einen bequemen 3,3 V-Ausgang für den Betrieb einer MCU (gut für 100 mA?). Die Vorderseite der Platine ist die Seite mit Komponenten. Diese Seite sollte auf die erkannten Objekte gerichtet sein. Blockieren Sie die vordere Seite nicht mit etwas Metallisches. Die Rückseite sollte einen Abstand von mehr als 1 cm zu Metall haben.
|
 |

|
5. Programm
|
Programmcode
|
Beschreibung
|
$regfile "m8def.dat" |
Definiert den Atmega als Atmega8 |
$crystal = 1000000 |
Gibt die Quarzfrequenz an in Herz |
$hwstack = 32
|
Default use 32 Hardware reservierte Speicher |
$swstack = 10 |
Default Software resvierung Speicher |
Ddrb = &B10000001
|
Portb b.0 und B.7 für Rote und Weiße Led
|
Ddrd = &B00100000
|
Portd.5 als Ausgang für grüne Led |
Ddrc = &B00000000
|
Kompletter Port C als Eingänge setzen
|
Config Rc5 = Pind.2 |
Pind.2 als Eingang für Infrarotdiode deklarieren
|
Dim Address As Byte |
Geräteadresse
|
Dim Command As Byte |
Commando auswerten
|
Dim Analogvariable As Byte
|
Variable für Analogwert des LDR
|
Enable Interrupts
|
Interrupt Global einschalten
|
Admux = &B01100101
|
Analogeingänge Konfigurieren
Bit7=0 und Bit6=1 benutzt die interne Referenzspannung von 2,54 Volt
Bit 5 =1 ist eine 8 Bit Auflösung
Bit 3-2-1 gibt an welcher ADC Eingang abgefragt wird (1-0-1 = ADC5)
|
Adcsr = &B11100100
|
Analogeingänge Konfigurieren
Bit 7=1 für ADC einschalten
Bit 6=1 ADC Starten
|
Do |
Schleifenanfang
|
Getrc5(address , Command)
|
Adresse und Commando aus IR Signal entnehmen
|
If Address <> 255 Then Reset Command.7
|
|
If Command = 1 Then Analogvariable = 80 |
Taste 1 der Fernbedienung abfragen
|
If Command = 1 Then Portb.7 = 1 Else Portb.7 = 0 |
Weiße Led an
|
If Command = 1 Then Waitms 20
|
Pause
|
If Command = 2 Then Analogvariable = 160 |
|
If Command = 2 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Command = 2 Then Waitms 20
|
|
If Command = 3 Then Analogvariable = 220 |
|
If Command = 3 Then Portb.7 = 1 Else Portb.7 = 0 |
|
If Pinc.1 = 1 Then Gosub Radar
|
|
If Command = 3 Then Waitms 20
|
|
If Pinc.4 = 1 Then Gosub Pir |
|
If Adch > Analogvariable Then Portd.5 = 1 Else Portd.5 = 0
|
Analogeingang abfragen und Led Grün steuern
|
Portb.0 = 1 |
Ausgang einschalten
|
Waitms 15 |
Pause
|
Portb.0 = 0
|
Ausgang ausschalten
|
Wait 1 |
Pause
|
Loop |
Rücksprung zum Schleifenanfang
|
|
|
Pir: |
Unterroutine für PIR Detection
|
Portb.7 = 1 |
Led weiß an
|
Waitms 200 |
Pause
|
Portb.7 = 0 |
Led weiß aus
|
Return
|
Rücksprung
|
Radar: |
|
Portb.0 = 1 |
|
Waitms 20 |
|
Portd.5 = 1 |
|
Waitms 20 |
|
Portb.7 = 1
|
|
Waitms 20 |
|
Portb.0 = 0 |
|
Portd.5 = 0 |
|
Portb.7 = 0 |
|
Waitms 300 |
|
Return |
|
|
Als nächstes möchte ich den Radarsensor ab und anmeldenn können , das soll über eine Taste der IR funktionieren
also erst ein Variable um einen Marker zu setzen
dim Radarmerker as bit
dann Tastenabfrage , dabei soll Taste 7 zum Anmelden und abmelden
sein, beim anmelden soll die rote Led 3 sekunden an bleiben als zeichen
das angemeldet ist
beim abmelden soll weiße Led für 3 sekunden anbleiben.
If Command =7 Then toggle Radarmerker
If Command = 7 And Radarmerker = 1 Then Portb.0 = 1
If Command = 7 And Radarmerker = 1 Then Wait 3
If Command = 7 And Radarmerker = 0 Then Portb.7 = 1
If Command = 7 And Radarmerker = 1 Then Wait 3
dann die abfrage die nur wenn radar aktiviert ist und bewegung erkannt wir in die Routine Radar springt
If Pinc.1 = 1 And Radarmerker = 1 Then Gosub Radar
dann noch vor der eigentlichen Prgrammschleife die Voreinstellung di
dafür sorgt das die variable Radarmerker immer nach dem Start der
Software erst einmal auf Null steht
also den radrsenso standardmäßig deaktiviert.
Radarmerker = 0
|
Das gleiche machen ich auch mit dem Bewegungsmelder
|
Taste
|
Funktion
|
Beschreibung
|
|
|
1
|
Lichtsensor geht "An"
zu erkennen am kurzen aufleuchten der gelben Led
|
Licht hat zwischen eingehender und nächster Meldung 1 Minute Totzeit |
|
|
1
|
Lichtsensor geht "Aus" zu erkennen am kurzen aufleuchten der grünen Led
|
|
|
2
|
Stellt die Lichtempfindlichkeit auf hoch
|
|
|
|
3
|
Stellt die Lichtempfindlichkeit auf mittel
|
|
|
|
4
|
Stellt die Lichtempfindlichkeit auf klein
|
|
|
|
|
Meldung bei minimaler Helligkeit |
|
|
|
5
|
Radar An zu erkenn an kurzen leuchten der grünen Led
|
|
2 Sekunden Totzeit
|
|
6
|
Radar Aus zu erkennen an kurzen leuchten der grünen Led
|
|
7 Sekunden Totzeit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Funktion der Fernbedienung
|
|
|
Taste
|
|
|
|
0
|
Führt ein Reset durch
|
|
|
1
|
Lichtsensor einschalten-Rot Led an-3 >Sec warten -Grüne Led an , dann 60 sec warten
|
|
|
2
|
Helligkeit aktiviert auf 80
|
|
|
3
|
Helligkeit aktiviert auf 80 |
|
|
4
|
Helligkeit aktiviert auf 80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
noch zusätzliche Gelbe Led an Port d.0
|
|
|
|
|
|
|
|
|
Artikel
|

|
|
|
Aktualsisiert 03.03.2014
|