Es handelt sich um einen Mikroprozessor Atmega 8 mit 5 Volt Spannungsversorgung und Programmierschnittstelle. (Bild 1)
Allerdings müssen es nicht immer 5 Volt sein, die meisten Atmega's
funktionieren auch noch mit 4,8 Volt , einige sogar mit 3,6 Volt.
So ist
es meist möglich den Atmega mit 4 Akkus a 1,2 Volt zu betreiben.
Das
hat auch einige Vorteile, gerade wenn man noch im Experimentierstadium
ist,
mann schließt somit aus das irgend welche Störimpulse die im Netzteil schon mal auftreten unsere Schaltung beeinflusst.
Mann kann eigentlich generell sagen, das man Schaltungen alternativ an Akkus betreibt um so Störimpulse
die aus vielen Netzteilen austreten aus zu schließen.
Bild 1
Anschließend
werden noch einige Komponenten hinzugefügt die es uns ermöglichen zu
erkennen was der Atmega gerade macht,
beziehungsweise um Daten sichtbar zu machen.
Also bekommt die Schaltung noch ein Display und einige Leuchtdioden samt Vorwiderstände. ( Bild 2)
Bild 2
Wir erstellen ein erstes kleines Testprogramm um die angeschlossenen
Komponenten zu testen die da wären, Led's , Display und
Programmierschnittstelle.
Nur die in Blau Fett dargestellten Zeichen gehören zum Programm, der Rest dient nur der Information.
Als nächstes wird das Ultraschall Modul HC-SR04 angeschlossen (Bild3)
Bild 3
Das
Ultraschallmodul (HC-SR04 ) ist ein Modul auf dem Sender
und Empfänger schon vorhanden sind und das Signal auch schon aufbereitet wird.
Dieses Modul muss nur noch mit einer Betriebspannung von 5 Volt
und natürlich Masse (GND) versorgt werden.
Es gibt einen Eingang (Trigger) womit das Senden eines 40KHz
Ultraschallsignal ausgelöst wird indem dieser Eingang für 10
Mikrosekunden auf
TTL Pegel High gelegt wird also auf 5 Volt.
472 Mikrosekunden nach beenden des Trigger Signal wird innerhalb dieses Modul vom Senden in den Empfang umgeschaltet.
Im Signalschema (Bild4) erkennt man ab der Bezeichnung A das Triggersignal
welches für 10 Mikrosekunden ansteht, ab der Bezeichnung B erkennt man das
Signal als Rückantwort welches immer zur gleichen Zeit im Verhältnis zu
A zurück kommt.
Bezeichnung C zeigt das Ende des zurück kommenden Signals was
sich im Verhältnis zur Position B je nach Entfernung stetig ändert.
Um
das zurück kommende Signal (Echo) auszuwerten wird bei einem
Flankenwechsel der interne 16 Bit Zähler aktiviert und beim nächsten
Flankenwechsel gestoppt.
Der gezählte Wert ist unser Maß für die zurück gelegte Strecke.
Kommt kein Impuls innerhalb von 672 Millisekunden zurück wird in der Variable " Err " ein Fehler sprich eine 1 ausgegeben.
Bild 4
Die
einfachste Möglichkeit mit
einem Atmega die Länge eines Impulses zu bestimmen besteht mit dem Befehl " Pulsein"
Mit dem Befehl Pulsein misst der Atmega automatisch die Zeit des am Pin
anliegenden Signals und zwar von einer Flanke zur nächsten Flanke .
Dem Befehl "Pulsein" muss man mit Parameter versehen und zwar mit der
Angabe des zu erfassenden Pin Eingang, und ob der Impuls bei
aufsteigender
oder absteigende Flanke gemessen werden soll. Die Form
kann folgendermaßen aussehen:
Pulsein PIND,5,1
PIND gibt dabei den Port an
5 gibt die PIN Nummer an
1 gibt an das die Messung an der nächsten aufsteigende Flanke beginnen
soll, und an der dann nächsten abfallende Flanke enden soll.
Der Messwert selber wird in einem internen 16 BIT Zähler verarbeitet der unabhängig vom eigentlichen Programm zählt.
Dieser Wert muss dann noch umgerechnet werden in einen Wert der einhergeht mit der Schallgeschwindigkeit.
Eingang abfragen ob Echo anliegt und in Variable speichern
if err=1 then Stoerung="Fehler" else Stoerung=""
If Err = 1 Then Stoerung = "Fehler" Else Stoerung = ""
Err Variable nur Anzeigen wenn Störung vorhanden
Cls
Display löschen
Locate 1 , 1
Cursor in Zeile 1 Spalte 1 setzen
Lcd " Puls=" ; Puls
Anzeige von Text und Variableninhalt
Locate 2 , 1
Cursor in Zeile 2 Spalte 1 setzen
Lcd Stoerung
Error Variable als Text anzeigen
Wait 1
Pause damit Display nicht flackert
Loop
Rücksprung zum Programm Anfang
Um die Berechnung zu Bewerkstelligen, hab ich die Ultraschall Sensoren auf ein festes Maß zur Wand die Puls messen lassen.
Ich kam so auf 134 Pulse bei einer Entfernung von 68 Cm.
Nun berechne ich die Entfernung die pro Impuls zurück gelegt wird.
Also 134 Pulse = 68 Cm
1 Puls = 68/134 = 0,507 cm
Es werden also folgende in Blau und Fett dargestellten Programmzeilen hinzugefügt.
Variable zur Formatierung der Variable Ausgabe auf Display
Startmeldung
Cls
Locate 1 , 1
Lcd "US-Funk"
Locate 2 , 1
Lcd "Version 1C"
Wait 3
Programm
Do
Portd.7 = 1
Led gelb einschalten (Triggermeldung)
Portb.0 = 1
Trigger für US aussenden
Waitus 10
Pause
Portb.0 = 0
Trigger beenden
Waitms 10
Pause damit Trigger Led Zeit zum leuchten hat
Portd.7 = 0
Led gelb ausschalten
Pulsein Puls , Pind , 5 , 1
Eingang abfragen ob Echo anliegt und in Variable speichern
If Err = 1 Then Stoerung = "Fehler" Else Stoerung = ""
Err Variable nur Anzeigen wenn Störung vorhanden
cm=puls * 0.507
Berechnung der Entfernung
cm_format=fusing(cm,"#.#")
Formatierung der Längen Ausgabe
Cls
Display löschen
Locate 1 , 1
Cursor in Zeile 1 Spalte 1 setzen
Lcd " Puls=" ; Puls
Anzeige von Text und Variableninhalt
Locate 2 , 1
Cursor in Zeile 2 Spalte 1 setzen
Lcd Stoerung
Error Variable als Text anzeigen
Locate 2,8
Cursor in 2 Zeile 8.Spalte setzen
Lcd"cm=";cm_format
Ausgabe der Länge in Centimeter auf Display
Wait 1
Pause damit Display nicht flackert
Loop
Rücksprung zum Programm Anfang
Damit ist die Schaltung in die Lage , per Ultraschall die Entfernung zum Objekt in Zentimeter anzuzeigen
Um
diese Informationen per Funk zu übertragen benötigen wir noch das
Funkmodul und für eine geringe Fehlerquote bei der Übertragung
per SPI
einen Quarz der die Baudrate von 9600 unterstützt.
Die Kondensatoren (Keramik), sollen laut Datenblatt zwischen 12 und 22 pF sein
Das
Funkmodul besitzt außer den Spannungsversorgungsanschlüssen Pin1 =GND / Pin 2=Plus) und den
Anschlüssen für die
Datenübertragungen ( Pin 4 und 5 ) noch einen sogenannten Enable
Anschluss.
(Pin 3 / Enable= Freigabe) , wenn dieser Anschluss auf Plus
gelegt wird, wird das Funkmodul erst freigegeben, bei Minus ist das
Funkmodul nur im Standby und verbraucht somit weniger Strom.
Ereignis beim Ultraschall läst
sich per Funk übertragen, allerdings hab ich eingegeben,das es
überträgt wenn eine bestimmte Entfernung unterschritten wird.
Sinnvoll
wäre es aber wenn ein x beliebiger Wert innerhalb einer kurzen Zeit
ändert das dann erst gesendet wird
außerdem läst sich so der Zahlenwert 1 bis 9 übertragen aber kein Text, warum nicht ???
Um
nicht nur einen Alarm bei einer gewissen Enbtfernung zu aktivieren ,
was bedeuten würde das je nach Positionierung wenn ein festeger
Gegenstand im Ultraschallfeld liegt es einen Alarm auslösen
würde,sondern nur dann wenn das Ultraschall Signal sich verändert, Es
wird also das jeweilige Ultraschall elde gespeicher und nur bei einer
veränderung ein Alarm ausgelöst.
Variable zur Formatierung der Variable Ausgabe auf Display
Startmeldung
Cls
Locate 1 , 1
Lcd "US-Funk"
Locate 2 , 1
Lcd "Version 1D"
Wait 3
Programm
Do
Portb.0 = 1
Trigger für US aussenden
Waitus 100
Pause
Portb.0 = 0
Trigger beenden
Waitms 10
Pause damit Trigger Led Zeit zum leuchten hat
Portd.7 = 0
Led gelb ausschalten
Pulsein Puls1 , Pind , 5 , 1
Eingang abfragen ob Echo anliegt und in Variable speichern
Puls1a=Puls1
sorgt
dafür das erst wenn beide Variable nicht mehr gleich sind, sich also
eine Verändert hat, das die Freigabe für Funkmodul gesetzt wird und
dann zur Unterroutine Senden gesprungen wird.
Puls1a=puls1a/10
if puls1a <> Puls2a then Portb.1=1 else Portb.1=0
if puls1a <>Puls2a then gosub Senden
If Err = 1 Then Stoerung = "Fehler" Else Stoerung = ""
Err Variable nur Anzeigen wenn Störung vorhanden
cm=puls * 0.507
Berechnung der Entfernung
cm_format=fusing(cm,"#.#")
Formatierung der Längen Ausgabe
Puls2=puls1
Puls2a=Puls1
Puls2a=puls2a/10
wait 1
Cls
Display löschen
Locate 1 , 1
Cursor in Zeile 1 Spalte 1 setzen
Lcd " P1=" ; Puls1
Anzeige von Text und Variableninhalt
Locate 1,8
Lcd "P2=";Puls2
Locate 2 , 1
Cursor in Zeile 2 Spalte 1 setzen
Lcd Stoerung
Error Variable als Text anzeigen
Locate 2,8
Cursor in 2 Zeile 8.Spalte setzen
Lcd"cm=";cm_format
Ausgabe der Länge in Centimeter auf Display
Waitms 100
Pause damit Display nicht flackert
Loop
Rücksprung zum Programm Anfang
SAtromverbrauch bei 5 Volt
Ultraschall 5 mA
Funk 40 mA wenn aktiv
Funk 26 mA wenn Standby
Display nicht nennenswert
Falls die Pulszeit immer mit Null
angezeigt werden sollte , kann es sein das die Zeit zwischen Trigger
und Empfangener Impuls zu groß ist , evtl. ein Wait Statement zu groß, oder eine Pause enthalten die zu lang ist.
Beim
Einschalten über den Mechanischen Ein/Aus Schalter zeigt das Display
nicht immer die Einschaltmeldung an, sondern ab und zu nur Kästchen
ohne Inhalt. - Die Spannungsversorgung zeigte ein Einschaltprellen und
ein leichtes absinken der Betriebsspannung an.Das Prellen dauerte ungefähr 700 us.