{"id":2801,"date":"2024-06-12T11:34:06","date_gmt":"2024-06-12T09:34:06","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=2801"},"modified":"2024-06-12T23:05:42","modified_gmt":"2024-06-12T21:05:42","slug":"robotwagentje-deel-3-nunchuk","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-deel-3-nunchuk\/","title":{"rendered":"Robotwagentje &#8211; deel 3 &#8211; Nunchuk"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In het <a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-met-nrf24-deel2\/\" data-type=\"post\" data-id=\"2764\">vorige verhaaltje over het robotwagentje<\/a> met de nRF24 maakte ik gebruik van een joystick-module en een joystick-module uit een Play Station 3-controller om de wagen te besturen.<\/p>\n\n\n\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-d05cb3ef wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"202\" height=\"193\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-5.png\" alt=\"\" class=\"wp-image-2802\"\/><\/a><figcaption class=\"wp-element-caption\">Joystick-module<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"329\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-6.png\" alt=\"\" class=\"wp-image-2803\" style=\"width:200px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-6.png 449w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-6-300x220.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-6-425x311.png 425w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/a><figcaption class=\"wp-element-caption\">PS3-joystick<\/figcaption><\/figure>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Wat ik raar vond (ik heb in het verleden vaker met, traditionele joysticks gewerkt) is dat de x en y waarden voor tussenliggende posities (schuin naar links, recht, naar voren of naar achteren) een beetje vreemd zijn. Bijvoorbeeld: voor de stand &#8220;naar rechts-boven&#8221; is in onderstaande afbeelding de x-waarde 1023 en voor de y-waarde 0, terwijl ik eigenlijk x = 768 en y = 256 verwacht, zoals die uit een normale joystick komen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"898\" height=\"700\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-9.png\" alt=\"\" class=\"wp-image-2811\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-9.png 898w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-9-300x234.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-9-768x599.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-9-425x331.png 425w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/a><figcaption class=\"wp-element-caption\">De x- en y-waardes van de joysticks.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Maar &#8230; ik had nog een Nunchuk liggen!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"643\" height=\"1024\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-8-643x1024.png\" alt=\"\" class=\"wp-image-2808\" style=\"width:300px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-8-643x1024.png 643w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-8-188x300.png 188w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-8-768x1223.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-8-345x550.png 345w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-8.png 847w\" sizes=\"auto, (max-width: 643px) 100vw, 643px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Een Nunchuk (eigenlijk <a href=\"https:\/\/en.wikipedia.org\/wiki\/Nunchaku\">oosterse vechtstokken<\/a>) , een uitbreiding van de <a href=\"https:\/\/nl.wikipedia.org\/wiki\/Wii-afstandsbediening\">Wii-mote<\/a> voor de besturing van een Wii spelcomputer, heeft een met de duim bestuurbare analoge joystick, twee met de wijsvinger te bedienen drukknoppen (een C-knop en een Z-knop) en een drie-assige accelerometer. Deze joystick produceert de x- en y-waarden die ik verwacht (wel tussen 0 en 256 en niet tussen 0 en 1024, maar dat is nauwkeurig genoeg)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-14.png\"><img loading=\"lazy\" decoding=\"async\" width=\"964\" height=\"794\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-14.png\" alt=\"\" class=\"wp-image-2823\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-14.png 964w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-14-300x247.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-14-768x633.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-14-425x350.png 425w\" sizes=\"auto, (max-width: 964px) 100vw, 964px\" \/><\/a><figcaption class=\"wp-element-caption\">De x- en y-waardes van de Nunchuk joystick.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Met alleen een joystick kan de wagen acht verschillende richtingen op gestuurd worden, maar zoals je kunt zien zijn er met de Mecanum wielen meer bewegingen uit te voeren. Ik kom, naast de hieronder linker afbeelding getoonde 8, op 18 (t.n.t.) in totaal. Door nu naast de joystick te bewegen ook een van de knoppen in te drukken zijn er dus 24 (8 x 3) bewegingen aan te sturen. Wanneer beide knoppen tegelijk ingedrukt worden komen er nog eens 8 eventuele bewegingen bij! <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"314\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-12-1024x314.png\" alt=\"\" class=\"wp-image-2819\" style=\"width:841px;height:auto\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-12-1024x314.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-12-300x92.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-12-768x235.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-12-425x130.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-12.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">De mogelijke bewegingen (vrijheden). De rode punten tonen de punten waaromheen de wagen draait.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/projects.arduinocontent.cc\/e3231d85-a83d-4381-8148-8a1c7a3a54aa.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nunchuk connector van voren gezien.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In een ver verleden gekocht en toen het stekkertje eraf geknipt om &#8216;m met een Arduino te verbinden. Vier draadjes komen eruit: wit, rood, groen en geel. Ik heb het destijds vast ergens genoteerd, maar nu kon ik dat niet meer vinden: welk draadje is welke aansluiting? Uitproberen dus? <br>Aan de gele en de groene draad zat een 2-pins connector, dus gegokt dat dat de aansluiting voor de I2C (SDA en SCL naar A4 en A5 op de Arduino) zouden kunnen zijn. Dan zou volgen dat de rode de Vcc en de witte de Gnd zouden moeten zijn. En dat klopte gelukkig: ik heb blijkbaar een &#8216;originele&#8217; Nunchuk! De volgende kleurtjes zijn in ieder geval van toepassing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rood &#8211; Vcc<br>Wit &#8211; Gnd<br>Groen &#8211; SDA &#8211; A4 op Arduino<br>Geel &#8211; SCL &#8211; A5 op Arduino<br>En zo wordt de Nunchuk dan ook op een Arduino Nano aangesloten om e.e.a. uit te testen.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n#include &lt;Wire.h&gt;\n#include &lt;ArduinoNunchuk.h&gt;\n\nArduinoNunchuk nunchuk = ArduinoNunchuk();\n\nvoid setup() {\n  Serial.begin(19200);                         \/\/initialize serial\n  nunchuk.init();                              \/\/initialize de nunchuck\n}\n\nvoid loop() { \n  nunchuk.update();                            \/\/haal de gegevens uit de nunchuck         \n  Serial.print(nunchuk.analogX, DEC);          \/\/print de waarden in decimalen\n  Serial.print(&#039; &#039;);\n  Serial.print(nunchuk.analogY, DEC);\n  Serial.print(&#039; &#039;);\n  \/*\n  Serial.print(nunchuk.accelX, DEC);\n  Serial.print(&#039; &#039;);\n  Serial.print(nunchuk.accelY, DEC);\n  Serial.print(&#039; &#039;);\n  Serial.print(nunchuk.accelZ, DEC);\n  Serial.print(&#039; &#039;);\n  *\/\n  Serial.print(nunchuk.zButton, DEC);\n  Serial.print(&#039; &#039;);\n  Serial.println(nunchuk.cButton, DEC);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">De code om de Nunchuk uit te lezen (hierboven) is kort en simpel. De waarde van de Nunchuck worden d.m.v. de functie <strong>nunchuk.update()<\/strong> uitgelezen. Alleen met de x- en y-waarde en die van de twee knoppen wordt doorgegaan. Met de waardes van de accelerometer doen we hier niets, want deze worden niet gebruikt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Het programma van zowel de besturing als van de wagen moet vervolgens aangepast worden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n#include &lt;SPI.h&gt;\n#include &quot;printf.h&quot;\n#include &quot;RF24.h&quot;\n\n#include &lt;Wire.h&gt;\n#include &lt;ArduinoNunchuk.h&gt;\n\nArduinoNunchuk nunchuk = ArduinoNunchuk();\n\nRF24 radio(9,10);\nconst byte rxAddr&#x5B;6] = &quot;00001&quot;;\n\nstruct Data_Package {\n  int valx;\n  int valy;\n  int butz;\n  int butc;\n  };\n\nData_Package data; \/\/Create a variable with the above structure\n\nvoid setup()\n{\n  Serial.begin(9600);\n  Serial.print (&quot;Robotwagen_besturing_2_Nunchuk.ino&quot;);\n  radio.begin();\n  radio.setRetries(15, 15);\n  radio.openWritingPipe (rxAddr);\n  radio.setPALevel(RF24_PA_MIN);\n  radio.stopListening();\n\n  nunchuk.init();                     \/\/initialize de nunchuck\n}\nvoid loop()\n{\n  nunchuk.update();                   \/\/haal de gegevens uit de nunchuck \n  data.valx = nunchuk.analogX;\n  data.valy = nunchuk.analogY;\n  data.butz = nunchuk.zButton;\n  data.butc = nunchuk.cButton;\n  \n  radio.write(&amp;data, sizeof(Data_Package));\n\n  Serial.print(&quot;X = &quot;);\n  Serial.print(data.valx);\n  Serial.print(&#039; &#039;);\n  Serial.print(&quot;Y = &quot;);\n  Serial.println(data.valy);\n  Serial.print(&quot;Z = &quot;);\n  Serial.print(data.butz);\n  Serial.print(&#039; &#039;);\n  Serial.print(&quot;C = &quot;);\n  Serial.println(data.butc);  \n  \n  \/\/delay(500);  \/\/ slow transmissions down by 1\/2 second\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Het hele blok met <strong>Serial.print<\/strong> opdrachten kan er later natuurlijk uit: is alleen maar om te checken of de waardes overeenkomen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In het vorige verhaaltje over het robotwagentje met de nRF24 maakte ik gebruik van een joystick-module en een joystick-module uit een Play Station 3-controller om de wagen te besturen. Wat ik raar vond (ik heb in het verleden vaker met, traditionele joysticks gewerkt) is dat de x en y waarden voor tussenliggende posities (schuin naar links, recht, naar voren of naar achteren) een beetje vreemd zijn. Bijvoorbeeld: voor de stand &#8220;naar rechts-boven&#8221; is in onderstaande afbeelding de x-waarde 1023 en voor de y-waarde 0, terwijl ik eigenlijk x = 768 en y = 256 verwacht, zoals die uit een normale joystick<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-deel-3-nunchuk\/\">Read More &rarr;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[115,3],"tags":[138],"class_list":["entry","author-admin","post-2801","post","type-post","status-publish","format-standard","category-algemeen","category-elektronica","tag-joystick"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/2801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/comments?post=2801"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/2801\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=2801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=2801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=2801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}