Angewandte Informatik: Entfernungsmessung mit Ultraschall: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „{|class="wikitable" |- | '''Autor:''' || Prof. Dr.-Ing. Schneider |- | '''Modul''' || Business and Systems Engineering, Angewandte Mathematik und Informatik, Übung, Sommersemester |- | '''Modulbezeichnung:''' || BSE-M-2-1.09 |} == Inhalt == * [https://www.mathworks.com/help/matlab/arduinoio-get-started-with-matlab-support-package-for-arduino-hardware.html?s_tid=CRUX_lftnav Erste Schritte mit dem MATLAB-Supportpaket für A…“
 
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
|}
|}
== Inhalt ==
== Inhalt ==
* [https://www.mathworks.com/help/matlab/arduinoio-get-started-with-matlab-support-package-for-arduino-hardware.html?s_tid=CRUX_lftnav Erste Schritte mit dem MATLAB-Supportpaket für Arduino-Hardware]
* Aussendung und Empfang von Ultraschallimpulsen mit MATLAB<sup>®</sup>  
* [https://www.mathworks.com/help/matlab/supportpkg/using-arduino-explorer.html Arduino Explorer App]
* Ansteuerung einer LED
* [https://www.mathworks.com/help/matlab/supportpkg/getting-started-with-matlab-support-package-for-arduino-hardware.html Erste Schritte mit MATLAB]
* Entfernungsmessung mittels Ultraschall
* [https://de.mathworks.com/discovery/arduino-programming-matlab-simulink.html Arduino Programmierung mit MATLAB<sup>®</sup>]
* Messwertanalyse mit MATLAB
* [https://de.mathworks.com/help/matlab/supportpkg/arduinoio.ultrasonic.html Ultraschallsensor einlesen]
* Messwertfilterung in Echtzeit
= Aufgabe 1.1: Arduino Explorer =
* Auslegung von Filterparameter
Testen Sie zuerst die Verbindung zum Arduino mit dem Arduino Explorer. Den passenden port finden Sie über den Windows '''Geräte-Manager'''.<br>
* Ergebnisdarstellung
<code>>> arduinoExplorer</code>
* Schwellwertbetrachtung und Anzeige mit Ampelmodul
# Schließen Sie ein Potentiometer an den analogen Eingang <code>A0</code> an.
# Visualisieren Sie die Spannung an <code>A0</code> mit dem <code>arduinoExplorer</code>.
# Stecken Sie eine Diode in D13 gegen GND.
# Schalten Sie die Diode via <code>arduinoExplorer</code> an uns aus.


= Aufgabe 1.2: Poti mit MATLAB<sup>®</sup> lesen =
== Lernziele==
# Schließen Sie ein Potentiometer an den analogen Eingang <code>A0</code> an.  
Nach Durchführung dieser Lektion können Sie
# Visualisieren Sie die Spannung an <code>A0</code> mit einem MATLAB<sup>®</sup>-Skript für 100 Werte über der Zeit in s.
* die Funktion eines Ultraschallsensors erläutern.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
* die Vor- und Nachteile der Entfernungsmessung mit Ultraschall erläutern.
| <strong>Musterlösung&thinsp;</strong>
* mit einem Ultraschallsensors Entfernungen messen.
|-
* Messdaten charakterisieren und anzeigen.
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
* reale Messwerte speichern und via MATLAB<sup>®</sup> zyklisch visualisieren.
* ein rekursives Tiefpassfilter programmiert und parametrieren.
* eine Funktion in MATLAB<sup>®</sup> programmieren und aufrufen.
* LEDs und das Ampelmodul ansteuern.


if ~isobject(hArduino)
== Vorbereitung ==
  hArduino = arduino('COM8','Uno') % Verbindung aufbauen
Erlernen Sie die Funktion des Ultraschallsensors und eines rekursiven Tiefpassfilters anhand der verlinkten Fachartikeln und Literatur.
end
tic % Timer starten
for i=1:100
    Spannung(i)= readVoltage(hArduino,'A0');
    Zeit(i)    = toc;
    pause(0.1) % in s
end


plot(Zeit,Spannung,'r.-')
== Tutorial ==
xlabel('Zeit in s')
* [[Ultraschallsensor_HC-SR04|HSHL-Wiki: Ultraschallsensors]]
ylabel('Spannung in V')
* [https://de.mathworks.com/help/matlab/supportpkg/arduinoio.ultrasonic.html MATHWORKS: Ultraschallsensor einlesen]
</source>
* [[Arduino:_Ultraschallsensor_entstören|HSHL-Wiki: Rekursives Tiefpassfilter]]
|}


= Aufgabe 1.3: LED mit MATLAB<sup>®</sup> schalten =
== Demos ==
# Stecken Sie eine Diode in D13 gegen GND.
# Schalten Sie die Diode mit einem MATLAB<sup>®</sup>-Skript zyklisch an und aus.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung&thinsp;</strong>
| <strong>Tiefpass.m&thinsp;</strong>
|-
|-
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
| <source line lang="matlab" style="font-size:medium">%****************************************************************
if exist('hArduino')==0
%        Hochschule Hamm-Lippstadt                              *
  hArduino = arduino('COM8','Uno'); % Arduino Objekt erzeugen
%****************************************************************
  disp('Neues Arduino Objekt erzeugt.')
% Modul           : Tiefpass(x)                                 *
end
%                                                              *
nMesswerte = 100;
% Datum          : 08-Okt-2013                                *
%% Messschleife
%                                                               *
for i=1:nMesswerte
% Funktion        : Tiefpassfilter 1. Ordnung mit fester        *
      writeDigitalPin(hArduino, 'D13', 0);
%                  Wichtung                                    *
      pause(0.5);
%                                                              *
      writeDigitalPin(hArduino, 'D13', 1);
% Implementation  : MATLAB R2025b                              *
      pause(0.5);
%                                                              *
end
% Toolbox        :                                            *
clear hArduino
%                                                              *
</source>
% Author          : Phil Kim                                    *
|}
%                  Bearbeitet von Prof. Schneider              *
= Aufgabe 1.4: LED mit MATLAB<sup>®</sup> dimmen =
%                                                              *
[[Datei:ArduinoGettingStartedExample 02.png|thumb|rigth|300px|Abb. 1: LED und Potentiometer mit dem Arduino verbinden]]
% Quelle          : www.jj21.org/kf4b                          *
# Stecken Sie eine Diode in D11 gegen GND.
%                                                              *
# Dimmen Sie die Diode mit einem MATLAB<sup>®</sup>-Skript mittels Potentiometer (vgl. Aufgabe 2).
% Letzte Änderung : 020.04.2026                                *
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
%                                                               *
| <strong>Musterlösung&thinsp;</strong>
%***************************************************************/
|-
function xTPF = Tiefpass(x)
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
if exist('hArduino')==0
  hArduino = arduino('COM8','Uno'); % Arduino Objekt erzeugen
  disp('Neues Arduino Objekt erzeugt.')
end


nMesswerte = 100;
%% Bleibende Variablen anlegen
%% Messschleife
persistent prevX alpha
for i=1:nMesswerte
    Spannung = readVoltage(hArduino, 'A0')      % Spannung messen
    writePWMVoltage(hArduino, 'D11', Spannung);  % LED via PWM dimmen
    pause(0.1);
end
clear hArduino
</source>
|}
= Aufgabe 1.5: Taster und Summer =
[[Datei:ArduinoGettingStartedExample 03.png|thumb|rigth|300px|Abb. 2: Verkabelungsplan für taster und Summer]]
# Lesen Sie den Taster via D12 ein (vgl. Abb 2).
# Steuern Sie den Summer bei Tasterdruck via D11 an.
# Eine rote LED signalisiert die aktive Programmlaufzeit.


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
%% Beim ersten Durchlauf Initialisierung
| <strong>Musterlösung&thinsp;</strong>
if isempty(alpha)
|-
  prevX = x; % Letztes Ergebnis
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
  alpha = 0.95; % Filterfrequenz/Wichtung
if exist('hArduino')==0
    hArduino = arduino('COM8','Uno'); % Arduino Objekt erzeugen
    disp('Neues Arduino Objekt erzeugt.')
end
end


configurePin(hArduino, 'D12', 'pullup');
%% Tiefpass 1. Ordnung
nMesswerte = 100;
xTPF = alpha*prevX + (1 - alpha)*x;
%% Messschleife
prevX = xTPF;
for i=1:nMesswerte
    writeDigitalPin(hArduino, 'D13', 1); % Achtung - System läuft
    speaker_status = readDigitalPin(hArduino, 'D12');
    if speaker_status == 0
        playTone(hArduino, 'D11', 1200, 1);
    else
        % Change duration to zero to mute the speaker
        playTone(hArduino, 'D11', 1200, 0);
    end
end
writeDigitalPin(hArduino, 'D13', 0);
clear hArduino
</source>
</source>
|}
|}
= Aufgabe 1.6: Entfernungsmessung mit Ultraschall =
 
= Aufgabe 4: Entfernungsmessung mit Ultraschall =
  <!--[[Datei:Gift-9344 128.gif|50px]]'''Hinweis: Mit der Lösung dieser Aufgabe und Sicherung in SVN können Sie Bonuspunkte erwerben.'''-->
  <!--[[Datei:Gift-9344 128.gif|50px]]'''Hinweis: Mit der Lösung dieser Aufgabe und Sicherung in SVN können Sie Bonuspunkte erwerben.'''-->
# Lesen Sie die Messwerte des Ultraschallsensor ein [https://de.mathworks.com/help/matlab/supportpkg/arduinoio.ultrasonic.html?searchHighlight=arduino+matlab+ultrasonic&s_tid=srchtitle_support_results_2_arduino+matlab+ultrasonic].
# Lesen Sie die Messwerte des Ultraschallsensor ein [https://de.mathworks.com/help/matlab/supportpkg/arduinoio.ultrasonic.html?searchHighlight=arduino+matlab+ultrasonic&s_tid=srchtitle_support_results_2_arduino+matlab+ultrasonic].
# Eine rote LED signalisiert die aktive Programmlaufzeit.
# Eine rote LED signalisiert den Programmstart.
# Zeigen Sie die Distanzwerte in cm über der Zeit an.
# Zeigen Sie die Distanzwerte in cm über der Zeit an.
# Sichern Sie Ihre Messwerte in der Datei <code>Ultraschall.mat</code>.
# Nutzen Sie ein [[Arduino:_Ultraschallsensor_entstören|Tiefpassfilter]], um das Messwertrauschen während der Laufzeit in Echtzeit zu entstören.
# Nutzen Sie ein [[Arduino:_Ultraschallsensor_entstören|Tiefpassfilter]], um das Messwertrauschen zu entstören.
# Ein Ampelmodul zeigt die Entfernung an.
# Ein Ampelmodul zeigt die Entfernung an.
# Sichern Sie nach 30&thinsp;s Laufzeit Ihre Messwerte <code>Zeit</code> in s, <code>Distanz</code> in cm und die gefilterten Werte <code>DistanzTP</code> in der Datei <code>Ultraschall.mat</code>.
{| class="wikitable"
{| class="wikitable"
|-
|-
Zeile 166: Zeile 123:
|}
|}


'''Arbeitsergebnis:''' <code>messeUltraschallEntfernung.m</code>
'''Arbeitsergebnis:''' <code>messeUSEntfernung.m</code>
 
 
 
----
----
→ zurück zum Hauptartikel: [[BSE Angewandte Informatik - SoSe26]]
→ zurück zum Hauptartikel: [[BSE Angewandte Informatik - SoSe26]]

Aktuelle Version vom 20. April 2026, 10:19 Uhr

Autor: Prof. Dr.-Ing. Schneider
Modul Business and Systems Engineering, Angewandte Mathematik und Informatik, Übung, Sommersemester
Modulbezeichnung: BSE-M-2-1.09

Inhalt

  • Aussendung und Empfang von Ultraschallimpulsen mit MATLAB®
  • Ansteuerung einer LED
  • Entfernungsmessung mittels Ultraschall
  • Messwertanalyse mit MATLAB
  • Messwertfilterung in Echtzeit
  • Auslegung von Filterparameter
  • Ergebnisdarstellung
  • Schwellwertbetrachtung und Anzeige mit Ampelmodul

Lernziele

Nach Durchführung dieser Lektion können Sie

  • die Funktion eines Ultraschallsensors erläutern.
  • die Vor- und Nachteile der Entfernungsmessung mit Ultraschall erläutern.
  • mit einem Ultraschallsensors Entfernungen messen.
  • Messdaten charakterisieren und anzeigen.
  • reale Messwerte speichern und via MATLAB® zyklisch visualisieren.
  • ein rekursives Tiefpassfilter programmiert und parametrieren.
  • eine Funktion in MATLAB® programmieren und aufrufen.
  • LEDs und das Ampelmodul ansteuern.

Vorbereitung

Erlernen Sie die Funktion des Ultraschallsensors und eines rekursiven Tiefpassfilters anhand der verlinkten Fachartikeln und Literatur.

Tutorial

Demos

Aufgabe 4: Entfernungsmessung mit Ultraschall

  1. Lesen Sie die Messwerte des Ultraschallsensor ein [1].
  2. Eine rote LED signalisiert den Programmstart.
  3. Zeigen Sie die Distanzwerte in cm über der Zeit an.
  4. Nutzen Sie ein Tiefpassfilter, um das Messwertrauschen während der Laufzeit in Echtzeit zu entstören.
  5. Ein Ampelmodul zeigt die Entfernung an.
  6. Sichern Sie nach 30 s Laufzeit Ihre Messwerte Zeit in s, Distanz in cm und die gefilterten Werte DistanzTP in der Datei Ultraschall.mat.
Entfernung Farbe
x > 20 cm grün
10 cm < x < 20 cm gelb
x < 10 cm rot rot

Arbeitsergebnis: messeUSEntfernung.m



→ zurück zum Hauptartikel: BSE Angewandte Informatik - SoSe26