4 – Mit Ultraschallsensor Hindernisse erkennen
Mit Ultraschallsensor Hindernisse erkennen
Das lernst du hier
Lasse einen Fahrroboter seine Umgebung mit einem Ultraschallsensor ausmessen und Hindernissen ausweichen.
Den Ultraschallsensor einbauen
Wie geht das?
Für den Einbau des Ultraschallsensors und des optionalen Servos gehe auf diese Seite PGLU > BAU > ARDUINO ROBOTER oder schaue dieses Video
Verstehe auch hier, wie der Sensor angeschlossen wird:
Zeige eine gemessene Distanz mit Neopixeln
Wie geht das?
Der Ultraschallsensor wird mit einem Unterprogramm programmiert, welches die Zeit misst, die ein gesendetes Signal benötigt, bis es vom Sensor wieder gehört wird. Messe mit dem Ultraschallsensor eine Distanz und zeige sie mit einem Neopixel Stripe/Matrix an.
Näheres findest du unter: workshop.pglu.ch > Sensor > Ultraschallsensor
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</variable><variable id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</variable></variables><block type="basic_comment" id="?EFy^;$AARX~}$NQ@bj=" x="615" y="-590"><field name="COMMENT">Setze diese Blöcke in den Hauptloop ein&#10;Steuere mit der gemessenen Distanz in cm die Pixel (oder die Anzahl Pixel) die leuchten sollen.&#10;Mit der Multiplikation (x 0.16) kannst du den Messwert in cm auf die Anzahl möglicher Pixel skalieren (hier 16)! </field></block><block type="set_neo_pixel" id="cf+eTN?_I-9/UhwC99ND" x="614" y="-472"><value name="NUM_LEDS"><block type="math_number" id="c2,-Q-nU-s=r0@oG3|.+"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id=".7-288d1G/W$sM~kPnIC"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="?ZVZOY{x)=;%MXJY;YI`"><field name="LED">LED1</field></block></value></block><block type="basic_comment" id="Evw+oP?O(8dgr{Ovi@@K" x="-320" y="-341"><field name="COMMENT">Diese Funktion kannst du mit einem Rechtsklick zusammenfalten. Sie muss nie geändert werden</field></block><block type="basic_main_loop" id="yz(jk1ohuie3{eM082X7" deletable="false" x="615" y="-385"><value name="BLINK"><block type="basic_blinkcode" id="x4ome(KF{D]/gsL8l-}R"><field name="SHORT">1</field><field name="LONG">1</field></block></value></block><block type="procedures_defreturn" id="X*9Bbi%?J)yy1A0,eY)%" x="-321" y="-280"><field name="NAME">Gemessene Distanz in cm</field><statement name="STACK"><block type="led_write_state" id="_J7P+|7X.zF:*1O-/vF_"><value name="LED"><block type="led_pin" id="MaJ-Q:N:k6BNDwE;;Vjc"><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id=",VL$XuA9s?]~T-Wp^1~("><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="[@TYcycsXOuDh/u2]c(w"><value name="DELAY_MICRO"><block type="math_number" id="!~IE3WZnYj|P)0hVjty?"><field name="NUM">2</field></block></value><next><block type="led_write_state" id="3c-^*^J^9KOl`|YmnyUo"><value name="LED"><block type="led_pin" id="-dbdeQ@J|r_r*Xx`5N6("><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id="o3LG4IN}96bI7qG/~u:q"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="~8xP_rW89K[YJ]xMBVZB"><value name="DELAY_MICRO"><block type="math_number" id="k!5P/@3YbBNBOC/8RnPu"><field name="NUM">10</field></block></value><next><block type="led_write_state" id="2;84Lz]_MY(]*an6bbuX"><value name="LED"><block type="led_pin" id="yZ_38:LDC%`}-qs9!#HL"><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id="KB]d|ET7.-RKqeb=Ca;3"><field name="CODE_PIN">LOW</field></block></value><next><block type="variables_set" id="2Q?ih*Ca/!lmTjDok8[f"><field name="VAR" id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</field><value name="VALUE"><block type="code_pin" id="*1EUi5Xb[HW!+J9a3N9C"><field name="CODE_PIN">pulseIn(16, HIGH)</field></block></value><next><block type="flow_delay" id="+%ceDPGCdsP1bmb4jPA1"><value name="DELAY"><block type="math_number" id="ppFVrF$;AHI:q1N9rH#N"><field name="NUM">5</field></block></value><next><block type="variables_set" id="^^#D3c@|tS(3]zxatnTI"><field name="VAR" id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</field><value name="VALUE"><block type="math_arithmetic" id="Zz]F0P,VWB(nt/;BX7Rw"><field name="OP">MULTIPLY</field><value name="A"><block type="variables_get" id="D_s2L~b-kTe3:D]#27[C"><field name="VAR" id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</field></block></value><value name="B"><block type="math_number" id="0J@IlKj[fbutvl*ga7nl"><field name="NUM">0.0175</field></block></value></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement><value name="RETURN"><block type="variables_get" id="fuVfaNxXyPJ;#)b-Cfqc"><field name="VAR" id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</field></block></value></block><block type="basic_comment" id="UCxvT]EG9LDw`2lQqxOH" x="-29" y="-244"><field name="COMMENT">Ausschalten des Senders (Bereitschaftsmodus)</field></block><block type="procedures_callreturn" id="dQ%;i:TIiC.P]k`cE?QB" x="613" y="-268"><mutation name="Gemessene Distanz in cm"></mutation></block><block type="basic_comment" id="H0$!s{XUp~3IRKP?CRQ," x="-31" y="-162"><field name="COMMENT">Einschalten des Senders (Start Signalton)</field></block><block type="set_pixel_color" id="190)]UtP5bb7/Y{+D4.V" x="616" y="-192"><field name="MODE">MODE1</field><value name="FROM"><block type="math_number" id="!9b3d8v.Jv;Oi}hEK9E6"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="%3,9x~B7wX,B;:}zoc]["><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="`QP=,$*pun8h#^hfT4rA"><field name="NUM">120</field></block></value><value name="S"><block type="math_number" id="])2~e}krwuNe%EB##dxq"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="lxtrP@W2e7x;1i:KzN6g"><field name="NUM">100</field></block></value></block><block type="basic_comment" id="/)@{z45X^sStjoRF(^h2" x="-29" y="-83"><field name="COMMENT">Ausschalten des Senders (Ende Signalton)</field></block><block type="math_arithmetic" id="xCHE@YWl{g;9cT(sa`2N" x="614" y="-101"><field name="OP">MULTIPLY</field><value name="B"><block type="math_number" id="cVAqU_/Z17~hdNLNnM6]"><field name="NUM">0.16</field></block></value></block><block type="basic_comment" id="hGw1f[}U`Qd;_=KLUQez" x="96" y="-46"><field name="COMMENT">Messe Länge Antwort-Impuls</field></block><block type="basic_comment" id="9)sNUK(U+g`o^eXg]d0N" x="223" y="30"><field name="COMMENT">Berechne aus der Länge des Antwort-Impulses die Distanz in cm</field></block></xml>
Mögliche Lösung:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</variable><variable id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</variable></variables><block type="basic_comment" id="?EFy^;$AARX~}$NQ@bj=" x="615" y="-590"><field name="COMMENT">Setze diese Blöcke in den Hauptloop ein&#10;Steuere mit der gemessenen Distanz in cm die Pixel (oder die Anzahl Pixel) die leuchten sollen.&#10;Mit der Multiplikation (x 0.16) kannst du den Messwert in cm auf die Anzahl möglicher Pixel skalieren (hier 16)! </field></block><block type="set_neo_pixel" id="cf+eTN?_I-9/UhwC99ND" x="614" y="-472"><value name="NUM_LEDS"><block type="math_number" id="c2,-Q-nU-s=r0@oG3|.+"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id=".7-288d1G/W$sM~kPnIC"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="9Us*O3,Bin~4CzAmKQd9"><field name="LED">LED1</field></block></value></block><block type="basic_comment" id="Evw+oP?O(8dgr{Ovi@@K" x="-320" y="-341"><field name="COMMENT">Diese Funktion kannst du mit einem Rechtsklick zusammenfalten. Sie muss nie geändert werden</field></block><block type="basic_main_loop" id="yz(jk1ohuie3{eM082X7" deletable="false" x="615" y="-385"><value name="BLINK"><block type="basic_blinkcode" id="x4ome(KF{D]/gsL8l-}R"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="set_pixel_color" id="190)]UtP5bb7/Y{+D4.V"><field name="MODE">MODE1</field><value name="FROM"><block type="math_arithmetic" id="xCHE@YWl{g;9cT(sa`2N"><field name="OP">MULTIPLY</field><value name="A"><block type="procedures_callreturn" id="dQ%;i:TIiC.P]k`cE?QB"><mutation name="Gemessene Distanz in cm"></mutation></block></value><value name="B"><block type="math_number" id="cVAqU_/Z17~hdNLNnM6]"><field name="NUM">0.16</field></block></value></block></value><value name="TO"><block type="math_number" id="%3,9x~B7wX,B;:}zoc]["><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="`QP=,$*pun8h#^hfT4rA"><field name="NUM">120</field></block></value><value name="S"><block type="math_number" id="])2~e}krwuNe%EB##dxq"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="lxtrP@W2e7x;1i:KzN6g"><field name="NUM">100</field></block></value></block></statement></block><block type="procedures_defreturn" id="X*9Bbi%?J)yy1A0,eY)%" x="-321" y="-280"><field name="NAME">Gemessene Distanz in cm</field><statement name="STACK"><block type="led_write_state" id="_J7P+|7X.zF:*1O-/vF_"><value name="LED"><block type="led_pin" id="MaJ-Q:N:k6BNDwE;;Vjc"><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id=",VL$XuA9s?]~T-Wp^1~("><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="[@TYcycsXOuDh/u2]c(w"><value name="DELAY_MICRO"><block type="math_number" id="!~IE3WZnYj|P)0hVjty?"><field name="NUM">2</field></block></value><next><block type="led_write_state" id="3c-^*^J^9KOl`|YmnyUo"><value name="LED"><block type="led_pin" id="-dbdeQ@J|r_r*Xx`5N6("><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id="o3LG4IN}96bI7qG/~u:q"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="~8xP_rW89K[YJ]xMBVZB"><value name="DELAY_MICRO"><block type="math_number" id="k!5P/@3YbBNBOC/8RnPu"><field name="NUM">10</field></block></value><next><block type="led_write_state" id="2;84Lz]_MY(]*an6bbuX"><value name="LED"><block type="led_pin" id="yZ_38:LDC%`}-qs9!#HL"><field name="LED">LED3</field></block></value><value name="VALUE"><block type="code_pin" id="KB]d|ET7.-RKqeb=Ca;3"><field name="CODE_PIN">LOW</field></block></value><next><block type="variables_set" id="2Q?ih*Ca/!lmTjDok8[f"><field name="VAR" id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</field><value name="VALUE"><block type="code_pin" id="*1EUi5Xb[HW!+J9a3N9C"><field name="CODE_PIN">pulseIn(16, HIGH)</field></block></value><next><block type="flow_delay" id="+%ceDPGCdsP1bmb4jPA1"><value name="DELAY"><block type="math_number" id="ppFVrF$;AHI:q1N9rH#N"><field name="NUM">5</field></block></value><next><block type="variables_set" id="^^#D3c@|tS(3]zxatnTI"><field name="VAR" id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</field><value name="VALUE"><block type="math_arithmetic" id="Zz]F0P,VWB(nt/;BX7Rw"><field name="OP">MULTIPLY</field><value name="A"><block type="variables_get" id="D_s2L~b-kTe3:D]#27[C"><field name="VAR" id="1JJcbjQvN7M}DrfgbJx]">Verstrichene Zeit</field></block></value><value name="B"><block type="math_number" id="0J@IlKj[fbutvl*ga7nl"><field name="NUM">0.0175</field></block></value></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement><value name="RETURN"><block type="variables_get" id="fuVfaNxXyPJ;#)b-Cfqc"><field name="VAR" id="bLh6%Kus6UtXUDTn0)wO">Distanz in cm</field></block></value></block><block type="basic_comment" id="UCxvT]EG9LDw`2lQqxOH" x="-29" y="-244"><field name="COMMENT">Ausschalten des Senders (Bereitschaftsmodus)</field></block><block type="basic_comment" id="H0$!s{XUp~3IRKP?CRQ," x="-31" y="-162"><field name="COMMENT">Einschalten des Senders (Start Signalton)</field></block><block type="basic_comment" id="/)@{z45X^sStjoRF(^h2" x="-29" y="-83"><field name="COMMENT">Ausschalten des Senders (Ende Signalton)</field></block><block type="basic_comment" id="hGw1f[}U`Qd;_=KLUQez" x="96" y="-46"><field name="COMMENT">Messe Länge Antwort-Impuls</field></block><block type="basic_comment" id="9)sNUK(U+g`o^eXg]d0N" x="223" y="30"><field name="COMMENT">Berechne aus der Länge des Antwort-Impulses die Distanz in cm</field></block></xml>
Fahrroboter mit Ultraschallsensor steuern
Wie geht das?
Das Steuern eines Fahrroboters mit einem Ultraschallsensor funktioniert ähnlich, wie das Erkennen von Hindernissen mit einem simplen Tastsensor. Lasse den Roboter von einem Hindernis wegdrehen, sobald der Sensor eine Distanz unter 10cm misst.
Wie das geht, erfährst du unter workshop.pglu.ch > Sensor > Ultraschallsensor. Dort lernst du auch, dass der Roboter noch cleverer gemacht werden kann, indem er den Raum so ausmisst, dass er weiss, ob er links oder rechts mehr Platz hat, um weiterzufahren!
Anforderung:
✓ Erweitert
✓ Erweiterte Anforderung an das Löten
✓ Bauen ohne Werkstatt
✓ Mehrmals bauen und zerlegen
Thema:
> Sensor Aktor
> Programmablauf mit verschachtelten Bedingungen
> Neopixel
> Werte in Variablen speichern
Werkzeug:
> Lötstation
Material:
> Bausatz pglu.ch/shop > Arduino Roboter
> Controller: pglu.ch/shop > Mikrocontroller KOMFORT oder MOTOR
> Sensor: pglu.ch/shop > Sensor > Ultraschallsensor
> Servo: pglu.ch/shop > Servo&Motor > Servo
> Neopixel: pglu.ch/shop > Elektronik > MATRIX
Anleitung Roboter:
> Roboter bauen: pglu.ch > BAU > ARDUINO ROBOTER
> Elektronik anschliessen: pglu.ch > BAU > ARDUINO ROBOTER
> Grundroboter programmieren: pglu.ch > CODING > ARDUINO ROBOTER
Anleitung LED & Neopixel
> Neopixel anschliessen: pglu.ch > BAU > NEOPIXEL
3D-Modell:
> Hier anschauen
Videos:
> Roboter: Ultraschallsensor
> Neopixel Matrix: pglu.ch > CODING > NEOPIXEL
Basics:
> Lernumgebung aufbauen: pglu.ch > ANLEITUNG
> XML in Editor importieren: pglu.ch > ANLEITUNG > EDITOR
Editor:
> Online: mach.pglu.ch
> Teacher’s Box: mach.pglu.box
Erweiterungen:
> Matrix Designer: TTG PROJEKT > NEOPIXEL MATRIX > CODING
> Ultraschallsensor: workshop.pglu.ch > SENSOR
> Weiteres: pglu.ch > HILFREICHE DOKUMENTE
> Erweiterung mit KI: ki-kit.ch