Projekt 32c: Komplexer Sensor für Lego Mindstorms EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Lego Sensor
Lego Sensor

Autoren: Lieshek, Groenhagen
Betreuer: Prof. Schneider


→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)


Aufgabe

Nutzen Sie einen Infrarotsensor GP2Y0D21YK0F von Sharp zur Entfernungsmessung für Lego Mindstorms EV3.

Erwartungen an die Projektlösung

  • Darstellung der Theorie
  • Beschaffung der Bauteile
  • Realisierung des Aufbaus
  • Kommunikation über I2C oder UART
  • Schaltungsentwurf und Simulation mit NI CD
  • Programmierung des Microcontrollers (z.B. ATTiny)
  • Programmieren Sie den Sensortreiber für Lobby, Matlab und Simulink
  • Fahren Sie mit diesem neuen Sensor parallel zu einer Wand (Praktikumsversuch 4)
  • Test und wiss. Dokumentation
  • Live Vorführung: Fahren Sie mit diesem neuen Sensor geregelt parallel zu einer Wand.


Hinweis: Grenzen Sie sich inhaltlich von den Projekten der Vorjahre ab.

Einleitung

Im Rahmen des GET-Fachpraktikums wurde das Projekt „Komplexer Sensor für Lego Mindstorms EV3" bearbeitet. Ziel dieses Projektes war, einen komplexen Sensor für den Lego Mindstorms EV3 zu entwickeln. Dieser Sensor soll in der Lage sein den Abstand zu einem Hindernis zu messen, sodass das Fahrzeug parallel zu einer Wand fahren kann. Dazu sollte ein Infrarotsensors von Sharp, sowie ein ATtiny verwendet werden. Im weiteren Verlauf des Artikels gehen wir auf die Planungspanne ein und erläutern anschließend die Projektdurchführung. Zum Schluss wird das Projekt noch einmal zusammen gefasst und die gelernten Lektionen herausgestellt.

Projekt

Projektplanung


Um ein reibungslosen Ablauf des Projektes zu gewährleisten haben wir uns für die Organisation der Teilaufgaben anhand eines Projektablaufplanes entschieden. Dabei wurden die geplanten Zeiträume der Teilaufgaben in Kalenderwochen eingetragen und Meilensteine markiert.

Projektablaufplan


Projektablaufplan


Material


In der unten stehenden Tabelle sind alle Materialien aufgezählt, die wir verwendet haben.

Anzahl Bezeichnung Preis Quelle
1 Distanz-Sensoren digital, GP2K 12,50 € Reichelt
1 Atmel AVR-RISC-Controller, Attiny 84 3,50 € Reichelt
2 Widerstand 2,2 KΩ 0 € Privat Vorhanden
1 Kondensator 10 µF 0 € Privat Vorhanden
20 Steckverbinder 0 € Privat Vorhanden
1 Breadboard 0 € Privat Vorhanden



Projektdurchführung


Softwarearchitektur


Damit wir unser Vorgehen weiter planen können ist ein Programmablaufplan Nötig:

( Hierbei ist zu beachten, dass dieser Programmablauf sich über die Programme Adruino IDE 1.6.4 und der Lego EV3 Software erstreckt )

1. Der Infrarot Sensor misst den aktuellen Abstand zur Wand.

2. Der infrarot Sensor sendet eine Spannung an den Mikrocontroller.

3. Der Mikrocontroller rechnet die Analoge Spannung mittels einer Gleichung in einen Abstand in cm um.

4. Der Master ( Lego EV3 ) stellt eine Anfrage an den Mikrocontroller.

5. Der Mikrocontroller sendet den aktuellen Abstand VIA I2C an den Master.

6. Der Master verarbeitet diese Information und gibt gegebenenfalls einen Lenkbefehl an den Stellmotor aus.


Zunächst haben wir damit begonnen zu recherchieren welche Adruino Softwareversion nötig ist, um einen Attiny 84 programmieren zu können. Es ist zu beachten, dass die Bibliotheken Tinywires.S und Wire.h Kompatibel sein müssen, da diese für die I2C Kommunikation unabdingbar sind. Die Adruino IDE 1.6.4 ist damit kompatibel.


Um die Bibliotheken einbinden zu können sind folgende Schritte nötig:

1. Den Reiter Sketch auswählen.

2. include library auswählen.

3. Add library auswählen.

4. Im Dateibrowser die Zip Datei auswählen, die hinzugefügt werden soll.


Zu beachten ist, dass Simulink in der Lage ist, die Modelle die erstellt worden sind direkt auf den NXT (mithilfe der RWTH Aachen Toolbox) zu übertragen.

Für den Lego EV3 Treiber haben wir den von Dexter Industries zur Grundlage genommen. Diese Vorlage haben wir auf Vollständigkeit geprüft und im Anschluss haben wir die I2C Eingang und Ausgang (SDA und SCL) definiert. Zuletzt wurde dieser Treiber mithilfe der Lego EV3 Software übertragen.

Softwareentwurf


Abbildung 1: Programmierung des Mikrocontrollers mithilfe eines Adruino Uno

Das Bild auf der rechten Seite zeigt exemplarisch den Aufbau zum Programmen des Mikrocontrollers. Im ersten Schritt wird hier der Adruino als ISP (AVR ISP) programmiert. Im nächsten Schritt kann dann der Mikrocontroller, mithilfe des Adruino programmiert werden. Hierzu muss in der Adruino IDE hinterlegt werden, dass der Adruino nunmehr als ISP fungiert ( Adruino as ISP ). Um zu überprüfen, inwiefern das programmieren des Mikrocontrollers funktioniert hat, haben wir mithilfe des Mikrocontrollers eine LED blinken lassen.


Nachdem dieser Test erfolgreich gewesen ist, ist der nächste Schritt diesen für die I2C Kommunikation zu programmieren.

Die folgenden Schritte sind auszuführen, damit die Software übertragen werden kann:

1. Den Reiter Datei oben rechts auswählen.

2. Dann Auf Beispiel und im Anschluss das Programm AdruinoISP auswählen.

3. Das Programm ausführen.

4. Den Reiter Werkzeuge anklicken.

5. Dann unter Board den Attiny wählen.

6. Unter Prozessor den Attiny 84 auswählen.

7. Unter Clock die richtige Taktrate in MH auswählen ( bei uns 8MH internal).

8. Unter Programmer AVR as ISP auswählen.

9. Die Software für den Mikrocontroller übertragen.

Im Folgendem wird der Slave Code durch Kommentare erklärt.

Adruino Code für den Mikrocontroller

Als nächstes müssen folgende Schritte durchgeführt werden, damit die Software für den Adruino als Master übertragen werden können.

1. Den Reiter Werkzeuge auswählen.

2. Das Board Adruino Uno auswählen.

3. Unter Programmer AVR ISP auswählen.

4. Das Programm übertragen.

Im nächsten Schritt wird hier der Master Code dargestellt und mithilfe von Kommentaren werden die einzelnen Abschnitte erläutert.

Adruino Code für den Master


Die Adruino Master Software dient lediglich zur Prüfung der Hardware und der Software. Nachdem der Arduino erfolgreich programmiert wurde gab dieser Erfolgreich die richtigen Messwerte im seriellen Monitor aus. Als auch dieser Test erfolgreich durchgeführt wurde ist der Nächste schritt den Adruino als Master durch den EV3 als Master zu ersetzen. Hierzu wird der EV3 mit der fertigen Schaltung verbunden.

Systemarchitektur


Abbildung 2: Schaltungsaufbau in Multisim
Abbildung 3: Layout der Leiterplatte in Utilboard
Abbildung 4: gefertigte Leiterplatte


Zu beginn wurde die Pinbelegung des ATtiny84 anhand des Datenblattes erfasst. Die Versorgungsspannung VDD und die Masse wird durch das NXT-Datenkabel bereitgestellt. Dazu wurden die Entsprechenden Bauteile in Multisim eingefügt und entsprechend der Pinbelegung verbunden. Die Versorgungsspannung wird mit Pin 1 des ATtiny verbunden. Zusätzlich wird diese für den Infrarotsensor bereitgestellt und mit dem Anschlusspad verbunden. Darüber hinaus werden die Leitungen SDA und SCL mit 2,2 kΩ Pullup-Widerständen zwischen den Kontakten des ATtiny und der Versorgungsspannung VDD angeschlossen. Die SDA Leitung der NXT-Datenleitung wird auf dem Pin 7 des ATtiny angeschlossen, die SCL Leitung auf Pin 9. Die Masseleitung des Datenkabels wird mit dem Pin 14 des ATtiny, sowie einem Kontaktpad für den Infrarotsensor verbunden. Die Signalleitung des Infrarotsensors wird mit Pin 12 verbunden, über den die Daten eingelesen werden.

Um genügend Platz für die Bauteile und Befestigungsbohrungen zu haben wurden die Leiterplattenumrisse auf 35mm x 50mm festgelegt. Anschließend wurden die Bauteile auf der Leiterplatte angeordnet und die Leiterbahnen manuell mit einer Breite von 0,5mm verbunden. Dazu wurde die Lage "Copper Top" verwendet. In den Ecken der Leiterplatte wurden Befestigungsbohrungen mit einem Durchmesser von 3,5mm platziert, damit die Leiterplatte durch M3 Schrauben mit dem Gehäuse verbunden werden kann.

Damit die Schaltung auf einer einlagigen Leiterplatte realisiert werden kann, muss zusätzlich zu den vorhandenen Widerständen ein dritter THT Widerstand implementiert werden. Dabei handelt es sich um eine Drahtbrücke, um andere Leiterbahnen kreuzen zu können. Nachdem das Layout fertig gestellt wurde, konnten die Gerberdaten exportiert werden um die Leiterplatte fertigen zu lassen.

Bei der manuellen Bestückung der Komponenten wurde der ATtiny nicht fest auf der Leiterplatte verlötet, sondern es wurde ein DIP Sockel verwendet. Dadurch wird ermöglicht, dass der Mikrocontroller auch zu einem späteren Zeitpunkt problemlos von der Leiterplatte entfernt werden kann, um ihn neu zu programmieren. Im letzten Schritt wurden die Bauteile auf den entsprechenden Positionen der Leiterplatte befestigt und verlötet.

Der Befestigungswinkel stellt die Verbindung zwischen dem Infrarotsensor und der Leiterplatte dar. Zusätzlich befindet sich an der unteren Seite ein weiterer Winkel, um mit dem Lego Mindstorms EV3 Fahrzeug verbunden zu werden.

Sensor und Kennlinie


Abbildung 5: Kennlinie des Infrarot Sensors GP2YoA21YKof


Sharp stellt die am meisten genutzten Infrarotsensoren der Welt her. Wie in dem Beispielbild ( oben rechts ) zu sehen ist, besteht der Sensor aus zwei Linsen. In einer dieser Linsen ist eine Infrarot LED integriert, welche Infrarotlicht emittiert. Die emittierte Wellenlänge unterscheidet sich je nach Modell und beträgt zwischen 850 nm-50 µm. Dieses Licht wird ausgesendet und reflektiert an dem zu messenden Gegenstand. Nach der Reflektion wird diese Welle mit der anderen Linse detektiert. Anhand der Zeit, also wie lange die Welle braucht bis sie reflektiert und im Anschluss detektiert wurde, lassen sich Rückschlüsse darüber treffen wie weit das Objekt entfernt. Nun ist es jedoch so, dass jede Sensor Baureihe ihre eigene Kennlinie besitzt. Diese Kennlinie ist in diesem Fall anti proportional. Das bedeutet, dass die Spannung, die von dem Sensor zurückgegeben wird, zunächst sehr hoch ist und je weiter der zu messende Gegenstand entfernt ist, desto niedriger ist auch die Spannung die zurückgegeben wird. Nun lässt sich aus so einer Kennlinie logischerweise auch ein mindest und ein maximal Abstand erkennen. In diesem Fall kann der Sensor nur brauchbare Werte in einem Abstand von 5 -80 cm ausgeben, weil in dem Bereich davor und danach zu ungenau Spannungen ausgibt. Mithilfe der folgenden Gleichung wird die Spannung linearisiert und ein Abstand ermittelt. Durch den Befehl analogRead wird die analoge Spannung ausgelesen.


Systemtest


Die ersten Systemtests wurden auf einem Steckbrett durchgeführt. Dazu wurde die zuvor überlegte Schaltung des ATtiny84 auf dem Steckbrett nachgebildet, um die Kommunikation über den I2C Bus auszuprobieren. Der Infrarotsensor wurde ebenfalls angeschlossen. Im späteren Anwendungsfall ist der EV3 der Master und der Sensor der Slave. Im ersten Aufbau wird der Master durch den Arduino Uno ersetzt. Über Pin 14 hat der ATtiny das analoge Signal eingelesen. Erfassten Daten werden durch den I2C Bus an den Master gesendet und vom Arduino im Seriellen Monitor angezeigt.

Im letzten Schritt wurde der fertig gestellte Sensor mit dem NXT-Datenkabel angeschlossen. Jedoch war es nicht möglich über den NXT die Daten auszulesen. Da die Kommunikation mit dem Arduino Uno als Master funktioniert hat lässt sich das Problem auf die Kommunikation zwischen ATtiny und dem NXT eingrenzen.

Ergebnis

Abbildung 6: Sensor am EV3 befestigt


Das Ergebnis ist ein fertig gestellter komplexer Sensor, der mit einem Winkel und einem Lego-Steckverbinder an dem EV3 Fahrzeug befestigt wurde. Die Tests mit der Kommunikation zwischen Arduino und ATtiny des komplexen Sensors haben gezeigt, dass der Sensor einsatzfähig ist. Da jedoch das EV3 Fahrzeug den die Daten des Sensors nicht empfangen kann, liegt ein Problem mit der Software vor. Wenn das Problem mit dem Treiber des Sensors für den komplexen Sensor gelöst wäre, könnte das Fahrzeug mit den Messdaten und dem entsprechenden Regelungsprogramm in Simulink entlang der Wand fahren.

Zusammenfassung

Durch das strukturierte Vorgehen bei der Projektplanung ließen sich die meisten Teilaufgaben in den geplanten Zeiträumen durchführen und die entsprechenden Meilensteine erreichen. Wir haben uns durch das Projekt intensiv mit der Programmierung des ATtiny84 durch die Arduino IDE, der Kommunikation über den I2C Bus und dem Schaltungs- und Leiterplattenentwurf beschäftigt und einige Erkenntnisse gewinnen können. Alles in Allem empfehlen wir dieses Projekt jedem Interessierten, der gerne Mit Lego Konstruiert und der freude an Softwareentwicklung hat, gerne weiter.


Lessons Learned


  • Techniken zum Projektmanagement sind zwingend notwendig, um ein solches Projekt organisiert und strukturiert durchführen zu können.
  • Durch dieses Projekt haben wir viele Kenntnisse in den Bereichen Mikrocontrollerprogrammierung, Kommunikation über I2C Bussystem, Schaltungs- und Leiterplattenentwurf mit Multisim/Ultiboard gesammelt.
  • Für einen ersten Aufbau des Sensors funktioniert die Befestigung durch einen Lego Steckverbinder sehr gut. Durch die Verwendung eines zweiten Steckverbinders wäre es zusätzlich möglich gewesen, die Rotation des Sensors zu unterbinden.

YouTube Video

Video

Weblinks

Literatur

Datenblatt des Infrarotsensors


→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)