Einführungsveranstaltung Informatikpraktikum 2 im SoSe 2023: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(44 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:ZeigeZyklischUltraschallMessung.jpg|thumb|rigth|450px|Abb. 1: Visualisierung einer Ultraschallmessung]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
Zeile 116: Zeile 117:
* [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinien]]
* [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinien]]


== 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 [[Software_Plagiat|Plagiat]] und wird als Täuschungsversuch gewertet.'''


== Einstiegsaufgabe ==
== Einstiegsaufgabe ==
Zeile 127: Zeile 125:


=== Aufgabe 1.2: Positionserfassung mit Ultraschall ===
=== Aufgabe 1.2: Positionserfassung mit Ultraschall ===
# Lesen Sie die Messwerte des Ultraschall-Sensors aus auf statische Ziele im gesamten Messbereich
# Lesen Sie die Messwerte des Ultraschall-Sensors auf ein statisches Ziele aus. Schreiben Sie hierzu ein Arduino-Programm <code>messeEntfernung.ino</code>. Messen Sie zyklisch die Zeit mit dem Befehl <code>millis()</code>.
aus. Schreiben Sie hierzu ein Arduino-Programm messeEntfernung.ino. Messen Sie
# Messen Sie 10&thinsp;s auf ein statisches Ziel (z.&thinsp;B. einen Karton) in 30&thinsp;cm Entfernung.
zyklisch die Zeit mit dem Befehl <code>millis()</code>.
# Nutzen Sie das Programm Putty, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>UltraschallMessung.txt</code> zu speichern. Eine Anleitung finden Sie unter der URL [[Einrichtung von PuTTY]].
# Nutzen Sie das Programm Putty, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>Ultraschallmessung.txt</code> zu speichern. Eine Anleitung finden Sie unter der URL [[Einrichtung_von_PuTTY]].
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.


'''Nützliche Befehle''': <code>pinMode(), digitalWrite(), pulseIn(), delayMicroseconds(), millis()</code>
'''Nützliche Befehle''': <code>pinMode(), digitalWrite(), pulseIn(), delayMicroseconds(), millis()</code>


'''Arbeitsergebnisse''' in SVN: <code>Ultraschallmessung.txt, messeEntfernung.ino</code>
'''Arbeitsergebnisse''' in SVN: <code>UltraschallMessung.txt, messeEntfernung.ino</code>
 
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">
 
'''Tipp:''' Nutzen Sie das Demoprogramm [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUltraschallHCSR04 DemoUltraschallHCSR04] als Programmierstart.
</div>
</div>


=== Aufgabe 1.3: Darstellung in MATLAB<sup>®</sup> ===
=== Aufgabe 1.3: Darstellung und Speicherung in MATLAB<sup>®</sup> ===
Ein Taster dimmt eine LED:
# Kopieren Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebugTxt2MATLAB/ <code>DemoDebugTxt2MATLAB</code>] in Ihr Arbeitsverzeichnis und passen Sie es an.
# Tastendruck: an, 100% Lichtleistung
# Laden und visualisieren Sie die Messdaten in <code>Ultraschallmessung.txt</code> mit MATLAB<sup>®</sup>.
# Tastendruck: an, 50% Lichtleistung
# Sichern Sie die Achsenbeschriftung im 2x1 Cell-Array <code>stTitel</code>.
# Tastendruck: aus 0%
# Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit in s dar.
# Beschriften Sie die Graphen.
# Speichern Sie die Messung in der Datei <code>UltraschallMessung.mat</code>.


'''Tipp''': Nutzen Sie Ausgangsprogramm <code>PulsierendeLED.ino</code> aus Aufgabe 2.3 und nutzen Sie den Hardwareaufbau aus Aufgabe 3.2.
'''Nützliche Befehle''': <code>plot, xlabel, ylabel, save</code>


'''Nützliche Befehle''': <code>pinmode(), analogWrite(), delay(), switch..case</code>
'''Arbeitsergebnisse''' in SVN: <code>zeigeUltraschallMessung.m, UltraschallMessung.mat</code>


'''Arbeitsergebnisse''' in SVN: <code>dimmeLED.ino</code>
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">
Eine Anleitung zur Verwendung von <code>switch..case</code> findet sich in der [https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/ Arduino-Dokumentation].
Gegeben (vgl. Abb. 1):
* <code>fZeit</code>: 1x100 Messwertarray der Zeit in s
* <code>fMesswerte</code>: 1x100 Messwertarray der Ultraschallwerte in cm


Demo-Quelltext <code>DemoSwitchCase</code>
<code>save('UltraschallMessung.mat','fZeit',fMesswerte','stTitel')</code>
<source line lang="c" style="font-size:small">
//*****************************************************************************
// Modul          : DemoSwitchCase                                          *
//                                                                            *
// Datum          : 17.10.2022                                              *
//                                                                            *
// Funktion        : Demo für eine switch...case-verzweigung                  *
//                                                                            *
// Implementation  : Arduino IDE vers. 2.0.0                                  *
//                                                                            *
// Hardware        : Arduino UNO R3                                          *
//                                                                            *
// Author          : (c) 2022, Dr. Ulrich Schneider                          *
//                                                                            *
// Letzte Änderung : 17.10.2022                                              *
//                                                                            *
//*****************************************************************************
byte Cnt_u8 =0;              // Zählvariable wird angelegt und initialisiert
 
void setup() {
  Serial.begin(9600);        // Seriellen Monitor initialisieren, 9600 Baud
}
void loop() {
Cnt_u8++;                    // Zähler inkrementieren
if (Cnt_u8>2) Cnt_u8=0;      // Überlauf ab 2: 012012...
switch (Cnt_u8)
{
case 0:
  Serial.println("Fall 0");
  break;
case 1:
  Serial.println("Fall 1");
  break;
case 2:
  Serial.println("Fall 2");
  break;
default:
  // wird in diesem Beispiel nicht erreicht
  break;
}
delay(500); // ms für die Darstellung
}
 
end;
</source>
</div>
</div>


=== Aufgabe 3.4: Ansteuerung einer farbigen LED ===
=== Aufgabe 1.4: Zyklische Messdatenverarbeitung in MATLAB<sup>®</sup> ===
Eine RGB-LED soll in verschiedenen Farben leuchten. Auf Druck des Tasters soll die RGB-LED in folgenden Modi betrieben werden:
# Schreiben Sie die Funktion <code>(fZeit, fEntfernung)=LeseUltraschall(k)</code> und speichern Sie diese in der Datei <code>LeseUltraschall.m</code>.
# Weiß
# Laden Sie darin <code>UltraschallMessung.mat</code> einmalig nur bei ersten Durchlauf und speichern Sie <code>fZeit, fEntfernung</code> als persistente Variablen.
# Rot
# <code>(fZeit, fEntfernung)=LeseUltraschall(k)</code> gibt zwei Werte fZeit(k) und fEntfernung(k) zurück (z.&thinsp;B. [0 30] für 0&thinsp;s und 30&thinsp;m).
# Blau
# Schreiben Sie das Rahmenprogramm <code>zeigeZyklischUltraschallMessung.m</code>, welches <code>LeseUltraschall</code> zyklisch aufruft.
# Grün
# Stellen Sie im Rahmenprogramm die Messdaten in einem Diagramm in cm über der Zeit in s dar.
# Langsamer Übergang durch das gesamte Farbspektrum (Einschlaflicht)
# Beschriften Sie den Graphen entsprechend Abb. 1.


'''Nützliche Befehle''': <code>plot, xlabel, ylabel, load, global, persistent, isempty, for, function</code>


'''Arbeitsergebnisse''' in SVN: <code>zeigeZyklischUltraschallMessung.m, LeseUltraschall.m</code>


'''Nützliche Befehle''': <code>pinmode(), analogWrite(), delay()</code>


'''Arbeitsergebnisse''' in SVN: <code>steureFarbigeLED.ino</code>
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">
 
[[Datei:PAP_Aufgabe_1_4.jpg|thumb|left|450px|Abb. 2: PAP für die zyklische Messdatenverarbeitung]]
'''Musterlösung:''' [https://funduino.de/nr-20-rgb-led]
</div>
</div>


=== Aufgabe 3.5: Nachhaltige Doku ===
=== Aufgabe 1.5: Nachhaltige Doku ===
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Wurden die Regeln für den Umgang mit SVN eingehalten?
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?
* Halten Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] und die [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]] ein.
* Wurde nachhaltig dokumentiert?
* Versehen Sie jedes Programm mit einem Header ([[Header Beispiel für MATLAB]], [[Header Beispiel für C]]).
* Haben die Programme einen Header?
* Kommentiere Sie den Quelltext umfangreich.
* Wurden der Quelltext umfangreich kommentiert?
* Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm?


'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
== Tutorials ==
* [https://www.arduino.cc/reference/de/ Arduino Befehlsübersicht]
* [[MATLAB-Befehle|MATLAB<sup>®</sup> Befehlsübersicht]]
* [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]]
* [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]]
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUltraschallHCSR04 SVN: <code>DemoUltraschallHCSR04</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebugTxt2MATLAB/ SVN: <code>DemoDebugTxt2MATLAB</code>]
== Musterlösung ==
Nach dem Praktikumstermin erhalten Sie die Musterlösung. Vergleichen Sie diese mit Ihrer Lösung und stellen Sie im Tutorium oder Praktikum gern Fragen. Sie dürfen anschließend auch gern die Musterlösung verwenden um aufbauende Aufgaben zu lösen.<br>
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Musterloesung/Inf2P/Termin_01 SVN: Musterlösung zu Termin 1]
== 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 [[Software_Plagiat|Plagiat]] und wird als Täuschungsversuch gewertet.'''
----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]

Aktuelle Version vom 28. April 2023, 11:01 Uhr

Abb. 1: Visualisierung einer Ultraschallmessung

Autor: Prof. Dr.-Ing. Schneider
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester
Sprechstunde: Montag. 11:00 - 12:00 Uhr, nach Vereinbarung
Einführungsveranstaltung: 20. & 23.03.2023

Modulbeschreibung

Die Lehrveranstaltung Informatik Praktikum 2 ist Teil des Moduls MTR-B-2-2.11.

Qualifikationsziele

Die Studierenden können das an der Hochschule erworbene Wissen in der beruflichen Praxis bzw. in vergleichbaren Aufgabenstellungen anwenden und verfügen daher über eine verbesserte instrumentale Kompetenz. Die Studierenden können praxisorientierte Aufgaben analysieren und geeignete Problemlösungsmethoden im Kontext der Ingenieurdisziplinen anwenden.

Aufbauend auf das Informatik Praktikum 1 können die Studierenden

  • strukturiert Software planen und visualisieren.
  • mit einem SW-Versionierungstool umgehen.
  • komplexe Aufgaben der Informatik systematisch lösen.
  • Fehler analysieren und beheben.
  • mit dem Simulationstool MATLAB/Simulink umgehen.
  • Ergebnisse anschaulich und verständlich präsentieren.
  • Ergebnisse nachhaltig dokumentieren.

Inhalte

Informatik Praktikum 2:

  • Einführung
  • Praktische Umsetzung der Programmierkenntnisse in Projekten
  • Dokumentation und Präsentation der Ergebnisse
  • In Abhängigkeit der Aufgabenstellungen kann zusätzlich eine Hardwareplattform z. B. Lego Mindstorms/Arduino eingesetzt werden und eine Simulation und Programmierung mit MATLAB®/Simulink erfolgen.

Lehrform des Informatikpraktikum 2

2 SWS Praktikum (2 SWS)

Prüfungsform des Informatikpraktikum 2

  • Anwesenheitspflicht an allen Praktikumsterminen (Anwesenheitskontrolle)
  • Vorbereitung des Praktikumstags und Überprüfung in Form von mündlichen Antestaten
  • Durchführung im Praktikum
  • Nachbereitung in Form von Versuchsberichten bzw. Protokollen (Hausarbeit)

Bewertung

  • Bewertung der Abgaben anhand der Bewertungskriterien für Software.
  • Plagiate (ähnliche Lösungen) werden mit der Note 6.0 bewertet.
  • Die Versuche finden chronologisch statt.
  • Wer diesen Termin unentschuldigt verpasst, kann dieses Semester nicht am Praktikum teilnehmen. Legen Sie im Krankheitsfall eine ärztliche Bescheinigung bei Prof. Schneider vor.
  • Beantworten Sie die Aufgaben im Team und und sichern Sie die Programme/Lösungen in SVN. Wechseln Sie sich bitte bei Upload ab, damit sichtbar ist, dass beide Teammitglieder am Projekt arbeiten. regelmäßige Teilnahme

Workload des Informatikpraktikum 2

ETCS Workload gesamt Präsenz Selbststudium
2,5 75 h 30 h 45 h (3 h/w)

Hinweis: Das Praktikum ist ein Submodul. Haben Sie dies bestanden, bleibt der Status bestanden auch beim Nichtbestehen des Moduls erhalten.

Informationsplattformen

Nachfolgende Informationsplattformen finden im Praktikum Anwendung

HSHL-Wiki

  • Aufgabenstellungen
  • Anleitungen
  • Bewertungskriterien
  • Literaturhinweise
  • Links
  • Downloads

Versionsverwaltung SVN

  • Demo-Quelltext
  • Gruppenordner
  • Softwareablageort
  • Versionsverwaltung
  • Kollaboriertes Arbeiten
  • Datensicherung via TortoiseSVN Client

Voraussetzung für die Teilnahme

Gruppeneinteilung

Die Gruppeneinteilung erfolgt über die Lernplattform

Sicherheitseinweisung

  • Studieren Sie die Sicherheitsunterlagen auf der Lernplattform.
  • Bestätigen Sie auf der Lernplattform, dass Sie diese studiert und verstanden haben.
  • Ohne Sicherheitseinweisung dürfen Sie das Labor nicht betreten.

Erwartungen an die Teilnehmenden

  • Voraussetzungen erfüllen
  • Vorbereitung der Termine
  • Aktive Teilnahme - Fragen stellen
  • Auseinandersetzung mit den Demos
  • Teilnahme an allen Terminen
  • Pünktlichkeit
  • Teilnahme an Gruppenarbeiten
  • Teilnahme am Tutorium

Tutorial zum Einstieg


Einstiegsaufgabe

Aufgabe 1.1: Softwareplanung

Planen Sie die Arduino-Software als PAP.

Arbeitsergebnisse in SVN: Softwareplanung_Termin_01.pap

Aufgabe 1.2: Positionserfassung mit Ultraschall

  1. Lesen Sie die Messwerte des Ultraschall-Sensors auf ein statisches Ziele aus. Schreiben Sie hierzu ein Arduino-Programm messeEntfernung.ino. Messen Sie zyklisch die Zeit mit dem Befehl millis().
  2. Messen Sie 10 s auf ein statisches Ziel (z. B. einen Karton) in 30 cm Entfernung.
  3. Nutzen Sie das Programm Putty, um die Daten der seriellen Schnittstelle in der ASCII-Datei UltraschallMessung.txt zu speichern. Eine Anleitung finden Sie unter der URL Einrichtung von PuTTY.
  4. Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.

Nützliche Befehle: pinMode(), digitalWrite(), pulseIn(), delayMicroseconds(), millis()

Arbeitsergebnisse in SVN: UltraschallMessung.txt, messeEntfernung.ino

Tipp: Nutzen Sie das Demoprogramm DemoUltraschallHCSR04 als Programmierstart.

Aufgabe 1.3: Darstellung und Speicherung in MATLAB®

  1. Kopieren Sie das Demo DemoDebugTxt2MATLAB in Ihr Arbeitsverzeichnis und passen Sie es an.
  2. Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
  3. Sichern Sie die Achsenbeschriftung im 2x1 Cell-Array stTitel.
  4. Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit in s dar.
  5. Beschriften Sie die Graphen.
  6. Speichern Sie die Messung in der Datei UltraschallMessung.mat.

Nützliche Befehle: plot, xlabel, ylabel, save

Arbeitsergebnisse in SVN: zeigeUltraschallMessung.m, UltraschallMessung.mat

Gegeben (vgl. Abb. 1):

  • fZeit: 1x100 Messwertarray der Zeit in s
  • fMesswerte: 1x100 Messwertarray der Ultraschallwerte in cm

save('UltraschallMessung.mat','fZeit',fMesswerte','stTitel')

Aufgabe 1.4: Zyklische Messdatenverarbeitung in MATLAB®

  1. Schreiben Sie die Funktion (fZeit, fEntfernung)=LeseUltraschall(k) und speichern Sie diese in der Datei LeseUltraschall.m.
  2. Laden Sie darin UltraschallMessung.mat einmalig nur bei ersten Durchlauf und speichern Sie fZeit, fEntfernung als persistente Variablen.
  3. (fZeit, fEntfernung)=LeseUltraschall(k) gibt zwei Werte fZeit(k) und fEntfernung(k) zurück (z. B. [0 30] für 0 s und 30 m).
  4. Schreiben Sie das Rahmenprogramm zeigeZyklischUltraschallMessung.m, welches LeseUltraschall zyklisch aufruft.
  5. Stellen Sie im Rahmenprogramm die Messdaten in einem Diagramm in cm über der Zeit in s dar.
  6. Beschriften Sie den Graphen entsprechend Abb. 1.

Nützliche Befehle: plot, xlabel, ylabel, load, global, persistent, isempty, for, function

Arbeitsergebnisse in SVN: zeigeZyklischUltraschallMessung.m, LeseUltraschall.m


Abb. 2: PAP für die zyklische Messdatenverarbeitung

Aufgabe 1.5: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos

Musterlösung

Nach dem Praktikumstermin erhalten Sie die Musterlösung. Vergleichen Sie diese mit Ihrer Lösung und stellen Sie im Tutorium oder Praktikum gern Fragen. Sie dürfen anschließend auch gern die Musterlösung verwenden um aufbauende Aufgaben zu lösen.

SVN: Musterlösung zu Termin 1

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.



→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2