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.
  1. Hell/Dunkel Information ( LDR)
  2. Bewegung über PIR
  3. 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 Halbleitersensor 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
nach oben


Aktualsisiert 03.03.2014