1 – Ollie im Groove: TikTok Tanzeinlage mit Servo, Holz oder Karton
Ollie im Groove: TikTok Tanzeinlage mit Servo, Holz oder Karton
Das lernst du hier
Fast wie eine Tanzeinlage auf TikTok: Ob ein Skater mit Rollbrett, eine Fussballerin, die den Ball ins Tor schlenzt oder deine Katze auf dem Sofa zu Hause: sie alle grooven fröhlich in ihren TikTok-Kurzvideos zum Takt eines Musikstücks. Mit Karton oder Holz und einem Servo holst du diese Animationen in die reale Welt!
Was ist ein Servo und was ist ein Soundsensor?
Wie geht das?
Ein Servo ist ein Motor der ziemlich kräftig ist und dessen Position du auf den Millimeter genau einstellen kannst. Mit einem Servohorn und einem Stück Draht kannst du so Dinge bewegen, denn das Servo kann sich im Winkel von bis zu 0° bis 180° drehen. Hier findest du unsere detaillierte Anleitung, wie du ein Servo mit dem Arduino steuerst.
Ein Soundsensor ist ein Mikrofon, welches die Lautstärke von Geräuschen und Musik erkennen kann. Mit dem Arduino wertest du diese aus und entscheidest, was geschehen soll, wenn die Lautstärke eine gewisse Grenze überschreitet. Hier findest du eine Anleitung, wie der Soundsensor angeschlossen und verwendet wird.
Servo und Soundsensor anschliessen
Figur oder Objekt aus Karton oder Holz bauen
Für den Bau der Figur sind deinen Ideen keine Grenzen gesetzt. Entwickle etwas eigenes oder lasse dich im Internet inspirieren – warum nicht die neuste Dance-Challenge aus TikTok als Vorlage verwenden? Dieses Suchwort im klassischen Web bringt dich ebenfalls weiter: Mechanical Automata
Interessant: Die Schweizer Uhrenindustrie hat ihre Wurzeln ebenfalls im Bau von Spielfiguren, die sich zu Musik bewegten, denn im 18 Jahrhundert bauten findige Ingenieure raffinierte Spielzeuge, mit deren Verkauf sich auf der ganzen Welt viel Geld verdienen liess!
Mechanik über Draht mit Servo verbinden
Sobald du dich für ein Thema entschieden hast, gilt es, eine Mechanik zu entwickeln, die ein Teil deiner Figur beweglich macht. Selbstverständlich kannst du hier komplizierte Bewegungsabläufe einbauen aber wir empfehlen, eher mit einfachen Elementen zu starten. Für eine gute Wirkung braucht es manchmal nicht viel!
Hinweis: Schweissdraht eignet sich gut für die Übertragung von Bewegung und um diesen in das Servohorn zu stecken muss er eventuell mit einer Flamme erhitzt werden. Frage deine TTG-Lehrperson!
Servo programmieren und mit Sound steuern
Die Programmierung des Servos ist simpel, denn du kannst das Sound-Signal direkt in einen Winkel umwandeln, indem du es mit 1.8 multiplizierst. Warum ist das so? Weil das Mikrofon Werte zwischen 0% und 100% liefert und das Servo Werte zwischen 0° und 180° benötigt.
Teste das und vergiss nicht, dass du beim Mikrofon die Empflindlichkeit am Regler im blauen Würfel justieren musst. Das geht so.
Wichtig: Wenn Servo und Soundsensor auf dem gleichen Holzbrett montiert sind, wie z.B. auf der BASIS, dann kann die Vibration des Servos das Soundsignal stören. Unterlege Servo und Soundsensor mit einem Sztück Filz oder ähnlich, um diese Übertragung zu dämpfen! Siehe 3D-Modell.
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="PO_osOjF%@GI;(=Y[lS`">Position</variable><variable id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</variable><variable id="K:G4UACKdRDr(dE9O39G">Pause</variable></variables><block type="basic_comment" id="|.$x+yKiz`j-,~[?eRLs" x="-620" y="71"><field name="COMMENT">Unterprogramm Servo</field></block><block type="basic_comment" id="H~UW;?gR9HL56l!+P|SL" x="-309" y="62"><field name="COMMENT">Servo direkt musikgesteuert: setze diese Blöcke in den Hauptloop ein</field></block><block type="procedures_defnoreturn" id="DYYovfp[/{/^ryWHZBvf" collapsed="true" x="-616" y="120"><mutation><arg name="Position" varid="PO_osOjF%@GI;(=Y[lS`"></arg><arg name="Servo Pin" varid="Vw5IBG9C#Pa@r0U!+Bbh"></arg></mutation><field name="NAME">stelle Servo</field><statement name="STACK"><block type="variables_set" id="b*l`jfDpwv@_`yEQ:sQU"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field><value name="VALUE"><block type="math_map" id="wY2I~E@9)6mqH{`4}Min"><value name="VALUE"><block type="variables_get" id="sM%OH#-),/XvNLAfoDgM"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><value name="FROMLOW"><block type="math_number" id="5*[TWQi3eTy;dTNqRejO"><field name="NUM">0</field></block></value><value name="FROMHIGH"><block type="math_number" id="3FohKj*x~t~gZ.sYtS2("><field name="NUM">100</field></block></value><value name="TOLOW"><block type="math_number" id="y+3B7BV,l3#e!tC#zP45"><field name="NUM">600</field></block></value><value name="TOHIGH"><block type="math_number" id="n[XOgoHB+-0i.,Gpwf%1"><field name="NUM">2400</field></block></value></block></value><next><block type="variables_set" id=".xsEB~Y8Qx!^%8P%)mh;"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field><value name="VALUE"><block type="math_arithmetic" id="{F9Honx#=x}}p5s6~3pd"><field name="OP">MINUS</field><value name="A"><block type="math_number" id="nN}B3!9SLvv*1{Zlf(%h"><field name="NUM">20000</field></block></value><value name="B"><block type="variables_get" id="mZbi[2Xx35m9qZ2Wz|b_"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value></block></value><next><block type="flow_repeat" id="gN=t~3M0%R7Pe)/i-V4G"><value name="REPEATS"><block type="math_number" id="+qOr!,*|C9.5wJ[w,ENN"><field name="NUM">10</field></block></value><statement name="DO"><block type="led_write_state" id="6!l6z?iL+={{9KAi,H|9"><value name="LED"><block type="variables_get" id="0L`R`5_!X{Az,9F)`Qac"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="+7pwX/P2*!~K,CbqH7gH"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="Y3736,h2Aea/$FEM%mGd"><value name="DELAY_MICRO"><block type="variables_get" id=")Lg-8viw{x?GWSZtdPfK"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><next><block type="led_write_state" id="=R-dB9$gUgUf[f1#amX?"><value name="LED"><block type="variables_get" id="L{aTSjwfCBro[60WW.0E"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="ZI?r50,S}Q!N4EWcI9rk"><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="7il;NbzoR^Es7say`(zt"><value name="DELAY_MICRO"><block type="variables_get" id="|@!H=EXua/xr-NRDCr5g"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></statement></block><block type="basic_main_loop" id="9~210UV)!{|GniQxFn|[" deletable="false" x="-309" y="120"><value name="BLINK"><block type="basic_blinkcode" id="u@6%knhMhK2g(1JYw[10"><field name="SHORT">1</field><field name="LONG">1</field></block></value></block><block type="procedures_callnoreturn" id="h,f[+#.Bb}Xe`}luH7k@" x="-309" y="247"><mutation name="stelle Servo"><arg name="Position"></arg><arg name="Servo Pin"></arg></mutation><value name="ARG1"><block type="led_pin" id=".q/9|Grs%E++O#5z!HW("><field name="LED">LED2</field></block></value></block><block type="math_arithmetic" id="AM^lel|i1i{!74tfAD*!" x="-314" y="330"><field name="OP">MULTIPLY</field></block><block type="math_number" id="wDK0mcF0xsZT,HTlCnPM" x="-312" y="396"><field name="NUM">1.8</field></block><block type="sensor_read_percentage" id="B.^!1!f$w#%;/m({}jyn" x="-309" y="456"><value name="SENSOR"><block type="sensor_pin" id="3av53jm0D{li!UF;NNQ~"><field name="SENSOR">SENSOR3</field></block></value></block></xml>
Mögliche Lösung:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="PO_osOjF%@GI;(=Y[lS`">Position</variable><variable id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</variable><variable id="K:G4UACKdRDr(dE9O39G">Pause</variable></variables><block type="basic_comment" id="|.$x+yKiz`j-,~[?eRLs" x="-620" y="71"><field name="COMMENT">Unterprogramm Servo</field></block><block type="basic_comment" id="H~UW;?gR9HL56l!+P|SL" x="-309" y="62"><field name="COMMENT">Servo direkt musikgesteuert</field></block><block type="procedures_defnoreturn" id="DYYovfp[/{/^ryWHZBvf" collapsed="true" x="-616" y="120"><mutation><arg name="Position" varid="PO_osOjF%@GI;(=Y[lS`"></arg><arg name="Servo Pin" varid="Vw5IBG9C#Pa@r0U!+Bbh"></arg></mutation><field name="NAME">stelle Servo</field><statement name="STACK"><block type="variables_set" id="b*l`jfDpwv@_`yEQ:sQU"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field><value name="VALUE"><block type="math_map" id="wY2I~E@9)6mqH{`4}Min"><value name="VALUE"><block type="variables_get" id="sM%OH#-),/XvNLAfoDgM"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><value name="FROMLOW"><block type="math_number" id="5*[TWQi3eTy;dTNqRejO"><field name="NUM">0</field></block></value><value name="FROMHIGH"><block type="math_number" id="3FohKj*x~t~gZ.sYtS2("><field name="NUM">100</field></block></value><value name="TOLOW"><block type="math_number" id="y+3B7BV,l3#e!tC#zP45"><field name="NUM">600</field></block></value><value name="TOHIGH"><block type="math_number" id="n[XOgoHB+-0i.,Gpwf%1"><field name="NUM">2400</field></block></value></block></value><next><block type="variables_set" id=".xsEB~Y8Qx!^%8P%)mh;"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field><value name="VALUE"><block type="math_arithmetic" id="{F9Honx#=x}}p5s6~3pd"><field name="OP">MINUS</field><value name="A"><block type="math_number" id="nN}B3!9SLvv*1{Zlf(%h"><field name="NUM">20000</field></block></value><value name="B"><block type="variables_get" id="mZbi[2Xx35m9qZ2Wz|b_"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value></block></value><next><block type="flow_repeat" id="gN=t~3M0%R7Pe)/i-V4G"><value name="REPEATS"><block type="math_number" id="+qOr!,*|C9.5wJ[w,ENN"><field name="NUM">10</field></block></value><statement name="DO"><block type="led_write_state" id="6!l6z?iL+={{9KAi,H|9"><value name="LED"><block type="variables_get" id="0L`R`5_!X{Az,9F)`Qac"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="+7pwX/P2*!~K,CbqH7gH"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="Y3736,h2Aea/$FEM%mGd"><value name="DELAY_MICRO"><block type="variables_get" id=")Lg-8viw{x?GWSZtdPfK"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><next><block type="led_write_state" id="=R-dB9$gUgUf[f1#amX?"><value name="LED"><block type="variables_get" id="L{aTSjwfCBro[60WW.0E"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="ZI?r50,S}Q!N4EWcI9rk"><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="7il;NbzoR^Es7say`(zt"><value name="DELAY_MICRO"><block type="variables_get" id="|@!H=EXua/xr-NRDCr5g"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></statement></block><block type="basic_main_loop" id="9~210UV)!{|GniQxFn|[" deletable="false" x="-309" y="120"><value name="BLINK"><block type="basic_blinkcode" id="u@6%knhMhK2g(1JYw[10"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="procedures_callnoreturn" id="h,f[+#.Bb}Xe`}luH7k@"><mutation name="stelle Servo"><arg name="Position"></arg><arg name="Servo Pin"></arg></mutation><value name="ARG0"><block type="math_arithmetic" id="AM^lel|i1i{!74tfAD*!"><field name="OP">MULTIPLY</field><value name="A"><block type="sensor_read_percentage" id="B.^!1!f$w#%;/m({}jyn"><value name="SENSOR"><block type="sensor_pin" id="3av53jm0D{li!UF;NNQ~"><field name="SENSOR">SENSOR3</field></block></value></block></value><value name="B"><block type="math_number" id="wDK0mcF0xsZT,HTlCnPM"><field name="NUM">1.8</field></block></value></block></value><value name="ARG1"><block type="led_pin" id=".q/9|Grs%E++O#5z!HW("><field name="LED">LED2</field></block></value></block></statement></block></xml>
Die Bewegung mit dieser Programmierung kann ganz schön nervös wirken, denn das Soundsignal wird direkt in einen Winkel umgewandelt. Je nachdem, ob du einen zusätzlichen ELKO am Soundsensor angeschlossen hast oder nicht, lässt sich dieses schwieriger kontrollieren.
Einen interessanteren Effekt erreichst du, indem du mit einem Zufallsgenerator arbeitest: Immer wenn die Lautstärke eine gewisse Schwelle überschreitet, z.B. 60%, fährt das Servo an eine Zufallsposition zwischen 0° und 180°. Eine Pause des Programms nach jeder Bewegung sorgt dafür, dass die Bewegung ruhiger wird.
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="PO_osOjF%@GI;(=Y[lS`">Position</variable><variable id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</variable><variable id="K:G4UACKdRDr(dE9O39G">Pause</variable></variables><block type="basic_comment" id="|.$x+yKiz`j-,~[?eRLs" x="-620" y="30"><field name="COMMENT">Unterprogramm Servo</field></block><block type="basic_comment" id="H~UW;?gR9HL56l!+P|SL" x="-326" y="29"><field name="COMMENT">Servo musikgesteuert</field></block><block type="procedures_defnoreturn" id="DYYovfp[/{/^ryWHZBvf" collapsed="true" x="-619" y="91"><mutation><arg name="Position" varid="PO_osOjF%@GI;(=Y[lS`"></arg><arg name="Servo Pin" varid="Vw5IBG9C#Pa@r0U!+Bbh"></arg></mutation><field name="NAME">stelle Servo</field><statement name="STACK"><block type="variables_set" id="b*l`jfDpwv@_`yEQ:sQU"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field><value name="VALUE"><block type="math_map" id="wY2I~E@9)6mqH{`4}Min"><value name="VALUE"><block type="variables_get" id="sM%OH#-),/XvNLAfoDgM"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><value name="FROMLOW"><block type="math_number" id="5*[TWQi3eTy;dTNqRejO"><field name="NUM">0</field></block></value><value name="FROMHIGH"><block type="math_number" id="3FohKj*x~t~gZ.sYtS2("><field name="NUM">100</field></block></value><value name="TOLOW"><block type="math_number" id="y+3B7BV,l3#e!tC#zP45"><field name="NUM">600</field></block></value><value name="TOHIGH"><block type="math_number" id="n[XOgoHB+-0i.,Gpwf%1"><field name="NUM">2400</field></block></value></block></value><next><block type="variables_set" id=".xsEB~Y8Qx!^%8P%)mh;"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field><value name="VALUE"><block type="math_arithmetic" id="{F9Honx#=x}}p5s6~3pd"><field name="OP">MINUS</field><value name="A"><block type="math_number" id="nN}B3!9SLvv*1{Zlf(%h"><field name="NUM">20000</field></block></value><value name="B"><block type="variables_get" id="mZbi[2Xx35m9qZ2Wz|b_"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value></block></value><next><block type="flow_repeat" id="gN=t~3M0%R7Pe)/i-V4G"><value name="REPEATS"><block type="math_number" id="+qOr!,*|C9.5wJ[w,ENN"><field name="NUM">10</field></block></value><statement name="DO"><block type="led_write_state" id="6!l6z?iL+={{9KAi,H|9"><value name="LED"><block type="variables_get" id="0L`R`5_!X{Az,9F)`Qac"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="+7pwX/P2*!~K,CbqH7gH"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="Y3736,h2Aea/$FEM%mGd"><value name="DELAY_MICRO"><block type="variables_get" id=")Lg-8viw{x?GWSZtdPfK"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><next><block type="led_write_state" id="=R-dB9$gUgUf[f1#amX?"><value name="LED"><block type="variables_get" id="L{aTSjwfCBro[60WW.0E"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="ZI?r50,S}Q!N4EWcI9rk"><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="7il;NbzoR^Es7say`(zt"><value name="DELAY_MICRO"><block type="variables_get" id="|@!H=EXua/xr-NRDCr5g"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></statement></block><block type="basic_main_loop" id="9~210UV)!{|GniQxFn|[" deletable="false" x="-323" y="90"><value name="BLINK"><block type="basic_blinkcode" id="u@6%knhMhK2g(1JYw[10"><field name="SHORT">1</field><field name="LONG">1</field></block></value></block><block type="sensor_read_percentage" id="B.^!1!f$w#%;/m({}jyn" x="-323" y="197"><value name="SENSOR"><block type="sensor_pin" id="3av53jm0D{li!UF;NNQ~"><field name="SENSOR">SENSOR3</field></block></value></block><block type="math_random_int" id="AohNO2k$Kc(iQ5S7vkdP" x="-324" y="272"><value name="FROM"><block type="math_number" id=":ra=tn;t5cvMDd8(3,32"><field name="NUM">0</field></block></value><value name="TO"><block type="math_number" id="qP$rSrRhUvu;%D,%otxq"><field name="NUM">180</field></block></value></block><block type="logic_if" id="uH*uZP.$Tm.@q5$jDnLD" x="-313" y="348"><value name="IF0"><block type="logic_compare" id="Pm(Wis+D=v?g_{T[JniI"><field name="OP">GT</field><value name="B"><block type="math_number" id="7}[IgORyx920D4@*L+Ge"><field name="NUM">60</field></block></value></block></value></block><block type="procedures_callnoreturn" id="h,f[+#.Bb}Xe`}luH7k@" x="-313" y="463"><mutation name="stelle Servo"><arg name="Position"></arg><arg name="Servo Pin"></arg></mutation><value name="ARG1"><block type="led_pin" id=".q/9|Grs%E++O#5z!HW("><field name="LED">LED2</field></block></value></block><block type="flow_delay" id="r0mfJ96$=8,(?tnc]Iz6" x="-313" y="541"><value name="DELAY"><block type="math_number" id="eo$U^)UCNq1*,_i)5=c2"><field name="NUM">200</field></block></value></block></xml>
Mögliche Lösung:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="PO_osOjF%@GI;(=Y[lS`">Position</variable><variable id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</variable><variable id="K:G4UACKdRDr(dE9O39G">Pause</variable></variables><block type="basic_comment" id="|.$x+yKiz`j-,~[?eRLs" x="-620" y="71"><field name="COMMENT">Unterprogramm Servo</field></block><block type="basic_comment" id="H~UW;?gR9HL56l!+P|SL" x="-309" y="62"><field name="COMMENT">Servo musikgesteuert</field></block><block type="procedures_defnoreturn" id="DYYovfp[/{/^ryWHZBvf" collapsed="true" x="-616" y="120"><mutation><arg name="Position" varid="PO_osOjF%@GI;(=Y[lS`"></arg><arg name="Servo Pin" varid="Vw5IBG9C#Pa@r0U!+Bbh"></arg></mutation><field name="NAME">stelle Servo</field><statement name="STACK"><block type="variables_set" id="b*l`jfDpwv@_`yEQ:sQU"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field><value name="VALUE"><block type="math_map" id="wY2I~E@9)6mqH{`4}Min"><value name="VALUE"><block type="variables_get" id="sM%OH#-),/XvNLAfoDgM"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><value name="FROMLOW"><block type="math_number" id="5*[TWQi3eTy;dTNqRejO"><field name="NUM">0</field></block></value><value name="FROMHIGH"><block type="math_number" id="3FohKj*x~t~gZ.sYtS2("><field name="NUM">100</field></block></value><value name="TOLOW"><block type="math_number" id="y+3B7BV,l3#e!tC#zP45"><field name="NUM">600</field></block></value><value name="TOHIGH"><block type="math_number" id="n[XOgoHB+-0i.,Gpwf%1"><field name="NUM">2400</field></block></value></block></value><next><block type="variables_set" id=".xsEB~Y8Qx!^%8P%)mh;"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field><value name="VALUE"><block type="math_arithmetic" id="{F9Honx#=x}}p5s6~3pd"><field name="OP">MINUS</field><value name="A"><block type="math_number" id="nN}B3!9SLvv*1{Zlf(%h"><field name="NUM">20000</field></block></value><value name="B"><block type="variables_get" id="mZbi[2Xx35m9qZ2Wz|b_"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value></block></value><next><block type="flow_repeat" id="gN=t~3M0%R7Pe)/i-V4G"><value name="REPEATS"><block type="math_number" id="+qOr!,*|C9.5wJ[w,ENN"><field name="NUM">10</field></block></value><statement name="DO"><block type="led_write_state" id="6!l6z?iL+={{9KAi,H|9"><value name="LED"><block type="variables_get" id="0L`R`5_!X{Az,9F)`Qac"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="+7pwX/P2*!~K,CbqH7gH"><field name="CODE_PIN">HIGH</field></block></value><next><block type="flow_delay_micro" id="Y3736,h2Aea/$FEM%mGd"><value name="DELAY_MICRO"><block type="variables_get" id=")Lg-8viw{x?GWSZtdPfK"><field name="VAR" id="PO_osOjF%@GI;(=Y[lS`">Position</field></block></value><next><block type="led_write_state" id="=R-dB9$gUgUf[f1#amX?"><value name="LED"><block type="variables_get" id="L{aTSjwfCBro[60WW.0E"><field name="VAR" id="Vw5IBG9C#Pa@r0U!+Bbh">Servo Pin</field></block></value><value name="VALUE"><block type="code_pin" id="ZI?r50,S}Q!N4EWcI9rk"><field name="CODE_PIN">LOW</field></block></value><next><block type="flow_delay_micro" id="7il;NbzoR^Es7say`(zt"><value name="DELAY_MICRO"><block type="variables_get" id="|@!H=EXua/xr-NRDCr5g"><field name="VAR" id="K:G4UACKdRDr(dE9O39G">Pause</field></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></statement></block><block type="basic_main_loop" id="9~210UV)!{|GniQxFn|[" deletable="false" x="-309" y="120"><value name="BLINK"><block type="basic_blinkcode" id="u@6%knhMhK2g(1JYw[10"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="logic_if" id="uH*uZP.$Tm.@q5$jDnLD"><value name="IF0"><block type="logic_compare" id="Pm(Wis+D=v?g_{T[JniI"><field name="OP">GT</field><value name="A"><block type="sensor_read_percentage" id="B.^!1!f$w#%;/m({}jyn"><value name="SENSOR"><block type="sensor_pin" id="3av53jm0D{li!UF;NNQ~"><field name="SENSOR">SENSOR3</field></block></value></block></value><value name="B"><block type="math_number" id="7}[IgORyx920D4@*L+Ge"><field name="NUM">60</field></block></value></block></value><statement name="DO0"><block type="procedures_callnoreturn" id="h,f[+#.Bb}Xe`}luH7k@"><mutation name="stelle Servo"><arg name="Position"></arg><arg name="Servo Pin"></arg></mutation><value name="ARG0"><block type="math_random_int" id="AohNO2k$Kc(iQ5S7vkdP"><value name="FROM"><block type="math_number" id=":ra=tn;t5cvMDd8(3,32"><field name="NUM">0</field></block></value><value name="TO"><block type="math_number" id="qP$rSrRhUvu;%D,%otxq"><field name="NUM">180</field></block></value></block></value><value name="ARG1"><block type="led_pin" id=".q/9|Grs%E++O#5z!HW("><field name="LED">LED2</field></block></value><next><block type="flow_delay" id="r0mfJ96$=8,(?tnc]Iz6"><value name="DELAY"><block type="math_number" id="eo$U^)UCNq1*,_i)5=c2"><field name="NUM">200</field></block></value></block></next></block></statement></block></statement></block></xml>
Weitere Challenges:
Experimentiere mit der Dauer der Pause und passe den Effekt an deine Lieblingsmusik an, denn nicht jeder Musikstil eignet sich gleich für dieses Programm. Die Servosteuerung Stelle Servo sanft eröffnet dir noch weitere Möglichkeiten. Teste sie.
Du hast eine Neopixel Matrix zur Hand? Ergänze deine Figur mit Lichteffekten, die zur Musik passen!
Anforderung:
✓ Einfach & lötfrei
✓ Bauen (fast) ohne Werkstatt
Thema:
> Mechanik
> Gestaltung einer Figur und einer Animation
> Sound als Signal verwenden
> Servo programmieren
Werkzeug:
> Lötstation
> Schere, Cutter, Zangen
> Bei Holz: Dekupiersäge
> Optional: Lasercutter (hier geht’s zur Vorlage)
Material:
> Controller: pglu.ch/shop > Mikrocontroller KOMFORT mit BASIS
> Servo: pglu.ch/shop > Elektronik > Servo
> Soundsensor: pglu.ch/shop > Elektronik > Mikrofon
> Holz oder Karton
Anleitungen:
> Servo programmieren: workshop.pglu.ch > Aktor > Servo
> Soundsensor programmieren: workshop.pglu.ch > Sensor > Mikrofon
3D-Modell:
> Hier anschauen
Videos:
> Vimeo: pglu.ch
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