Attiny13 am Distanz-Sensor GP2D120

von Hermann Nieder
 aus ELO 2009
Elektronik-Labor  Labortagebuch  ELO  

Neulich nahm ich erneut den in meinem Hobbyraum vorhandenen Distanz-Mess-Sensor GP2D120 in die Hand, um ihn auf Funktion zu testen mit ihm zu experimentieren. Ich hatte ihn vor einiger Zeit bei Conrad [1] gekauft, da ich ihn für ein selbstgebautes Robotermodell verwenden wollte.

 

1

 

Es handelt sich bei dem o. a. Sensor um ein Exemplar auf optischer Basis mit Analogausgang. Aus dem Datenblatt, das ich damals von Conrad [1] erhalten hatte, geht hervor, dass der GP2D120 mit 5 V Gleichspannung betrieben wird (Vcc 4,5 - 5,5V). Pin 3 wird dazu an den Pluspol der Spannungsquelle angeschlossen und Pin 2 mit ihrem Minuspol verbunden. In diesem Fall gibt der Sensor je nach Entfernung des Objekts von 4 bis 30 cm am Anschluss 1 eine Spannung zwischen etwa 0,4 und 2,8 V ab. Die Spannungsänderung des Distanz-Mess-Sensors ist dabei allerdings nicht linear, also kann im angegebenen Bereich z. B. bei doppelter Entfernung nicht die doppelte Spannung am Ausgangspin gemessen werden. Ich schraubte den Sensor wie im Bild oben auf ein rechteckiges Stück Holz und klebte dieses auf eine Art Schlitten, der durch einen Gleichstromgetriebemotor mit Spindelantrieb in einem bestimmten Bereich in Längsrichtung hin- und herbewegt werden kann. Um einen Zusammenhang zwischen Entfernung des Objekts - eine rechteckige weiße Fläche senkrecht zur Bewegungsrichtung des Sensors - und der Ausgangsspannung des GP2D120 erfassen zu können, verwendete ich für die Messung der Länge, wie es im folgenden Bild dargestellt ist, einen Kunststoff-Gliedermaßstab und schloss zur Spannungsmessung zunächst nur ein Digital-Multimeter an. Wenn ich darauf den Sensor auf die weiße Fläche zu- bzw. von ihm wegbewegte, wurde jeweils eine bestimmte Spannung angezeigt. Darauf schloss ich zusätzlich die Platine aus dem Lernpaket Mikrocontroller [2] an. Als Messeingang des Attiny13 diente Pin ADC3.

 

2

 

Mit dem folgenden BASCOM-AVR-Basic-Programm, das ich kompilierte und in den Mikrocontroller übertrug, sendete dieser je nach Entfernung des Objekts vom Sensor einen Wert zwischen 0 und 255 an den PC. Mit dem Terminalprogramm der Software des o. a. Lernpakets[2] wurde dieser fortlaufend auf dem PC-Bildschirm angezeigt.

 

Dies ist das Programmlisting dazu:

 

'ATtiny13 und Distanz-Mess-Sensor GP2D120
'Ausgangssignal des Sensors an ADC3
'Senden der jeweiligen Größe von Ad_dat (0 .. 255) an PC
'
$regfile = "attiny13.dat"
$crystal = 1200000 'ADC3_08b.bas
Baud = 9600
Dim Ah As Byte
Dim Al As Byte
Dim Ad_dat As Integer

Config Adc = Single , Prescaler = 4 , Reference = Avcc
Admux = &B00100011 'Auflösung 8 Bit
Adcsra = &B11100010 'Kanal 3
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
Do
Ad_dat = Adch
Print #1 , Ad_dat
Waitms 1000
Loop
End


Um die Bestimmung der Distanz in einem wegen des geringen Programm-Speichers des Attiny13 begrenzten Bereich zu ermöglichen und diese auf dem PC-Bildschirm anzeigen zu lassen, entwarf ich ein weiteres BASCOM-AVR-Programm, mit dem die nichtlineare Kennlinie grob begradigt wird. Es wird einem bzw. zwei vom Sensor eingelesen Bytes jeweils eine Länge in mm zugeordnet und an den PC übertragen.

Dies hier ist ein Teil des Programmlistings dazu:
...

Select Case Ad_dat
Case 138 To 140 : Put #1 , 40 '40 mm
Case 125 To 126 : Put #1 , 45 '45 mm
Case 115 To 116 : Put #1 , 50 '50 mm
Case 106 To 107 : Put #1 , 55 '55 mm
Case 100 To 101 : Put #1 , 60 '60 mm
Case 91 To 92 : Put #1 , 65 '65 mm
...

Nun konnte ich auch mit einem Programm in Visual Basic die Darstellung der Distanz auf dem PC-Bildschirm anschaulich gestalten, wie es im Screenshot dargestellt ist.

 

3

 

Beim Experimentieren ergab sich, dass ich den Distanz-Mess-Sensor in einem bestimmten Bereich zur Erfassung der Breite von Objekten verwenden konnte, die vor ihm von einem Robotermodell platziert wurden, wie es im nächsten Bild dargestellt ist. Das breite rechteckige Stück Holz wurde gerade in einem markierten Bereich (rechts unten im Bild) aufgenommen und danach etwas angehoben. Das Robotermodell drehte anschließend seinen Körper so, dass der Sensor das Objekt erfassen konnte. Der Mikrocontroller unterscheidet je nach Abstand des Distanz-Mess-Sensors von dem betreffenden Holzstück an Hand der eingelesenen Werte, ob es sich um ein schmales, ein mittleres oder ein breites Objekt handelt, oder ob kein Objekt vor ihm vorhanden ist. Er sendet das ermittelte Byte an den PC und lässt zusätzlich jeweils eine grüne, eine gelbe oder eine rote LED (2mA-Typen) aufleuchten, die über Vorwiderstände von jeweils 4,7kOhm zwischen PB0, PB2 und PB4 sowie Masse (GND) angeschlossen sind.

 

 

Ist kein Objekt vorhanden, leuchtet auch keine LED auf.

Dies hier ist ein Teil des Programm-Listings für den Attiny13:

...
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1

Portb.0 = 0 'LEDs aus
Portb.2 = 0
Portb.4 = 0

Do
Ad_dat = Adch
Print #1 , Ad_dat
Select Case Ad_dat
Case 97 To 116 : Gosub Obj_b ' Toleranz bereiche wichtig, damit die Objekte auch erfasst
Case 79 To 89 : Gosub Obj_m ' werden, wenn sie ein wenig schräg vor dem Sensor
Case 62 To 77 : Gosub Obj_s ' platziert sind
Case 35 To 52 : Gosub Kein_obj
End Select
Waitms 1000
Loop

Obj_b:
Print #1 , "breites Objekt"
Portb.2 = 0
Portb.4 = 0
Portb.0 = 1 'rote LED an
Return
...

Mit dem Terminalprogramm des o. a. Lernpakets[2] lassen sich vom Attiny13 gesendete Werte und Texte anzeigen, wie es in diesem Screenshot dargestellt ist.

 

5

 

Es gibt wahrscheinlich mehrere Möglichkeiten, den Sensor GP2D120 mit dem Attiny13 oder auch einem anderen Mikrocontroller zu verwenden. Das im Bild oben dargestellte selbstgebaute Robotermodell ist dank eines Atmega8 auf seiner Steuerungsplatine „lernfähig" und kann zum Heben oder Senken seines Arms, zu einer Drehung und zum Ein- bzw. Ausschalten des Magnetgreifers veranlasst werden, wenn pro Objekt vor dem Sensor durch den Attiny13 ausschließlich das jeweilige Byte an den PC gesendet wird, worauf dieser durch Übertragen von bestimmten Bytefolgen z. B. die Ablage des Holzstücks in einem dafür vorgesehenen Behälter veranlasst. Steuert man an Stelle der oben erwähnten LEDs an den Ausgängen des Attiny13 PB0, PB2 und PB4 Transistorschaltungen mit Relais an, so können ihre Schließer-Kontakte z. B. an Eingänge eines SPS-Geräts angeschlossen sein, um von diesem bestimmte Schaltvorgänge ausführen zu lassen. Anstelle der Übertragung des je Abstand zugeordneten Bytes an einen PC (zweites der Porgrammlistings oben) könnte auch einer der PWM-Ausgänge des Attiny13 genutzt werden, dessen Ausgangsspannung nach Durchlauf durch einen Pufferverstärker mit einer Verdopplung einen Wert zwischen 0 und 10V annimmt, also passend für ein SPS-Gerät mit Analog-Eingang. [3] Sicher lässt sich ein Sensor wie der GP2D120 auch für ein selbstfahrendes Robotermodell verwenden, um dieses vor bestimmten Hindernissen durch die Elektronik an Bord anhalten oder umkehren zu lassen usw.

 

Programmlistings hier herunterladen: Distanz.zip