Projekt 32b: Komplexer Sensor für Lego Mindstorms EV3: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 12: Zeile 12:
== Aufgabe ==
== Aufgabe ==
Entwickeln Sie einen komplexen Sensor für Lego Mindstorms EV3.
Entwickeln Sie einen komplexen Sensor für Lego Mindstorms EV3.
== Schwierigkeitsgrad ==
Der Schwierigkeitsgrad wurde nach eigenem ermessen festgelegt und ist als Anspruchsvoll festzulegen.
{| class="wikitable"
|-
!                      !! Schwierigkeitsgrad
|-
|-
| **** || Anspruchsvoll
|}


== Erwartungen an Ihre Projektlösung ==
== Erwartungen an Ihre Projektlösung ==
Zeile 29: Zeile 41:
== Einleitung ==
== Einleitung ==


In diesem Artikel wird der Aufbau und die Programmierung eines Lego EV3 und eines Arduino UNO erklärt. Das Ziel des Projekt ist ein komplexer Sensor für Lego Mindstorms zu entwickeln, in dem Fall ein IR-Abstandsensor (Sharp GP2Y0A41SK0F).
In diesem Artikel wird der Aufbau und die Programmierung eines Lego EV3 und eines Arduino UNO durchgeführt. Das Ziel des Projekt ist ein komplexer Sensor für Lego Mindstorms EV3 zu entwickeln. In den Fall ein IR-Abstandsensor (Sharp GP2Y0A41SK0F).
Der Sensor soll den Abstand zwischen seinen Position und einen Hindernis messen, von Arduino ausgelesen werden, und durch I2C im EV3-Display ausgegeben werden.
Der Sensor soll den Abstand zwischen seinen Position und einen Hindernis messen, von Arduino ausgelesen werden, und durch I2C im EV3-Display ausgegeben werden.


== Projekt ==
== Projekt ==
=== Projektziel ===


Die Daten des Infrarotsensors sollen vom einem Atmel ATtiny 84 (8-Bit Mikrocontroller) eingelesen und am EV3-Brick ausgegeben werden.
Die Daten des Infrarotsensors sollen vom einem Atmel ATtiny 84 (8-Bit Mikrocontroller) eingelesen und am EV3-Brick ausgegeben werden.
=== Projektziel ===


[[Datei:Attiny84-Ev3-IR.png|300px]]
[[Datei:Attiny84-Ev3-IR.png|300px]]
Zeile 44: Zeile 56:
=== Projektdurchführung ===
=== Projektdurchführung ===


Bevor wir die Verbindung mit ATtiny84 durchführen, werden wir erstmal mit Arduino Uno vorführen.  
==== Projektplan ====
 
===== Morphologischen Kasten zur Lösungsfindung aufstellen =====
Der morphologische Kasten wurde für die Findung der optimalen Lösung eingesetzt. Dieser listet die eingebunden Schnittstellen tabellarisch auf und stellt sie verschiedenen Lösungsvarianten gegenüber.
 
[[Datei:Morphologische Kasten-32b.png|500px]]
 
Bevor wir die Verbindung mit ATtiny84 durchführen, werden wir erstmal mit Arduino Uno vorführen.


==== Erster Einsatz mit Arduino ====
==== Erster Einsatz mit Arduino ====
Zeile 58: Zeile 77:
-> Arduino Uno konfigurieren, so dass er als Slave (I2C) betrachten wird und zwar mit einer  
-> Arduino Uno konfigurieren, so dass er als Slave (I2C) betrachten wird und zwar mit einer  


bestimmten Programm : - - - - - - .
bestimmten Programm :  
 
[[Datei:Arduino-programm-projekt32b.png]]
 
''Abbildung 4: Der Hauptteil des Code (Das ganze Programm steht hier ->[https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/32b_Komplexer_Sensor_fuer_EV3/ Link auf SVN])
 
 
- EV3 programmieren
- EV3 programmieren


-> Ev3 konfigurieren, so dass er als Master betrachten wird und zwar mit I2C Treiber und  
-> Ev3 konfigurieren, so dass er als Master betrachten wird und zwar mit I2C Treiber und  


einem bestimmten Programm : - - - - .
einem bestimmten Programm :  
 
 
[[Datei:Ev3-Programm.png|500px]]
 
''Abbildung 5: EV3-Programm mit neuen installierten Treiber (das ganze Programm steht hier -> [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/32b_Komplexer_Sensor_fuer_EV3/ Link auf SVN])


===== Hardware (Systemarchitektur, -entwurf) =====
===== Hardware (Systemarchitektur, -entwurf) =====


- Aufbau
- Aufbau
-> Verbindung zwischen Arduino Uno und EV3




Zeile 80: Zeile 108:




''Abbildung 4: Verbindung zwischen Arduino Uno, EV3-Brick und den IR Sensor''
''Abbildung 6: Verbindung zwischen Arduino Uno, EV3-Brick und den IR Sensor''
-> ....


==== Zweiter Einsatz mit Atmel ATtiny ====
==== Zweiter Einsatz mit Atmel ATtiny ====
Zeile 89: Zeile 116:


===== Software (Softwarearchitektur, -entwurf) =====
===== Software (Softwarearchitektur, -entwurf) =====
- ATtiny84 programmieren
- ATtiny84 programmieren:
  -> ATtiny84 wird durch Arduino Uno programmiert.
ATiny84 wird in mehrere Schritte konfiguriert.
  -> erstmal wird ATtiny84 gefläscht, mit einem bestimmten Konfiguration.
     
   -> als Probe haben wir ein LED blinken lassen ( das funktioniert tatsächlich ).
-> erstmal wird ATtiny84 gefläscht, mit einem bestimmten Konfiguration. Und in der Fall durch Arduino Uno programmiert.
   -> ATtiny84 als Slave konfigurieren  
    
- EV3 programmieren
-> als Probe haben wir ein LED blinken lassen ( das funktioniert einwandfrei).
   -> Bei EV3 bleibt unverändert
    
-> ATtiny84 als Slave konfigurieren  
 
 
- EV3 programmieren
    
-> Bei EV3 bleibt unverändert


===== Hardware (Systemarchitektur, -entwurf) =====
===== Hardware (Systemarchitektur, -entwurf) =====
  Aufbau
Aufbau
    Bevor man den EV3-Brick mit ATtiny84 verbindet, sollte erstmal den ATtiny gefläscht werden. Und zwar wie folgende könnte die Schaltplan aussehen.
 
    Da haben wir 2 Dioden reingebaut, damit bei der Stromversorgung der Strom nur in eine Richtung vorkommen muss.
Bevor man den EV3-Brick mit ATtiny84 verbindet, sollte erstmal den ATtiny gefläscht werden. Und zwar wie folgende könnte die Schaltplan aussehen.
Da haben wir 2 Dioden reingebaut, damit bei der Stromversorgung der Strom nur in eine Richtung vorkommen muss.


[[Datei:Schaltplan-Tiny-flasch.png]]
[[Datei:Schaltplan-Tiny-flasch.png]]


''Abbildung 5: Verbindung zwischen EV3-Brick, Arduino Uno, ATtiny84 und den IR-Sensor''
''Abbildung 7: Verbindung zwischen EV3-Brick, Arduino Uno, ATtiny84 und den IR-Sensor''
    Nachdem wir alles erfolgreich gefläscht haben und das Programm in der ATtiny rübergespielt wurde, haben wir wie folgende die Pinbelegung verschaltet.
 
Nachdem wir alles erfolgreich gefläscht haben und das Programm in der ATtiny rübergespielt wurde, haben wir wie folgende die Pinbelegung verschaltet.
      
      
[[Datei:ArduinoISP.png|300px]]
[[Datei:ArduinoISP.png|300px]]


''Abbildung 6:Verbindung von ATtiny84 und Arduino'' [http://42bots.com/tutorials/programming-attiny84-attiny44-with-arduino-uno/  42 Bots (2013): Programming ATtiny84 with Arduino Uno]
''Abbildung 8:Verbindung von ATtiny84 und Arduino'' [http://42bots.com/tutorials/programming-attiny84-attiny44-with-arduino-uno/  42 Bots (2013): Programming ATtiny84 with Arduino Uno]




Zeile 115: Zeile 150:
[[Datei:PinAttiny84.png|500px|]]
[[Datei:PinAttiny84.png|500px|]]


''Abbildung 7: Pinbelegung von ATtiny84'' [http://www.atmel.com/Images/doc8006.pdf Atmel: ATtiny84 - Datasheet]
''Abbildung 9: Pinbelegung von ATtiny84'' [http://www.atmel.com/Images/doc8006.pdf Atmel: ATtiny84 - Datasheet]




[[Datei:Schaltplan-Tiny-Ev3-Ir.png|500px]]
[[Datei:Schaltplan-Tiny-Ev3-Ir.png|500px]]


''Abbildung 8: Verbindung zwischen ATtiny84, Arduino Uno und EV3-Brick Mehr Info : ''[http://www.dexterindustries.com/howto/connecting-ev3-arduino/ Dexter Industries: Connecting the EV3 to Arduino]
''Abbildung 10: Verbindung zwischen ATtiny84, Arduino Uno und EV3-Brick Mehr Info : ''[http://www.dexterindustries.com/howto/connecting-ev3-arduino/ Dexter Industries: Connecting the EV3 to Arduino]


  -> Prototyp
-> Prototyp fertig gelötet
  -> Fertig gelötet








[[Datei:Fertig-gelötet.jpeg|300px]]
''Abbildung 11: Prototyp (ATtiny84, EV3-Anschluss und Sensor-Pin)''
==== Sharp IR Distanzsensor GP2Y0A21YK0F ====
Die Firma Sharp bietet mit der GP2Y0A21YK0F Reihe einige einfach anzusteuernde Infrarotentfernungsmesser an. Dabei wird zu Bestimmung der Entfernung nicht gemessen wie viel Licht von dem Objekt reflektiert wird, sondern in welchem Winkel es reflektiert wird. Dies hat den Vorteil, dass der Sensor relativ unabhängig von der Oberfläche ist.
===== Funktionsprinzip =====
Alle Sensoren funktionieren nach demselben Prinzip: Der Emitter sendet einen Infrarotstrahl aus. Trifft der Lichtstrahl auf kein Objekt, wird er auch nicht reflektiert, der Empfänger zeigt also auch kein Objekt an. Wird das Licht jedoch an einem Objekt reflektiert, kehrt es zum Empfänger zurück und es entsteht ein Dreieck zwischen dem Reflektionspunkt, dem Emitter und dem Empfänger. Das ganze kann man sich folgendermaßen vorstellen:
[[Datei:IR.winkel.png|300px]]
''Abbildung 12: Funktionsweise des IR-Sensor
Mit Hilfe des Winkels zwischen dem Auftreffenden Strahl und dem Sensor lässt sich jetzt die Entfernung des Objektes von dem Sensor bestimmen.
[[Datei:IR-Formel.png|300px]]
''Abbildung 13: die Berechnung


[[Datei:Fertig-gelötet.jpeg|300px]]
===== Graphische Darstellung =====
[[Datei:IR-GP2Y0A21YK0F.png|300px]]


''Abbildung 9: Prototyp (ATtiny84, EV3-Anschluss und Sensor-Pin)''
''Abbildung 14: Wie man sieht ist die Ausgangsspannung des Sensor nicht proportional zur Entfernung. Außerdem kann man erkennen, dass die Wert bei einer Entfernung kleiner als ungefähr 8 cm stark abfallen, sodass man diesem Bereich nicht mehr zur Entfernungsmessung benutzen kann.


===== bezüglich des Projekts =====


Der Infrarotsensor lässt sich über die 3 Leitungen (VCC, GND und Datenleitung) mit dem Arduino UNO verschalten. Da im EV3-Programm der Eingangs-Pin des Slaves mit Pin=4 definiert wurde, muss die Datenleitung des Infrarotsensors am Eingang A1 anliegen. Die Versorgungsspannung des Infrarotsensors liegt an 5V an. Die Masse entspricht der Masse des Arduino UNO.
Der Infrarotsensor lässt sich über die 3 Leitungen (VCC, GND und Datenleitung) mit dem Arduino UNO verschalten. Da im EV3-Programm der Eingangs-Pin des Slaves mit Pin=4 definiert wurde, muss die Datenleitung des Infrarotsensors am Eingang A1 anliegen. Die Versorgungsspannung des Infrarotsensors liegt an 5V an. Die Masse entspricht der Masse des Arduino UNO.
Zeile 138: Zeile 195:
[[Datei:IR Messen.jpeg|300px]]
[[Datei:IR Messen.jpeg|300px]]


''Abbildung 10: Durchführung der Messung''
''Abbildung 15: Durchführung der Messung''


== Ergebnisse ==
== Ergebnisse ==
   
   
Wie oben erwähnt, sollten wir zwei Einsätze durchführen.
Wie oben erwähnt, sollten wir zwei Einsätze durchführen.
Beim Ersten Einsatz sind wir wie folgendes eingegangen:
Beim Ersten Einsatz sind wir wie folgendes eingegangen:
- Den Arduino Uno als Slave konfiguriert, so dass er den Befehl ausführt. Und zwar Die Rohrwerte
- Den Arduino Uno als Slave konfiguriert, so dass er den Befehl ausführt. Und zwar Die Rohrwerte
  von dem Infrarot Sensor auslesen und durch I2C zu EV3 (Master) die Werte weiterleiten.  
von dem Infrarot Sensor auslesen und durch I2C zu EV3 (Master) die Werte weiterleiten.  
- Den EV3 als Master sollte die Werte in cm übersetzen und ausgeben. Dafür muss den EV3 auch  
- Den EV3 als Master sollte die Werte in cm übersetzen und ausgeben. Dafür muss den EV3 auch  
  konfiguriert bzw. mit bestimmten I2C Treiber Programmiert werden. Denn die Kommunikation erfolgt durch I2C.  
konfiguriert bzw. mit bestimmten I2C Treiber Programmiert werden. Denn die Kommunikation erfolgt durch I2C.  
Wenn diese Schritte richtig durchgeführt sind, funktionier das einwandfrei.
Wenn diese Schritte richtig durchgeführt sind, funktionier das einwandfrei.


----
----
Zweiter Einsatz
Zweiter Einsatz
- Der ATtiny84 als Slave konfiguriert
- Der ATtiny84 als Slave konfiguriert
- EV3 bleibt unverändert
- EV3 bleibt unverändert
Nach der Ausführung der Schritten kommt seltsame Werte von dem EV3 raus.
Nach der Ausführung der Schritten kommt seltsame Werte von dem EV3 raus.


== Herausforderungen ==
== Herausforderungen ==
1- Aufbau : Löten
1- Aufbau : Löten
  Bei dem Aufbau haben wir grundsätzlich Schwierigkeiten beim Löten begegnet. Denn hatten wir beide noch nie irgendwas gelötet.  
Bei dem Aufbau haben wir grundsätzlich Schwierigkeiten beim Löten begegnet. Denn hatten wir beide noch nie irgendwas gelötet.  
 
2- EV3 Programmierung :
2- EV3 Programmierung :
  Um der EV3 als Master zu programmieren. müssten wir I2C-Treiber recherchieren und herunterladen. Den passenden zu finden war nicht einfacht.  
Um der EV3 als Master zu programmieren. müssten wir I2C-Treiber recherchieren und herunterladen. Den passenden zu finden war nicht einfacht.  
  Müssten wir eine lange Internet-Recherche durchführen.  
Müssten wir eine lange Internet-Recherche durchführen.  
 
3- ATtiny84 Programmierung :
3- ATtiny84 Programmierung :
  Die Programmierung des ATtiny84 war herausfordernd. Denn war nicht klar ob das Programm tatsächlich in der Tiny rein war oder eher nicht. Beim  
Die Programmierung des ATtiny84 war herausfordernd. Denn war nicht klar ob das Programm tatsächlich in der Tiny rein war oder eher nicht. Beim  
  Testen lieft nicht. Deshalb haben wir 2 Probe durchgeführt.
Testen lieft nicht. Deshalb haben wir 2 Probe durchgeführt.
  1. Probe: Wir haben ein simple Algorithm (LED blinken lassen) rein gespielt, um zu gucken, ob der Tiny überhaupt funktioniert.
    -> Ergebnis: das LED-Programm funktioniert Einwandfrei.
  2. Probe: Wir haben einen anderen Prozessor(Atmega 328) geholt (Empfehlung von den Tutoren). Atmega328 weil Arduino Uno das selbe besitzt.
    -> Ergebnis: Das Programm (Endprogramm) funktioniert. Bei der Abstandmessung wird doppelt langsamer als mit Arduino Uno. Das liegt aber nicht
        an den Prozessor, sondern an den Quartz (wir haben die Schaltung wegen mangeln an Quarz, ohne den Quarz gemacht.
  Zusammenfassung: Das Problem liegt definitiv an der Tiny. könnte ein Hardware-Problem (1.Probe) sowie ein Software-Problem (2.Probe) sein.
        Wir sind sind aber mehr oder weniger von der Meinung, dass das ein Software-Problem ist. Weil alle einfache Programme funktioniert haben.
        Wenn es um I2C geht, spielt alles verruckt.


1. Probe: Wir haben ein simple Algorithm (LED blinken lassen) rein gespielt, um zu gucken, ob der Tiny überhaupt funktioniert.


[[Datei:Atmega328.jpeg|200px]]
-> Ergebnis: das LED-Programm funktioniert Einwandfrei.


2. Probe: Wir haben einen anderen Prozessor(Atmega 328) geholt (Empfehlung von den Tutoren). Atmega328 weil Arduino Uno das selbe besitzt.


''Abbildung 11: 2.Probe -> um zu prüfen, ob unfunktionalität ein Software- oder Hardware-Problem''
-> Ergebnis: Das Programm (Endprogramm) funktioniert. Bei der Abstandmessung wird doppelt langsamer als mit Arduino Uno. Das liegt aber nicht
an den Prozessor, sondern an den Quartz (wir haben die Schaltung wegen mangeln an Quarz, ohne den Quarz gemacht.
Zusammenfassung: Das Problem liegt definitiv an der Tiny. könnte ein Hardware-Problem (1.Probe) sowie ein Software-Problem (2.Probe) sein.
Wir sind aber mehr oder weniger von der Meinung, dass das ein Software-Problem ist. Weil alle einfache Programme funktioniert haben.
Wenn es um I2C geht, spielt alles verruckt.
 
 
[[Datei:Atmega328.jpeg|200px]]
 
 
''Abbildung 16: 2.Probe -> um zu prüfen, ob unfunktionalität ein Software- oder Hardware-Problem''


== Zusammenfassung ==
== Zusammenfassung ==
=== Lessons Learned ===
=== Lessons Learned ===


Wir dachten am Anfang, dass ein komplexer Sensor (IR-Sensor) für Lego Mindstorms EV3 sich gut anhört, ist aber absolut nicht der Fall. Auch wenn man statt ATtiny84 mit Arduino Uno arbeiten will, muss man schon in der Lage sein, die alle Treiber, Bibliothek und Algorithm holen bzw. programmieren zu können. Haben wir im Laufe des Projektsdurchführung viel gelernt. Von Basis des Arduino Uno bis zu I2C-Kommunikation. Mussten wir auch bei der Aufbau verschiedene praktische Anwendung, die wir während des Semesters in Vorlesungen bekommen haben. Wie z.B. löten (Produktionstechnik oder Aufbau -und Verbindungstechnik ), fräsen, Aufbau von Bauelement ( Aufbau -und Verbindungstechnik) und Arduino Uno ( Get-Fachpraktikum Termin 3).
Wir dachten am Anfang, dass ein komplexer Sensor (IR-Sensor) für Lego Mindstorms EV3 sich gut anhört, ist aber absolut nicht der Fall. Auch wenn man statt ATtiny84 mit Arduino Uno arbeiten will, muss man schon in der Lage sein, die alle Treiber, Bibliothek und Algorithm holen bzw. programmieren zu können. Haben wir im Laufe des Projektsdurchführung viel gelernt. Von Basis des Arduino Uno bis zu I2C-Kommunikation. Müssten wir auch bei der Aufbau verschiedene praktische Anwendung, die wir während des Semesters in Vorlesungen bekommen haben. Wie z.B. löten (Produktionstechnik oder Aufbau -und Verbindungstechnik ), fräsen, Aufbau von Bauelement ( Aufbau -und Verbindungstechnik) und Arduino Uno ( Get-Fachpraktikum Termin 3).
Auch Teamwork ist ein Thema, das immer wieder auftaucht. Mit diesen Zusammenarbeit haben wir bei der Entwicklung des Projektsmanagment und Teamwork mitgemacht.
 
== Aktueller Stand ==
 
Das Einlesen und die Ausgabe der Sensorwerte auf dem EV3-Brick in Kombination mit dem Arduino funktioniert einwandfrei. Lediglich die Umsetzung des Projektes mit dem ATtiny84 weist noch Defizite aus. Die Arduino-Software für den ATtiny 84 basiert auf dem Quellcode für den Arduino. Ein Clock- und Datensignal konnte ohne angeschlossenen Verbraucher gemessen werden.


== Projektunterlagen ==
== Projektunterlagen ==

Aktuelle Version vom 18. Januar 2019, 11:16 Uhr

Lego Advance Sensor
Lego Advance Sensor

Autoren: Leger Paco Kamegne Kamdem, Ferry Rossini Nde

Betreuer: Prof. Schneider


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

Aufgabe

Entwickeln Sie einen komplexen Sensor für Lego Mindstorms EV3.

Schwierigkeitsgrad

Der Schwierigkeitsgrad wurde nach eigenem ermessen festgelegt und ist als Anspruchsvoll festzulegen.

Schwierigkeitsgrad
**** Anspruchsvoll

Erwartungen an Ihre Projektlösung

  • Darstellung der Theorie
  • Realisierung des Aufbaus
  • Platinenlayout und Gehäuse kompatibel zum Lego Stecksystem (montierbar)
  • Kommunikation über I2C
  • Schaltungsentwurf und Simulation mit NI CD
  • Programmierung des Microcontrollers (z.B. Attiny)
  • Treiber für EV3 Lobby
  • Test und Dokumentation
  • Live Vorführung während der Abschlusspräsentation
  • Kür: Treiber für Matlab und Simulink

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

Einleitung

In diesem Artikel wird der Aufbau und die Programmierung eines Lego EV3 und eines Arduino UNO durchgeführt. Das Ziel des Projekt ist ein komplexer Sensor für Lego Mindstorms EV3 zu entwickeln. In den Fall ein IR-Abstandsensor (Sharp GP2Y0A41SK0F). Der Sensor soll den Abstand zwischen seinen Position und einen Hindernis messen, von Arduino ausgelesen werden, und durch I2C im EV3-Display ausgegeben werden.

Projekt

Projektziel

Die Daten des Infrarotsensors sollen vom einem Atmel ATtiny 84 (8-Bit Mikrocontroller) eingelesen und am EV3-Brick ausgegeben werden.

Abbildung 2: Zweiter Einsatz

Projektdurchführung

Projektplan

Morphologischen Kasten zur Lösungsfindung aufstellen

Der morphologische Kasten wurde für die Findung der optimalen Lösung eingesetzt. Dieser listet die eingebunden Schnittstellen tabellarisch auf und stellt sie verschiedenen Lösungsvarianten gegenüber.

Bevor wir die Verbindung mit ATtiny84 durchführen, werden wir erstmal mit Arduino Uno vorführen.

Erster Einsatz mit Arduino

Abbildung 3: Erster Einsatz

Software (Softwarearchitektur, -entwurf)

- Arduino Uno programmieren

-> Arduino Uno konfigurieren, so dass er als Slave (I2C) betrachten wird und zwar mit einer

bestimmten Programm :

Abbildung 4: Der Hauptteil des Code (Das ganze Programm steht hier ->Link auf SVN)


- EV3 programmieren

-> Ev3 konfigurieren, so dass er als Master betrachten wird und zwar mit I2C Treiber und

einem bestimmten Programm :


Abbildung 5: EV3-Programm mit neuen installierten Treiber (das ganze Programm steht hier -> Link auf SVN)

Hardware (Systemarchitektur, -entwurf)

- Aufbau


-> Prototyp

Der EV3-Brick, der Arduino UNO und der Sensor werden über die nachfolgende Pinbelegung verschaltet.



Abbildung 6: Verbindung zwischen Arduino Uno, EV3-Brick und den IR Sensor

Zweiter Einsatz mit Atmel ATtiny

Aufgrund der üppigen Bauform des Arduino Uno wird im zweiten Ansatz versucht die Bauform zu reduzieren. Hierzu wird das Arduino Board durch ein Atmel ATtiny 84 (8-Bit Mikrocontroller) auf einer selbstgefrästen Platine ersetzt. Die Programmierung von Atmel ATtiny erfolgt durch Arduino Uno. Dafür müssen wir Arduino Uno und Atmel ATtiny verbinden.

Software (Softwarearchitektur, -entwurf)

- ATtiny84 programmieren: ATiny84 wird in mehrere Schritte konfiguriert.

-> erstmal wird ATtiny84 gefläscht, mit einem bestimmten Konfiguration. Und in der Fall durch Arduino Uno programmiert.

-> als Probe haben wir ein LED blinken lassen ( das funktioniert einwandfrei).

-> ATtiny84 als Slave konfigurieren


- EV3 programmieren

-> Bei EV3 bleibt unverändert

Hardware (Systemarchitektur, -entwurf)

Aufbau

Bevor man den EV3-Brick mit ATtiny84 verbindet, sollte erstmal den ATtiny gefläscht werden. Und zwar wie folgende könnte die Schaltplan aussehen. Da haben wir 2 Dioden reingebaut, damit bei der Stromversorgung der Strom nur in eine Richtung vorkommen muss.

Abbildung 7: Verbindung zwischen EV3-Brick, Arduino Uno, ATtiny84 und den IR-Sensor

Nachdem wir alles erfolgreich gefläscht haben und das Programm in der ATtiny rübergespielt wurde, haben wir wie folgende die Pinbelegung verschaltet.

Abbildung 8:Verbindung von ATtiny84 und Arduino 42 Bots (2013): Programming ATtiny84 with Arduino Uno


Abbildung 9: Pinbelegung von ATtiny84 Atmel: ATtiny84 - Datasheet


Abbildung 10: Verbindung zwischen ATtiny84, Arduino Uno und EV3-Brick Mehr Info : Dexter Industries: Connecting the EV3 to Arduino

-> Prototyp fertig gelötet



Abbildung 11: Prototyp (ATtiny84, EV3-Anschluss und Sensor-Pin)

Sharp IR Distanzsensor GP2Y0A21YK0F

Die Firma Sharp bietet mit der GP2Y0A21YK0F Reihe einige einfach anzusteuernde Infrarotentfernungsmesser an. Dabei wird zu Bestimmung der Entfernung nicht gemessen wie viel Licht von dem Objekt reflektiert wird, sondern in welchem Winkel es reflektiert wird. Dies hat den Vorteil, dass der Sensor relativ unabhängig von der Oberfläche ist.

Funktionsprinzip

Alle Sensoren funktionieren nach demselben Prinzip: Der Emitter sendet einen Infrarotstrahl aus. Trifft der Lichtstrahl auf kein Objekt, wird er auch nicht reflektiert, der Empfänger zeigt also auch kein Objekt an. Wird das Licht jedoch an einem Objekt reflektiert, kehrt es zum Empfänger zurück und es entsteht ein Dreieck zwischen dem Reflektionspunkt, dem Emitter und dem Empfänger. Das ganze kann man sich folgendermaßen vorstellen:

Abbildung 12: Funktionsweise des IR-Sensor

Mit Hilfe des Winkels zwischen dem Auftreffenden Strahl und dem Sensor lässt sich jetzt die Entfernung des Objektes von dem Sensor bestimmen.

Abbildung 13: die Berechnung

Graphische Darstellung

Abbildung 14: Wie man sieht ist die Ausgangsspannung des Sensor nicht proportional zur Entfernung. Außerdem kann man erkennen, dass die Wert bei einer Entfernung kleiner als ungefähr 8 cm stark abfallen, sodass man diesem Bereich nicht mehr zur Entfernungsmessung benutzen kann.

bezüglich des Projekts

Der Infrarotsensor lässt sich über die 3 Leitungen (VCC, GND und Datenleitung) mit dem Arduino UNO verschalten. Da im EV3-Programm der Eingangs-Pin des Slaves mit Pin=4 definiert wurde, muss die Datenleitung des Infrarotsensors am Eingang A1 anliegen. Die Versorgungsspannung des Infrarotsensors liegt an 5V an. Die Masse entspricht der Masse des Arduino UNO.

Abbildung 15: Durchführung der Messung

Ergebnisse

Wie oben erwähnt, sollten wir zwei Einsätze durchführen.

Beim Ersten Einsatz sind wir wie folgendes eingegangen: - Den Arduino Uno als Slave konfiguriert, so dass er den Befehl ausführt. Und zwar Die Rohrwerte von dem Infrarot Sensor auslesen und durch I2C zu EV3 (Master) die Werte weiterleiten. - Den EV3 als Master sollte die Werte in cm übersetzen und ausgeben. Dafür muss den EV3 auch konfiguriert bzw. mit bestimmten I2C Treiber Programmiert werden. Denn die Kommunikation erfolgt durch I2C. Wenn diese Schritte richtig durchgeführt sind, funktionier das einwandfrei.


Zweiter Einsatz - Der ATtiny84 als Slave konfiguriert - EV3 bleibt unverändert Nach der Ausführung der Schritten kommt seltsame Werte von dem EV3 raus.

Herausforderungen

1- Aufbau : Löten Bei dem Aufbau haben wir grundsätzlich Schwierigkeiten beim Löten begegnet. Denn hatten wir beide noch nie irgendwas gelötet.

2- EV3 Programmierung : Um der EV3 als Master zu programmieren. müssten wir I2C-Treiber recherchieren und herunterladen. Den passenden zu finden war nicht einfacht. Müssten wir eine lange Internet-Recherche durchführen.

3- ATtiny84 Programmierung : Die Programmierung des ATtiny84 war herausfordernd. Denn war nicht klar ob das Programm tatsächlich in der Tiny rein war oder eher nicht. Beim Testen lieft nicht. Deshalb haben wir 2 Probe durchgeführt.

1. Probe: Wir haben ein simple Algorithm (LED blinken lassen) rein gespielt, um zu gucken, ob der Tiny überhaupt funktioniert.

-> Ergebnis: das LED-Programm funktioniert Einwandfrei.

2. Probe: Wir haben einen anderen Prozessor(Atmega 328) geholt (Empfehlung von den Tutoren). Atmega328 weil Arduino Uno das selbe besitzt.

-> Ergebnis: Das Programm (Endprogramm) funktioniert. Bei der Abstandmessung wird doppelt langsamer als mit Arduino Uno. Das liegt aber nicht an den Prozessor, sondern an den Quartz (wir haben die Schaltung wegen mangeln an Quarz, ohne den Quarz gemacht. Zusammenfassung: Das Problem liegt definitiv an der Tiny. könnte ein Hardware-Problem (1.Probe) sowie ein Software-Problem (2.Probe) sein. Wir sind aber mehr oder weniger von der Meinung, dass das ein Software-Problem ist. Weil alle einfache Programme funktioniert haben. Wenn es um I2C geht, spielt alles verruckt.



Abbildung 16: 2.Probe -> um zu prüfen, ob unfunktionalität ein Software- oder Hardware-Problem

Zusammenfassung

Lessons Learned

Wir dachten am Anfang, dass ein komplexer Sensor (IR-Sensor) für Lego Mindstorms EV3 sich gut anhört, ist aber absolut nicht der Fall. Auch wenn man statt ATtiny84 mit Arduino Uno arbeiten will, muss man schon in der Lage sein, die alle Treiber, Bibliothek und Algorithm holen bzw. programmieren zu können. Haben wir im Laufe des Projektsdurchführung viel gelernt. Von Basis des Arduino Uno bis zu I2C-Kommunikation. Müssten wir auch bei der Aufbau verschiedene praktische Anwendung, die wir während des Semesters in Vorlesungen bekommen haben. Wie z.B. löten (Produktionstechnik oder Aufbau -und Verbindungstechnik ), fräsen, Aufbau von Bauelement ( Aufbau -und Verbindungstechnik) und Arduino Uno ( Get-Fachpraktikum Termin 3). Auch Teamwork ist ein Thema, das immer wieder auftaucht. Mit diesen Zusammenarbeit haben wir bei der Entwicklung des Projektsmanagment und Teamwork mitgemacht.

Aktueller Stand

Das Einlesen und die Ausgabe der Sensorwerte auf dem EV3-Brick in Kombination mit dem Arduino funktioniert einwandfrei. Lediglich die Umsetzung des Projektes mit dem ATtiny84 weist noch Defizite aus. Die Arduino-Software für den ATtiny 84 basiert auf dem Quellcode für den Arduino. Ein Clock- und Datensignal konnte ohne angeschlossenen Verbraucher gemessen werden.

Projektunterlagen

YouTube Video

https://www.youtube.com/watch?v=oeTG0vt75Uk&t=6s

Weblinks

Literatur


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