{"id":2764,"date":"2024-06-02T22:19:08","date_gmt":"2024-06-02T20:19:08","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=2764"},"modified":"2024-06-12T11:34:46","modified_gmt":"2024-06-12T09:34:46","slug":"robotwagentje-met-nrf24-deel2","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-met-nrf24-deel2\/","title":{"rendered":"Robotwagentje &#8211; deel2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In het <a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-met-nrf24l01-radiomodule\/\" data-type=\"post\" data-id=\"1893\">eerste deel<\/a>, september vorig jaar, heb ik beschreven wat ik wilde maken. Ik had toen nog niet alle motoren in huis, maar die zijn inmiddels lang geleden ontvangen. Vandaag ben ik er weer mee verder gegaan. Hieronder daarvan verslag: de uitvoering en de Arduino-code.<\/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-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"747\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-2.png\" alt=\"\" class=\"wp-image-2767\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-2.png 700w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-2-281x300.png 281w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-2-425x454.png 425w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><figcaption class=\"wp-element-caption\">Besturing<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hierboven de Arduino Nano met nRF24- en de joystickmodule die samen de afstandsbediening vormen. <\/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-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"849\" height=\"874\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-1.png\" alt=\"\" class=\"wp-image-2766\" style=\"width:400px;height:auto\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-1.png 849w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-1-291x300.png 291w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-1-768x791.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-1-425x438.png 425w\" sizes=\"auto, (max-width: 849px) 100vw, 849px\" \/><\/a><figcaption class=\"wp-element-caption\">Wagentje: mecanum-wielen en Totem chassis &#8230;<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En dan de robotwagen zelf. De mecanumwielen zijn gemarkeerd: L en R. Hierboven de L-gemarkeerde links en de R-gemarkeerde rechts geplaatst. Maar &#8230;. dan werkt het niet zoals het moet. <\/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\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"757\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded-1024x757.jpg\" alt=\"\" class=\"wp-image-2794\" style=\"width:500px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded-1024x757.jpg 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded-300x222.jpg 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded-768x568.jpg 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded-425x314.jpg 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/Afbeelding-van-WhatsApp-op-2024-06-07-om-12.36.58_05cc6ded.jpg 1464w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hierboven de wielen geplaatst zoals het wel goed werkt. Aan de voorkant (boven in het plaatje) is het L-wiel links en het R-wiel rechts geplaatst. De achterwielen (dus onder in het plaatje) zijn onderling gewisseld: het R-wiel is links en het L-wiel is rechts geplaatst. Hiermee liggen alle zwarte rolletjes in de wielen overeenkomstig het schematische plaatje dat ook al in het vorige deel geplaatst is: zie hieronder.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"552\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-4-1024x552.png\" alt=\"\" class=\"wp-image-2797\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4-1024x552.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4-300x162.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4-768x414.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4-1536x828.png 1536w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4-425x229.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-4.png 1819w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\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.png\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"1024\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-800x1024.png\" alt=\"\" class=\"wp-image-2765\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-800x1024.png 800w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-234x300.png 234w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-768x983.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-425x544.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image.png 819w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><figcaption class=\"wp-element-caption\">De robotwagen &#8211; schema met de verbindingen<\/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-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"748\" height=\"667\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/06\/image-3.png\" alt=\"\" class=\"wp-image-2787\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-3.png 748w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-3-300x268.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/06\/image-3-425x379.png 425w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><\/a><figcaption class=\"wp-element-caption\">Schema van de besturing met verbindingen<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Het bovenste deel van bovenstaand schema (waar de aansluitingen tussen de nRF24-module en de Arduino Nano uitgewerkt is) is van toepassing zowel op de besturingsmodule als op de wagen. Op de robotwagen is het de ontvanger, op de besturingsmodule de zender.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Software<\/strong><br>Het aansturen van die radio-modules is eigenlijk heel simpel met de <a href=\"https:\/\/www.arduino.cc\/reference\/en\/libraries\/rf24\/\">RF24-library<\/a>. Er is maar weinig code voor nodig.<\/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\nRF24 radio(9,10);\nconst byte rxAddr&#x5B;6] = &quot;00001&quot;;\n\nstruct Data_Package {\n  int valx;\n  int valy;\n  \/\/ byte j1Button;\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.ino&quot;);\n  radio.begin();\n  radio.setRetries(15, 15);\n  radio.openWritingPipe (rxAddr);\n  radio.setPALevel(RF24_PA_MIN);\n  radio.stopListening();\n}\nvoid loop()\n{\n  \/\/const char text&#x5B;] = &quot;Hello world&quot;;\n  data.valx = analogRead(A0);\n  data.valy = analogRead(A1);\n  \n  radio.write(&amp;data, sizeof(Data_Package));\n\n  \/\/Serial.print(&quot;X = &quot;);\n  \/\/Serial.print(data.valx);\n  \/\/Serial.print(&quot;                  Y = &quot;);\n  \/\/Serial.println(data.valy);\n  \n  \/\/delay(1000);  \/\/ slow transmissions down by 1 second\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Nieuw voor mij was het <strong>struct<\/strong>-concept: het aanmaken van een pakketje te verzenden waardes. Aan de versturende kant en aan de ontvangende kant wordt die structuur bepaald en bekend gemaakt.<br>Hierboven zie je dat de struct &#8220;Data_Package&#8221; aangemaakt wordt voor opname van de x- en y-waarde van de joystick (evt. later nog aan te vullen met het resultaat van ingedrukte knoppen), dat de joystick vervolgens uitgelezen wordt (<strong><em>analogRead<\/em><\/strong>) en dat deze waardes in de &#8220;Data_Package&#8221; opgenomen worden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nstruct Data_Package {\n  int valx;\n  int valy;\n  \/\/ byte Button1;\n};\n\nData_Package data; \/\/Create a variable with the above structure\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Het pakketje wordt vervolgens door de nRF verstuurd: <strong><em>radio.write (&amp;data, sizeof(Data_Package))<\/em><\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/*\n *\n  DRV8833-Dual-Motor-Driver-Module\n*\/\n\n#include &lt;RF24.h&gt;\n#include &lt;SPI.h&gt;\n\n\/\/ 1e DRV8833 - fysiek rechts op de wagen\n#define mLA2 2        \/\/ AIN1     motorLinksVoor1\n#define mLA1 3        \/\/ AIN2     motorLinksVoor2\n\n#define mRA2 4        \/\/ BIN1     motorRechtsVoor1\n#define mRA1 5        \/\/ BIN2     motorRechtsVoor2\n\n\/\/ 2e DRV8833 - fysiek links op de wagen\n#define mLV2 A0        \/\/ AIN1     motorLinksAchter1\n#define mLV1 A1        \/\/ AIN2     motorLinksAchter2\n\n#define mRV2 A2        \/\/ BIN1     motorRechtsAchter1\n#define mRV1 A3        \/\/ BIN2     motorRechtsAchter2\n\nRF24 radio(9,10);\nconst byte rxAddr&#x5B;6] = &quot;00001&quot;;\n\nstruct Data_Package {\n  int valx;\n  int valy;\n  \/\/ byte Button1;\n};\n\nData_Package data; \/\/Create a variable with the above structure\n\nvoid setup() {\n  SPI.begin();\n  Serial.begin(9600);\n  Serial.println (&quot;Robotwagen_3.ino&quot;);\n\n  radio.begin();\n  radio.openReadingPipe(0, rxAddr);\n  radio.setPALevel(RF24_PA_MIN);\n  radio.startListening();\n  \n  pinMode(mLV1,OUTPUT);\n  pinMode(mLV2,OUTPUT);\n  \n  pinMode(mRV1,OUTPUT);\n  pinMode(mRV1,OUTPUT);\n  \n  pinMode(mLA1,OUTPUT);\n  pinMode(mLA2,OUTPUT);\n  \n  pinMode(mRA1,OUTPUT);\n  pinMode(mRA1,OUTPUT);\n}\n\nvoid loop() {\n\n  if (radio.available())\n  {\n    char text&#x5B;32] = &quot;&quot;;\n    radio.read(&amp;data, sizeof(Data_Package));\n\n      Serial.print (&quot;x waarde is &quot;);\n      Serial.println (data.valx);\n      Serial.print (&quot;y waarde is &quot;);\n      Serial.println (data.valy);\n     \n  if (data.valx &gt;= 384 &amp;&amp; data.valx &lt;= 640 &amp;&amp; data.valy &lt;= 128){\n    Serial.println (&quot;Vooruit!&quot;);\n    vooruit();\n    \/\/resetData();\n  }\n  \n  if (data.valx &gt;= 384 &amp;&amp; data.valx &lt;= 640 &amp;&amp; data.valy &gt;= 896){\n    Serial.println (&quot;Achteruit!&quot;);\n    achteruit();\n    \/\/resetData();\n  }\n\n  if (data.valx &lt;= 128 &amp;&amp; data.valy &gt;= 384 &amp;&amp; data.valy &lt;= 640){\n    Serial.println (&quot;Linksaf!&quot;);\n    links();\n    \/\/resetData();\n  }\n\n  if (data.valx &gt;= 896 &amp;&amp; data.valy &gt;= 384 &amp;&amp; data.valy &lt;= 640){\n    Serial.println (&quot;Rechtsaf!&quot;);\n    rechts();\n    \/\/resetData();\n  }\n\n  if (data.valx &gt; 896 &amp;&amp; data.valy &lt; 100){\n    Serial.println (&quot;Schuin rechtsvoor!&quot;);\n    diag_rechts();\n    \/\/resetData();\n  }\n\n  if (data.valx &lt; 100 &amp;&amp; data.valy &lt; 200){\n    Serial.println (&quot;Schuin linksvoor!&quot;);\n    diag_links();\n    \/\/resetData();\n  }\n\n  if (data.valx &lt; 100 &amp;&amp; data.valy &gt; 896){\n    Serial.println (&quot;Schuin linksachter!&quot;);\n    diag_linksachter();\n    \/\/resetData();\n  }\n\n  if (data.valx &gt; 896 &amp;&amp; data.valy &gt; 896){\n    Serial.println (&quot;Schuin rechtsachter!&quot;);\n    diag_rechtsachter();\n    \/\/resetData();\n  }\n  \n  if (data.valx &gt;= 384 &amp;&amp; data.valx &lt;= 640 &amp;&amp; data.valy &gt;= 384 &amp;&amp; data.valy &lt; 640){\n    Serial.println (&quot;Stop!&quot;);   \n    \/\/resetData();\n    stop();\n  }\n  \n  \/\/resetData();\n  }\n}\n\nvoid resetData(){\n  Serial.println (&quot;Reset data&quot;);\n  data.valx = 512;\n  data.valy = 512;\n  \/\/ data.Button1 = LOW;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">De wagen ontvangt het pakketje met x- en y-waardes <strong><em>radio.read(&amp;data, sizeof(Data_Package))<\/em><\/strong>; en vervolgens wordt er bepaald wat er op basis van deze waardes gedaan moet worden: &#8220;welke richting moet ik uit!&#8221;<br>Voor elke richting (vooruit, achteruit, schuin-rechts-naar-voren, enz.) heb ik een procedure gemaakt. Hieronder de &#8220;procedure vooruit&#8221;.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; quick-code: false; notranslate\" title=\"\">\nvoid vooruit() {  \n  \n  digitalWrite(mLV1,HIGH);\n  digitalWrite(mLV2,LOW);\n  \n  digitalWrite(mRV1,HIGH);\n  digitalWrite(mRV2,LOW);\n  \n  digitalWrite(mLA1,HIGH);\n  digitalWrite(mLA2,LOW);\n  \n  digitalWrite(mRA1,HIGH);\n  digitalWrite(mRA2,LOW);\n  \n  }\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>In het eerste deel, september vorig jaar, heb ik beschreven wat ik wilde maken. Ik had toen nog niet alle motoren in huis, maar die zijn inmiddels lang geleden ontvangen. Vandaag ben ik er weer mee verder gegaan. Hieronder daarvan verslag: de uitvoering en de Arduino-code. Hierboven de Arduino Nano met nRF24- en de joystickmodule die samen de afstandsbediening vormen. En dan de robotwagen zelf. De mecanumwielen zijn gemarkeerd: L en R. Hierboven de L-gemarkeerde links en de R-gemarkeerde rechts geplaatst. Maar &#8230;. dan werkt het niet zoals het moet. Hierboven de wielen geplaatst zoals het wel goed werkt. Aan de<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/robotwagentje-met-nrf24-deel2\/\">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":[6,95,3],"tags":[70,138,121],"class_list":["entry","author-admin","post-2764","post","type-post","status-publish","format-standard","category-arduino","category-diy","category-elektronica","tag-batterij","tag-joystick","tag-nrf24l01"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/2764","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=2764"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/2764\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=2764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=2764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=2764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}