Arduino: Infrarotsensor einlesen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Datei:SHARP IR Abstandssensor GP2Y0A21YK0F.png|thumb|rigth|300px|Abb. 1: IR-Abstandssensor Sharp GP2Y0A41SK0F]]
[[Datei:SHARP IR Abstandssensor GP2Y0A21YK0F.png|thumb|rigth|300px|Abb. 1: IR-Abstandssensor Sharp GP2Y0A41SK0F]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
{|
'''Modul:''' Praxismodul I<br>
|-
'''Lehrveranstaltung:''' Mechatronik, Informatikpraktikum 1, 1. Semester, Wintersemester
| '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
| '''Modul:''' || Praxismodul I
|-
| '''Lektion 5:''' || Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester
|}


== Inhalt ==
== Inhalt ==
Zeile 55: Zeile 60:


'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_05.pdf</code>
'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_05.pdf</code>
== Tutorials ==
* [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Arduino: Using the Serial Plotter Tool]
* [https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ Arduino Referenz: <code>analogRead()</code> ]
* [[Sharp_GP2Y0A41SK0F| Wiki: SHARP IR Abstandsensor]]
* [[Arduino:_Bibliothek_einbinden|Wiki: HSHL-Bibliothek einbinden]]
* [https://www.arduino.cc/reference/de/ Arduino Befehlsübersicht]
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoArray/DemoArray.ino DemoArray.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoLookupTableIR/DemoLookupTableIR.ino DemoLookupTableIR.ino]


== Vorbereitung ==
== Versuchsvorbereitung ==
[[Datei:Batterie-Tester.jpg |thumb|rigth|300px|Abb. 2: Batterie-Tester]]
[[Datei:Batterie-Tester.jpg |thumb|rigth|300px|Abb. 2: Batterie-Tester]]
# Studieren Sie die Tutorials und Demos.
# Studieren Sie das [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Using the Serial Plotter Tool]  und nutzen Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino], um Daten im Seriellen Plotter auszugeben.
# Studieren Sie das [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Using the Serial Plotter Tool]  und nutzen Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino], um Daten im Seriellen Plotter auszugeben.
# Recherchieren Sie die Funktion des Sensors anhand von Fachliteratur und des [[Medium:GP2Y0A41SK0F.pdf|Datenblatts]] oder [[Sharp_GP2Y0A41SK0F|Wiki-Artikels]].
# Recherchieren Sie die Funktion des Sensors anhand von Fachliteratur und des [[Medium:GP2Y0A41SK0F.pdf|Datenblatts]] oder [[Sharp_GP2Y0A41SK0F|Wiki-Artikels]].
Zeile 67: Zeile 85:
# Beantworten Sie die Lernzielkontrollfragen.
# Beantworten Sie die Lernzielkontrollfragen.
# Sichern Sie Ihre Unterlagen in SVN.
# Sichern Sie Ihre Unterlagen in SVN.
<div class="mw-collapsible mw-collapsed">
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
| <strong>Musterlösung&thinsp;</strong>
'''Musterlösung:''' für den Batterie-Tester
|-
<source line lang="C" style="font-size:small">const unsigned long BAUD_RATE_u32 = 9600;
| '''Musterlösung:''' für den Batterie-Tester <br>
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
const unsigned int AUFLOESUNG_u16 = 1023; //2^10-1
const unsigned int AUFLOESUNG_u16 = 1023; //2^10-1
const float ARDUINO_SPANNUNG_f32  = 5.0;
const float ARDUINO_SPANNUNG_f32  = 5.0;
Zeile 82: Zeile 101:
   Serial.print(ARDUINO_SPANNUNG_f32 * AUFLOESUNG_u16/Digitalwert_u16); // Umrechnung Digitalwert in V
   Serial.print(ARDUINO_SPANNUNG_f32 * AUFLOESUNG_u16/Digitalwert_u16); // Umrechnung Digitalwert in V
   Serial.println("V");
   Serial.println("V");
</source>
</syntaxhighlight>
</div>
|-
|}
{| class="wikitable"
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 1: Kennlinie des IR-Distanzsensors
|+ style = "text-align: left"|Tabelle 1: Kennlinie des IR-Distanzsensors
Zeile 98: Zeile 118:
|-
|-
|}
|}
'''Tipps:'''
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipps&thinsp;</strong>
|-
|
* Nutzen Sie Werte über den gesamten Wertebereich [0.2&thinsp;V .. 3.2&thinsp;V].
* Nutzen Sie Werte über den gesamten Wertebereich [0.2&thinsp;V .. 3.2&thinsp;V].
* Sie können die Werte auch durch reale Messungen auf ein statisches Ziel ermitteln.
* Sie können die Werte auch durch reale Messungen auf ein statisches Ziel ermitteln.
* Umrechnungsformel: <math>D_1 = U_1\cdot \frac{1023}{5\,V}</math>
* Umrechnungsformel: <math>D_1 = U_1\cdot \frac{1023}{5\,V}</math>
<!--https://hshl.cloud.panopto.eu/Panopto/Pages/Viewer.aspx?-->
|-
|}


== Versuchsdurchführung ==
== Versuchsdurchführung ==
Zeile 109: Zeile 133:


'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_05.pdf</code>
'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_05.pdf</code>
----


=== Aufgabe 5.2: Der Abstandssensor Sharp GP2Y0A21YK0F ===
=== Aufgabe 5.2: Der Abstandssensor Sharp GP2Y0A21YK0F ===
Zeile 117: Zeile 142:


'''Arbeitsergebnisse''' in SVN: <code>leseSharpIR.ino</code>
'''Arbeitsergebnisse''' in SVN: <code>leseSharpIR.ino</code>
<div class="mw-collapsible mw-collapsed">
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
| <strong>Demo&thinsp;</strong>
|-
|
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino Demo: DemoSharpIR.ino]
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino Demo: DemoSharpIR.ino]
</div>
|-
|}
----


=== Aufgabe 5.3: Sensorkennlinie ===
=== Aufgabe 5.3: Sensorkennlinie ===
Zeile 131: Zeile 160:


'''Arbeitsergebnisse''' in SVN: <code>leseSharpIR.ino</code>
'''Arbeitsergebnisse''' in SVN: <code>leseSharpIR.ino</code>
<div class="mw-collapsible mw-collapsed">
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
| <strong>Demo&thinsp;</strong>
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino]
|-
</div>
| '''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino]
|-
|}
----


=== Aufgabe 5.4: Charakterisierung des Sharp Abstandssensors ===
=== Aufgabe 5.4: Charakterisierung des Sharp Abstandssensors ===
Bestimmen Sie die nachfolgenden Werte, um den IR-Sensor zu beschreiben
Bestimmen Sie die nachfolgenden Werte, um den IR-Sensor zu beschreiben
* Messbereich in cm
* [https://de.wikipedia.org/wiki/Messbereich Messbereich] in cm
* Auflösung (Zeit, Distanz)
* [https://de.wikipedia.org/wiki/Aufl%C3%B6sung_(Digitaltechnik) Auflösung] (Zeit, Distanz)
* Empfindlichkeit  
* [https://de.wikipedia.org/wiki/Empfindlichkeit_(Technik) Empfindlichkeit]
 


'''Nützliche Befehle''': <code>millis(), Serial.print(), Serial.println()</code>
'''Nützliche Befehle''': <code>millis(), Serial.print(), Serial.println()</code>


'''Arbeitsergebnisse''' in SVN: <code>Sensorcharakterisierung.pdf</code>
'''Arbeitsergebnisse''' in SVN: <code>Sensorcharakterisierung.pdf</code>
<div class="mw-collapsible mw-collapsed">
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
| <strong>Musterlösung&thinsp;</strong>
'''Musterlösung:'''
|-
|
* Den Messbereich beschreibt der kleinste und größte Messwert [3,50]cm.
* Den Messbereich beschreibt der kleinste und größte Messwert [3,50]cm.
* Die Auflösung ist der kleinstmögliche Werteschritt. Hier Zeit: 5-7&thinsp;ms, Spannung: 0,0048V
* Die Auflösung ist der kleinstmögliche Werteschritt. Hier Zeit: 5-7&thinsp;ms, Spannung: 0,0048V
* Die Empfindlichkeit berechnet sich aus <math>E=\frac{\Delta y}{\Delta x}</math>. Im nichtlinearen Fall entsprich dies der 1. Ableitung.
* Die Empfindlichkeit berechnet sich aus <math>E=\frac{\Delta y}{\Delta x}</math>. Im nichtlinearen Fall entsprich dies der 1. Ableitung.
</div>
|-
|}
----


=== Aufgabe 5.5: Nachhaltige Doku ===
=== Aufgabe 5.5: Nachhaltige Doku ===
Zeile 164: Zeile 198:


'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
== Tutorials ==
* [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Arduino: Using the Serial Plotter Tool]
* [https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ Arduino Referenz: <code>analogRead()</code> ]
* [[Sharp_GP2Y0A41SK0F| Wiki: SHARP IR Abstandsensor]]
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoArray/DemoArray.ino DemoArray.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTableIR/DemoLookupTableIR.ino DemoLookupTableIR.ino]


== FAQ ==
== FAQ ==

Aktuelle Version vom 28. Oktober 2023, 10:02 Uhr

Abb. 1: IR-Abstandssensor Sharp GP2Y0A41SK0F
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lektion 5: Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester

Inhalt

  • Deklaration und Verwendung von Arrays
  • Kapselung einer Teilaufgabe in einer Funktion
  • Funktion des Sharp Entfernungssensors GP2Y0A41SK0F
  • Einlesen des Entfernungssensors mit dem Arduino
  • Darstellung der Messwerte
  • Kennlinienkalibrierung

Video Tutorials

Lernziele

Nach Durchführung dieser Lektion

  • können Sie den IR-Sensor korrekt (elektrisch) anschließen.
  • können die Messwerte mit dem Serial Plotter der Arduino IDE anzeigen.
  • können Sie ein Array anlegen und auf die Array-Elemente zugreifen.
  • können Sie funktional programmieren.
  • können Sie die Sensordaten in die gemessene Entfernung umrechnen.
  • können Sie die Messwerte charakterisieren.

Lernzielkontrolle

  1. Welcher Primärsensor kommt im Sharp GP2Y0A21YK0F zum Einsatz?
  2. Wie funktioniert der Sensor GP2Y0A41SK0F technisch?
  3. Was misst der Sensor GP2Y0A41SK0F? Was ist seine Ausgangsgröße U1?
  4. Wie wird die Ausgangsgröße (U1) digitalisiert (D1)?
  5. Auf welchen Wegen lässt sich die digitalisierte Ausgangsgröße D1 in die Distanz d umgerechnet?
  6. Wurde der Quelltext durch Header und Kommentare aufgewertet?
  7. Wurden jedes Programm mittels PAP geplant?
  8. Wurde auf magic numbers verzichtet?
  9. Wurde die Programmierrichtlinie eingehalten?

Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_05.pdf

Tutorials

Demos

Versuchsvorbereitung

Abb. 2: Batterie-Tester
  1. Studieren Sie die Tutorials und Demos.
  2. Studieren Sie das Using the Serial Plotter Tool und nutzen Sie das Demo DemoSharpIR.ino, um Daten im Seriellen Plotter auszugeben.
  3. Recherchieren Sie die Funktion des Sensors anhand von Fachliteratur und des Datenblatts oder Wiki-Artikels.
  4. Bauen Sie die Schaltungen zur Auswertung der Sensoren auf.
  5. Nutzen Sie die Abbildung auf Seite 4 des Datenblatts, um eine Tabelle Spannung/Distanz aufzustellen (vgl. Tab. 1).
  6. Machen Sie sich mit der Funktion der analogen Eingänge vertraut: Arduino Referenz: analogRead() . Messen Sie gemäß Abb. 2 die Spannung einen AA Batterie in V. (Hinweis: KEINE 9-V-BLOCK nutzen! Spannung von mehr als 5 V können den Arduino zerstören.)
  7. Nutzen Sie die Arduino Referenz: analogRead() und erweitern Sie Ihre Tabelle um die Spalte Digitalwert D1 (vgl. Tab. 1).
  8. Planen Sie die Software via PAP.
  9. Beantworten Sie die Lernzielkontrollfragen.
  10. Sichern Sie Ihre Unterlagen in SVN.
Tabelle 1: Kennlinie des IR-Distanzsensors
Spannung U1 in V Distanz d in cm Digitalwert D1
3 3,6 614
2.02 6 413
0.82 16 168
.. .. ..

Versuchsdurchführung

Aufgabe 5.1: Lernzielkontrolle

Präsentieren Sie Prof. Schneider das Ergebnis der Lernzielkontrolle.

Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_05.pdf


Aufgabe 5.2: Der Abstandssensor Sharp GP2Y0A21YK0F

  1. Setzen Sie Ihre geplante Software 1:1 um.
  2. Stellen Sie die Messwerte D1 im Seriellen Monitor und Plotter dar.

Nützliche Befehle: Serial.begin(), Serial.println(), analogRead()

Arbeitsergebnisse in SVN: leseSharpIR.ino


Aufgabe 5.3: Sensorkennlinie

  1. Erweitern Sie Ihr Programm leseSharpIR.ino. Rechnen Sie das Digitalwort D1 in die Messdistanz d um.
  2. Stellen Sie die Distanz d im Seriellen Monitor und Plotter dar.
  3. Verifizieren Sie Ihr Ergebnis mit einem Gliedermaßstab.
  4. Was fällt Ihnen bei den Messwerten auf?

Nützliche Befehle: Serial.begin(), Serial.println(), analogRead(), LookupTable(), analogRead()

Arbeitsergebnisse in SVN: leseSharpIR.ino


Aufgabe 5.4: Charakterisierung des Sharp Abstandssensors

Bestimmen Sie die nachfolgenden Werte, um den IR-Sensor zu beschreiben

Nützliche Befehle: millis(), Serial.print(), Serial.println()

Arbeitsergebnisse in SVN: Sensorcharakterisierung.pdf


Aufgabe 5.5: Nachhaltige Doku

Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.

  • Wurden die Regeln für den Umgang mit SVN eingehalten?
  • Wurde die Programmierrichtlinie eingehalten?
  • Wurde nachhaltig dokumentiert?
  • Haben die Programme einen Header?
  • Wurden der Quelltext umfangreich kommentiert?
  • Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm?

Arbeitsergebnis in SVN: SVN Log

FAQ

  • Muss ich die Lösungen selbst programmieren? Ja, nur Eigenleistung wird bewertet.
  • Darf ich die Musterlösung 1:1 kopieren und als meine Leistung ausgeben? Nein, das ist ein Plagiat und wird als Täuschungsversuch gewertet.

Literatur

  1. Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: HSHL-Bib, O'Reilly-URL
  2. Brühlmann, T.: Sensoren im Einsatz mit Arduino. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: HSHL-Bib, O'Reilly
  3. Snieders, R.: ARDUINO lernen. Nordhorn: 8. Auflage 2022. URL: https://funduino.de/vorwort
  4. Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)
  5. Sharp: GP2Y0A41SK0F. URL: [1]. Datenblatt (858 kb)

→ Termine 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
→ zurück zum Hauptartikel: Arduino Praxiseinstieg