De Wemos Lolin32 is een ESP32 board met een accu aansluiting. Hiermee maak je eenvoudig een WiFi robotwagen.

In dit lab maak je van standaard onderdelen je eigen WiFi robot. We vinden het leuk om te laten zien wat je kunt bouwen met onderdelen die in de industrie ook voor echt serieuze machines worden gebruikt.

We helpen je om je eerste versie van de robotauto te bouwen. Deze wifi robot auto bestuur je gewoon via je telefoon! Ik ben benieuwd of je onderweg ideeën krijgt voor een eigen versie die misschien groter en sterker is.

De 2022 Wifi Robot Challenge – kan jij deze robot zelf bouwen?

De DISK robot is de ster van de 2022 Junior IOT Wifi Robot Challenge. Eerst bouwen we de broekzakversie. Daarna weten jullie genoeg om met hetzelfde brein met gemak ook de grotere XL battle robots te bouwen!

Ook als je niet aan deze challenge meedoet kan je natuurlijk ook zelf aan de slag met deze robot. Hiervoor leer je eerst solderen, en leer je programmeren met de Arduino. Daarvoor hebben we de Arduino Bag-of-Fun met een handige uitbreidingsset. Om dit als schoolprogramma uit te voeren overleg je eerst met ons.

Wat heb je nodig voor de Junior IOT – DISK WiFi Robot

We hebben voor deze challenge de benodigde onderdelen klaargelegd. Tijdens de challenge verdien je punten om de robotspullen te verdienen.

Dit heb je dan voor je Disk robot nodig: twee N20 motoren, een mini motor controller, een Lolin32 Lite en een kleine LiPo batterij. Met de 3D printer maken we het frame, wielen, een motorplaatje en een lichthouder. Met jumpers verbind je de onderdelen. Je kunt er een NeoPixel stick op zetten. En eventueel zijn er nog extra rubber bandjes.

    

(D.I.S.K. v7, met 3D onderdelen ontwikkeld door Bas)

Deze lessenserie delen we graag met de rest van de wereld

Het kerndoel van Junior IOT is en blijft altijd om onze inspiratie voor technologie te delen. Vanaf 8 mei 2022 beslissen we dat je deze uitleg ook buiten Junior IOT mag gebruiken, en hiervoor maken we de volgende afspraak:

Deze les mag je als school en non-profit (onderwijs-) organisatie gewoon gebruiken

De lessenserie op deze pagina mag je als school en als non-profit organisatie gewoon gebruiken. Onze regel daarbij is, net als bij al onze teksten en instructies, dat de instructie en alle uitleg dan altijd op onze website blijft. Kopiëren en hergebruik van onze informatie is zonder verder overleg niet toegestaan. Je mag onze materialen bovendien niet gebruiken om winst te maken (je winst zou anders naar Junior IOT mogen gaan).

Als je je houdt aan deze regel, dan mag je de informatie op deze pagina met bijbehorende labs gewoon gebruiken, ook zonder een afspraak met Junior IOT. Dit is een uitzondering speciaal voor deze pagina, omdat we deze WiFi Robot Challenge als introductie voor technologie graag willen terugzien op zoveel mogelijk scholen. Voor de andere pagina’s en lessen op onze website geldt een andere afspraak. We vinden het wel leuk om van je te horen als je de materialen gebruikt.

Je kunt voor je workshops voor deze pagina dan ook je eigen materialen en gereedschappen gebruiken. Ook kan je deze aanschaffen bij Junior IOT. Stuur ons daarvoor een email: [email protected]

Ontwerpkeuzes

Geen bijna-klaar bouwpakketje maar liever een mooi avontuur!

Met alle keurige onderdelen voor de robot lijkt het net een bouwpakketje. Hopsa, in een half uurtje even de stappen volgen en je hebt weer een leuk nieuw speelgoedje? Nee, dat is niet de bedoeling. We gebruiken de robotuitdaging om alle technologie onderwerpen te leren. Voor de deelnemers aan de challenge rekenen we ongeveer 8 dagen van 5 uur, dus in totaal 40 uren.

Aan deze challenge doe je mee om nieuwe dingen te leren. Je ontdekt waarom het allemaal op deze manier werkt. Natuurlijk ben je meerdere weken bezig met de verschillende leuke dingen. Tijdens het bouwen krijg je zo al nieuwe ideeën om het nog mooier en beter te maken.

Kom mee, dit wordt een mooi avontuur!

Geen voorkennis, wel doorpakken met technologie

Als deelnemer, maar ook als docent, heb je eigenlijk geen voorkennis nodig. Tegelijk zijn de oefeningen ook leuk voor leerlingen die al delen van de techniek denken te kennen. Deze oefeningen is niet leeftijdgebonden en kan met de juiste begeleiding werken met groepen leerlingen van zo’n 7 tot 77 jaar oud.

Een krachtig brein: de Wemos Lolin32 lite

Als brein gebruik je één van boards in de ESP32 serie: de Lolin32 Lite. Hierop draait jouw programma om de robot te besturen. De twee cores zijn net genoeg voor de complexe stapel software voor de besturing. Zoals andere ESP32 boards heeft ook deze een ingebouwde WiFi. We zijn erg blij met de micro-usb aansluiting, waarmee we makkelijk programmeren vanuit de vertrouwde Arduino IDE. Maar het mooiste is de ingebouwde aansluiting om een kleine lipo batterij op te laden.

“The LOLIN32 Lite is a low-budget ESP32 board that, like other ESP32 boards, has a 32-bit dual core microcontroller that runs at 240MHz, has 4MB of  flash storage, and can be programmed in a range of languages, including microPython, LUA, and Arduino. It can be powered via micro USB or lithium polymer batteries with a 500mA max charging current. A set of matching headers are included, that can be soldered to the board, for mounting on a breadboard.”

Voor dit project is deze Lolin een handige keuze. In onze eerdere Battlebot Challenge gebruikten we de ESP32 CAM als brein voor grote vechtrobots die de deelnemers verder zelf hadden ontworpen. Deze twee boards zijn redelijk goed uitwisselbaar. Het programma wat Maarten in 2019 heeft geschreven, dat gebruiken we ook nu weer voor de robot besturing. We dachten eerst een goedkopere ESP8266 te gebruiken, maar dan zouden we veel moeten aanpassen in de software, en dan missen we ook de batterij oplader.

Voor de technische details kan je de pinout van de Lolin32 Lite eens opzoeken: https://www.google.com/search?q=lolin32+lite+pinout

N20 Gear motoren, 28 of 300 RPM

In 2021 heeft Bas een nieuwe behuizing bedacht. De robot werkt daarom nu met de N20 motoren. Dit zijn heel kleine electromotoren. Waar moeten we aan denken bij het gebruik van deze motoren?

  • Let op, deze motoren kan je bestellen met een verschillende tandwielkast. Wij hebben twee soorten. Sommige zijn dan 28 rpm, anderen zijn 300 rpm. Wil je een rustige of juist een snelle robot? Kies de motor die bij je past.
  • Door de tandwielen hebben ze verrassend veel trekkracht. Echter, zoms zitten de tandwielen niet helemaal goed. En dan draaien de wielen niet. Dit moet je zelf even ontdekken.
  • Vaak zit er al een draadje aan de motoren. Dat betekent niet altijd dat ze de kant opdraaien die jij verwacht. Het kan zijn dat je de draden nog wilt verwisselen.

Je wilt jouw motoren misschien even testen met de Arduino motor controller oefening. En daarna nog een keer met je Lolin32.

Micro motorcontroller L298N

Ook bij onze piepkleine motoren lukt het niet om ze direct op het brein aan te sluiten. Het brein geeft een besturingsstroom, die soms net genoeg is voor een ledje. Om een motor te laten draaien gebruiken we daarom een motorcontroller. De signalen vanuit je Lolin32 worden door de motorcontroller vertaald naar krachtigere aandrijving voor de DC motor.

Een motorcontroller heeft altijd een aansluiting voor een externe voeding. Vooral bij een grotere robot zal je kiezen voor externe power. Voor ons eenvoudige ontwerp halen we de motorpower gewoon van de Power pennen op de Lolin.

In één van de oefeningen heb je misschien al headers aan de motorcontroller gemaakt. Deze mogen er nu weer af, zodat de motorcontroller beter in onze robot past.

Stroom voor onderweg: onze kleine LiPo batterij met één cel

Onze Lolin heeft een ingebouwde batterij oplader. De batterij aansluiting heeft de veel gebruikte micro JST 1.25 stekker. We kiezen voor ons project een lichte lipo batterij van ongeveer 300 of 400 mAh.

LET OP: LiPo batterijen moet je op een speciale manier behandelen…

  • Een LiPo batterij kan in één keer heel veel stroom leveren. Dat is voor de batterij geen probleem, maar de draden kunnen hier vaak niet tegen.
  • Wees voorzichtig. Bij beschadiging komt alle energie van de batterij in één keer vrij. Dat geeft dan een ontploffing of een zeer hete steekvlam die niet meer uit wil. Dat is niet de bedoeling (toch?) en daarom kiezen we in ons project een kleinere batterij van 300 tot 400 mAh. Zelfs bij de grote XL robot kiezen we een bescheiden batterij, 2 cellen met 1500 mAh.
  • De batterij mag niet leeg raken, want dan doet hij het niet meer. Gelukkig zit er een beveiliging in onze batterij ingebouwd.
  • Het wordt aangeraden om de batterij af en toe op te laden. Gelukkig houdt de LiPo batterij heel lang zijn lading vast. Onze batterijen liggen nu al één of twee jaar te wachten op dit project. En ze werken daarom nog prima.
  • De buitenkant van een gezonde LiPo batterij zit strak om de binnenkant. Als je een beweegbare buitenkant hebt, dan zit er lucht in. Je LiPo doet het dan waarschijnlijk niet meer.

Headers en jumpers voor makkelijke ontwikkeling

Bij de oefeningen voorafgaand aan dit lab gebruik je een breadboard. Je kunt daarmee sneller je ontwerp testen, iets veranderen en nieuwe ideeën onderzoeken. Maar let op: breadboard jumpers blijven niet altijd goed vast zitten. En deze aansluitingen zijn ook niet bedoeld voor aansluitingen met sterkere stromen.

Ook bij de DISK robot gebruiken we jumpers. Dat ziet er ook lekker stoer uit. We solderen header pinnen op de Lolin32 om dan met de jumpers makkelijk verbindingen te maken. De headers wijzen naar boven. Op deze manier kunnen we makkelijk dingen aan ons ontwerp toevoegen. Ook kunnen we het brein makkelijk overzetten naar een ander project als we dat zouden willen.

De draden aan de motorcontroller solderen we wel vast.

Een stevig frame wat je zelf kunt ontwerpen

Het frame voor de robot bestaat uit meerdere 3D geprinte onderdelen. Deze printen we natuurlijk makkelijk zelf even.

Software met besturing via WiFi op je telefoon

Maarten heeft de software gemaakt voor de WiFi robot. Deze software zal jij op de robot zetten om de robot te kunnen bedienen.

De software die op de Lolin32 wordt gezet bestaat uit een heleboel ingewikkelde onderdelen: een WiFi accesspoint, een DNS server, een webserver, een bedieningspagina en een paar regels code voor de besturing. Verbind jouw telefoon met het wifi netwerk van jouw robot, en roep de juiste pagina op. Via jouw telefoon (of elk ander WiFi apparaat) laat je de robot doen wat jij wilt.

De software die wij voor je klaar zetten is maar een eerste begin. Zo kan je zien dat alles werkt. Je kunt hier makkelijk nog opdrachten bij maken. Kijk zelf in de code hoe het werkt, en programmeer nieuwe acties onder de vier actie knoppen.

Maar eerst… Vaardigheden die je nodig hebt voordat je begint

Nu weet je waar we aan dachten toen we deze robot hebben bedacht. Het gaat over een heleboel ingewikkelde dingen. Om te begrijpen hoe het allemaal werkt doe je eerst een aantal kennismakingsoefeningen.

   

In onze challenge krijg je de onderdelen voor de DISK robot pas nadat je al deze oefeningen hebt gedaan.

Beginnen met bouwen van de DISK WiFi Robot

De basis leren met onze lessen en labs

Met onze lessen heb je vast al een heleboel gesoldeerd, geprogrammeerd en 3D getekend. Deze oefeningen vul je in op de deelnamekaart bij deze challenge. Als je deze oefeningen nog niet hebt gedaan, begin daar dan nu eerst mee.

Soldeertemperatuur nu 250 tot 300 graden

Bij de eerdere soldeeroefeningen zetten we de soldeerbout op 300 tot 350 graden. Zo kan je lekker makkelijk solderen.

Als je het al een beetje kan, dan zet je de soldeerbout op 280 graden om mooier te solderen. Je bordje blijft mooier, en er komen minder spettertjes op de details.

De motordriver testen

Om de motordriver te gebruiken moet je deze eerst voorbereiden. Het is ook goed om eens te proberen hoe deze werkt. Het lab ‘Blink als DC motor besturing op het breadboard’ helpt je daarbij: https://junioriot.nl/blink-extreme-dc-motor-besturing/. Ga pas verder als je dat lab hebt gedaan.

Let op: in de robot soldeer je de draden direct aan je mini L298N motor driver, en de headers kan je er dan weer afhalen.

Tip: voor hele grote motors gebruik je de grotere motordriver. Misschien kan je daarmee ook andere dingen aansturen zoals RGB ledstrips.

Headers op de Lolin32 Lite solderen, zet ze wel omhoog!

Bij de DISK robot werken we zonder breadboard. Wel zetten we de headers op de Lolin32. Op die manier kan onze robot nog kleiner worden! Deze stap doe je pas als je een beetje geoefend hebt met solderen. Gelukkig heb je in de andere opdrachten al genoeg kunnen oefenen.

Kijk naar de foto’s van de robot aan welke kant je de headers moet doen. Tip: de headers steken omhoog!

Pak je Lolin bordje en soldeer de headers volgens deze instructie: https://junioriot.nl/headers-op-arduino-nano-solderen/

WEMOS LOLIN32 instellen in de Arduino IDE

Stel nu je Arduino IDE in, en gebruik een Blink om te testen of je de Lolin kunt programmeren. Daarvoor gebruik je dit lab: https://junioriot.nl/lolin32-arduino-ide/

Als de Blink goed werkt, dan weet je dat je Lolin goed genoeg werkt om hem in je project te gebruiken.

 

Solderen en verbinden van de onderdelen

Uitdaging: Je gaat meerdere onderdelen gebruiken die allemaal een min en een plus aansluiting nodig hebben. Die kan je op één plek samenvoegen. En een aan/uit schakelaar is handig. Met een krimpkous maak je dat allemaal wat veiliger. Hier kan je zelf nog je eigen keuzes maken.

Maak je eigen oplossing voor de min en plus aansluiting voor de verschillende onderdelen

Dit stukje mag je even doorlezen, en je hoeft er nu nog niets mee te doen. Je ontdekt zelf wel wanneer je dit nog een keer wilt doorlezen als je nog iets verder bent met bouwen.

Waarschijnlijk sluit je straks eerst de motor controller aan. Voor de min aansluiting zie je dat we in ons voorbeeld de GND pin op de LOLIN32 gebruiken. Voor de plus is dat de 3V3 pin van de LOLIN32. Zo kunnen we lekker snel iets in elkaar zetten wat goed werkt!

Het wordt wat lastiger zodra we voor twee apparaten een min en plus nodig hebben, zoals voor de motor controller en de neopixel ledstrip. Je kunt dan ontdekken hoe je de min en plus van deze onderdelen op elkaar kunt doorverbinden. Het is misschien netter om de zwarte en rode draad te gebruiken van het zelfgemaakte tussensnoertje naar je batterij.

Tip: als je meerdere draden aan elkaar soldeert, zorg dan met een krimpkous voor goede isolatie.

Ik ben benieuwd wat jij straks de mooiste oplossing vindt!

Tips bij het solderen van aansluit draden

Straks zal je ook wat aansluit draden gaan solderen. We zien in dit project nog wel eens dat onbeschermde draden tegen elkaar botsen, waardoor meer stroom kan gaan lopen dan de bedoeling is. Hierdoor kan je motorcontroller of je LOLIN32 stuk gaan, en dat is niet de bedoeling.

Om je draden te vertinnen strip je eerst de draadjes. Je haalt zo’n 5mm plastic weg. De koperdraadjes onder het plastic vertin je even. Draai de koperdraadjes niet in elkaar, want zoals ze nu zitten krijg je een mooi strak en dun resultaat.

Vertinnen doe je door in de buurt van het plastic een klein beetje soldeertin op het draadje te smelten. Zorg dat het een paar tellen warm blijft, zodat de tin lekker tussen de koperen vezels trekt. De tin trekt zelfs verder het draadje in, onder de plastic bescherming. Zo wordt het lekker stevig. Je ziet dan ook dat het plastic nog iets krimpt.

Terwijl je nog bezig bent, beweeg je de soldeerbout langs de draad richting het uiteinde. Zo schuif je een eventueel extra tin op, zodat het daar een druppel vormt. Knip het vertinde draadje af, tot 2 of 3 mm. Nu heb je een mooi draad stukje zonder franje.

Het vertinde stukje past nu mooi in het gaatje van een PCB. Als het gaatje per ongeluk al verstopt zit, dan mag je het draadje ook plat op het gaatje solderen. Soldeer het zo, dat het plastic heel dicht bij je soldeerbobbeltje zit, en knip uitstekende draadstukjes en franjes netjes af.

Controleer dat de aansluitdraden overal voldoende plastic hebben. Je mag de binnenkant van de draad niet zien, want dat kan botsing geven waardoor je werkstuk kapot kan gaan. Controleer ook de draden bij de motor aansluiting.

Aansluiting van de LOLIN32 naar de motor controller

Let op: de verbindingsdraden kan je op verschillende manieren aansluiten. Kijk naar de foto’s en bedenk hoe jij het wilt aansluiten.


(klik op het plaatje voor een vergroting)

Maak de verbinding voor de power naar de motor controller. Voor plus gebruiken we het liefst een rode draad, en voor min een zwarte. Maak 2 afgeknipte female headers, van ongeveer 8 cm lang. Op de foto’s zie je hoe aan deze headers ook de NeoPixel is aangesloten, maar dat hoeft nu nog niet

  • Lolin GND naar min – aansluiting op de motor controller
  • Lolin 3V naar plus + aansluiting op de motor controller

In onze software sturen we de motors aan via de pinnen 15, 13, 18 en 5. Aan de motor controller solderen we 4 afgeknipte female headers, van ongeveer 8 cm lang.

  • Lolin 15 naar IN1 op de motor controller
  • Lolin 13 naar IN2
  • Lolin 18 naar IN3
  • Lolin 5 naar IN4

De motordraden solderen we aan de achterkant van de controller.

  • Sluit de eerste motor aan op de twee aansluitpunten voor Motor-A
  • Sluit de tweede motor aan op de twee aansluitpunten voor Motor-B

Wil je het anders? Volg toch liever onze pin nummering. Het blijkt bij ons met deze pinnen goed te werken, en we zagen dat het niet lukt met sommige andere pin nummers. Als je andere pinnen kiest, dan zal je opnieuw moeten controleren of je robotwagen nog snel genoeg reageert; en bovendien past de standaard software dan niet meer.

 

Aansluiting naar de NeoPixel

Als je wilt kan je een NeoPixel strip aansluiten. Hiervoor moet je jouw bekabeling aanpassen…. hoe je dat precies moet doen kan je zelf even uitzoeken. In ons voorbeeld delen we de min en plus aansluiting we met de motor controller. Als je aansluit snoeren combineert, dan is een stukje krimpkous handig om de draden te isoleren.

  • Lolin 23 naar DIN aansluiting op de NeoPixel strip
  • Lolin GND naar min – ofwel GND aansluiting op de NeoPixel strip
  • Lolin 3V naar plus + ofwel 5V aansluiting op de NeoPixel strip

Batterij tussendraadje met schakelaar?

En dan is het ook handig een tussendraadje te maken met een schakelaar voor je batterij. Hiervoor heb je een batterij verlengsnoertje nodig. Deze stap is niet persee nodig, maar wel handig voor de robots die mee gaan naar evenementen en demonstraties.

Het tussendraadje maken we van een male en een female verlengstekker voor de batterij. Gebruik op de schakelaar een klein stukje krimpkous om de aansluiting te isoleren. Je kunt deze aansluiting ook gebruiken voor de plus en min aansluitingen van de motorcontroller en de NeoPixel.

3D printen van je onderdelen

Met de STL van de onderdelen kan je zelf je prints maken. Op de print stick staan de files klaar om meteen op de Prusa Mini te printen.

DISK v9.3 20220326

DISK print stick 20220326

Monteren van de robot

Verzamel de 3D geprinte onderdelen.

  • Body
  • Wielen
  • Motor plaatje
  • NeoPixel houder

Dat is alles!

Nu kan je beginnen om het frame in elkaar te zetten. Bas heeft het ontwerp zo gekozen dat alle onderdelen bijna vanzelf op hun plek zitten. Het monteren van de robot is niet heel moeilijk.

Psst, het is wel makkelijk als de software al op de robot staat. dan kan je tijdens het monteren zien of de motoren de goede kant op draaien.

  • Zet de wielen op de motors. Let op het platte kantje van de as. Je hoeft geen rubber bandje te gebruiken.

  • Druk de wielen op de N20 gearmotoren en plaats de motoren in het frame.

  • Zet de motoren vast met het 3D geprinte tussenplaatje. Dit klik je vast in de ruimte in je robot frame zodat de motors niet meer wiebelen.

  

 

  • Hierna leg je de batterij op de tussenplaat.

  • De motorcontroller (gesoldeerd zonder headers) zet je rechtop in het vakje achter de motors. Draai het zo dat het mooi past, en frummel de draden in één van de openingen van het frame.

  • Hierna past de ESP32 als deksel op de robot. Draai deze zo dat de USB aansluiting bij de opening van het frame zit, zodat je jouw robot makkelijk kunt opladen. Ook dit onderdeel klik je vast door het aan te drukken in de ruimte in je robot frame.

 

  • Als je wilt plaats je ook de NeoPixel strip op het beugeltje. Deze klik je op zijn plaats – het klemt gewoon in de ruimte tussen de headers.

Let op: Als je straks de software er op hebt gezet, dan kan je kijken of de robot de goede kant op rolt. Als hij achteruit gaat dan moet je even de motoren in het frame omwisselen – dat doe je het makkelijkst door de besturingsdraden om te wisselen op het brein.

 

Software klaarzetten voor de Arduino IDE

Er staat een laatste versie van de software voor je klaar.

  • Download de zipfile: Junior IOT – ESP Robotwagen 20201222
    • De oudere versie 20201222 heeft een gekleurde bedieningspagina, en vier actie knoppen.
  • Download de zipfile: Junior IOT – ESP Robotwagen 20220321
    • Deze versie 20220321 heeft nu NeoPixel kleur knoppen, Nightrider zwiebel lampje, unieke WiFi naam automatisch naar de Captive besturings pagina, stop-als-baasje-kwijt na 5 seconden
  • Download de zipfile Junior IOT – ESP Robotwagen 20220429
    • Deze versie 20220429 heeft bovendien een display van het IP adress op de NeoPixel zodra niemand is connected, de servo is verschoven van pin 16 naar 17, er is een RGB led volgens de pinout onderaan de pagina, settings staan duidelijker in car.h, en de code in de files wordt duidelijker toegelicht.

Daarna:

  • Pak deze zipfile uit naar een folder
  • In de folder ‘car’ vind je de file ‘car.ino’.
  • Dubbelklik ‘car.ino’ om het programma te openen in de Arduino IDE

Je ziet dat er 7 tabjes worden geopend in de Arduino IDE

Onderzoek de onderdelen van het programma

De software voor de robotwagen is verdeeld over 7 files, die elk in een eigen tabje worden getoond. We hebben het zo gemaakt dat je in sommige files je eigen aanpassingen en toevoegingen maakt. Andere files kan je beter niet veranderen.

In de eerste file, car.ino staat uitgelegd wat je in welke file je kunt vinden.

// The structure of the project:
//  (1) car.ino is a placeholder where the Arduino IDE will start code execution
//      The user does not need to change this code
//      This forwards the execution to car.cpp through functions exposed in car.h 
//  (2) car.cpp and car.h contain all core functions for webpage, WiFi, driving
//      The user does not need to change car.cpp
//        however, the user is invited to adjust settings at the top in car.h
//      Uses string definitions from webPage.cpp as exposed in webPage.h 
//      Calls pre-defined routines in functions.cpp, exposed in functions.h
//  (3) webPage.cpp and webPage.h define the remote controll web page as a string
//      The user does not need to change this code
//  (4) functions.cpp and functions.h allow the user to extend some control items  
//      The user is invited to add custom actions to the pre-defined routines  
  • car – deze file ‘car.ino’ zorgt dat alle code goed wordt opgestart, niet veranderen.
  • car.cpp –  Hier zit alle belangrijke code en hier hoeft eigenlijk niets aan te passen
  • car.h – hier vind je een aantal instellingen die je voorzichtig nog kunt veranderen
  • functions.cpp – pre-defined routines die je kunt aanpassen, bijvoorbeeld voor button 1 t/m 4. Kijk nu even welke code er al staat bij de vier knoppen.
  • functions.h – hier hoef je niets aan te passen
  • webPage.cpp – code for the web page, hoef je niet aan te passen
  • webPage.h – hier hoef je niets aan te passen

Kijk maar eens rond in deze files.

Je Arduino IDE instellen op WEMOS LOLIN32

Als je alle stappen in de instructie al hebt gedaan, dan is dit nu al in orde. Voor de zekerheid vertellen we nog een keer hoe je de Arduino IDE instelt voor jouw robot brein: https://junioriot.nl/lolin32-arduino-ide/

Libraries toevoegen aan de Arduino IDE

Je code gebruikt libraries waar veel gebruikte functionaliteiten al netjes zijn geprogrammeerd. Dat maakt het programmeren voor ons veel makkelijker. Hoe je libraries bekend maakt aan de Arduino IDE lees je hier: https://junioriot.nl/arduino-library/

De libraries worden toegevoegd met een include regel. Wanneer een library ontbreekt, dan krijg je bij het uploaden een error op de betreffende include regel. Als je door de verschillende tabjes bladert, dan kom je deze includes tegen:

#include <WiFi.h>
#include <AsyncTCP.h> *
#include <ESPAsyncWebServer.h> **
#include <ESP32Servo.h> **
#include <WString.h>

#include <ESPAsyncWebServer.h> **
#include <WString.h>

#include <ESP32Servo.h> **

Zouden deze al aanwezig zijn bij mijn Arduino IDE? Dat kan bij iedereen verschillend zijn, afhankelijk van welke projecten je al eerder hebt gedaan.

Daarom laat ik je zien hoe het bij mij ging. Om te zien waar ik mee moest beginnen drukte ik eerst gewoon op ‘compile’. Dat is de eerste ronde knop links boven. Oeps, ik kreeg een error, die moppert over ESPAsyncWebServer.h

Installeren van ESPAsyncWebServer.h

Voor elke ontbrekende library zoek je of deze te vinden is bij de Arduino standaard lijst:

  • sketch > manage Libraries > zoek op ESPAsyncWebServer

Hier is iets aan de hand, en dat los ik zo op:

Klik op https://github.com/me-no-dev/ESPAsyncWebServer. Je gaat dan naar GitHub waar de bijbehorende code staat. In GitHub klik je op de groene knop ‘Code’ en kies ‘download zip’.

In de IDE ga je daarna naar Sketch > Include Library > Add ZIP Library. Dan wandel je naar je downloads locatie, en wijs je de zip aan die je net hebt gedownload: ESPAsyncWebServer-master.zip. De Arduino IDE meldt daarna: ‘Library added to your libraries. Check “include library” menu.

Zo is het goed.

Sla voor het gemak de tweede github link over, en lees verder: Nadat ik zelf ook de tweede github link (https://github.com/me-no-dev/ESPAsyncTCP) heb gedaan, kreeg ik bij het compileren toch nog een error: AsyncTCP ontbreekt. Dat is raar, want die had ik net geïnstalleerd – dacht ik. Ook het zoeken in de lijst van standaard libraries, en toevoegen van de generic library die ik daar vond, dat hielp niet. Help, hoe fix ik dit nou weer?

Mijn fix: In mijn libraries folder, waar Arduino is geïnstalleerd verwijderde ik folders van de verkeerde ESPASyncTCP, en de generieke TCP library die ik net had toegevoegd.

AsyncTCP installeren

De AsyncTCP library zit blijkbaar niet tussen de standard libraries, dus je moet de zip methode proberen.

Ik heb de zip gedownload van https://github.com/me-no-dev/AsyncTCP, en deze geïnstalleerd

Daarna kreeg ik een nieuwe, frisse compile fout. Gelukkig, dan heb ik deze stap opgelost, en kan ik verder speuren naar de volgende ontbrekende library.

Installeren van ESP32Servo.h

Dan wil ik ook ESP32Servo.h toevoegen. Ik probeer het weer eerst via de nette route:

In de IDE ga ik naar Sketch > manage libraries > zoek op ESP32 Servo

In de zoekresultaten kies ik voor ESP32Servo van Kevin Harrington, John H Bennett

Ik probeer het programma naar de Lolin te versturen, om te zien of de fout nu is opgelost. Compileren duurt nu langer, spannend! En het lukt, want hierna zie ik in de onderste groene balk een vrolijke melding: ‘Done uploading.’

Installeren van de NeoPixel library

Hier moet ik nog een uitleg maken. We gebruiken de Adafruit NeoPixel library die we ook in onze oefeningen hebben gebruikt. Misschien staat deze dan al op je computer.

Instellingen aanpassen, geef je robot een naam?

Eigenlijk werkt de wagen nu al prima zonder instellingen aan te passen.

Je kunt het WiFi netwerk van de robot zelf een eigen naam geven, maar dat hoeft niet. Je kunt dit eigen netwerk ook met een wachtwoord beschermen. Dit kan je eventueel instellen in het programma bestand car.cpp:

  // settings for robot as an access point
  String ssid_Host = "DISK";
  bool concatinate_mac_address_to_ssid_Host = true;
  const char* password_Host = "passwordsecret";
  bool passwordProtect = false;

En je kunt er voor kiezen om de robotwagen te connecten aan een bestaand wifi netwerk. Dat is handig om de robot te bedienen en tegelijk nog internet connectivity te behouden op je telefoon.

We hebben voor onze challenge een WiFi netwerk gemaakt, dit heet ‘Junior IOT RobotBattle’ . Het wachtwoord is gelijk aan de langebus, kleine letters en zonder spaties. Ook dit kan je eventueel instellen in het programma bestand car.cpp:

  //////////// WiFi and networking settings ////////////////////////////////////

  // settings for joining an existing WiFi network
  const char* ssid_Client = "Junior IOT RobotBattle";
  const char* password_Client = "hetzelfde als langebus";
  bool connectToWiFi = true; // if WiFi network not found, robot becomes sluggish
  // If connectToWiFi is set to true, no captive portal is created

Upload het programma naar je robotwagen.

Tip: Met de serialmonitor (op 115200 baud) kan je na het uploaden zien welk IP nummer aan de robotwagen is toegewezen. Op het eigen netwerk van de robotwagen is dat meestal 192.168.4.1. In de 2022 versie van de software hoef je het IP nummer meestal niet meer op te zoeken omdat de ledstrip nu je IP nummer toont.

Het IP adres van je robot – aflezen van je ledstrip

Als de robot een eigen wifi netwerk maakt, dan is het IP adres van de robot meestal 192.168.4.1. In je browser ga je naar dit adres om op de besturingspagina te komen.

Update:we merken dat onze telefoons het wifi netwerk van de robot vrij snel los laten, en dat is lastig. Daarom gebruiken we nu ons speciale robot battle wifi netwerk waarmee we internet én robots combineren. De robots zullen dan wel allemaal iedere keer een ander IP nummer ontvangen in dat netwerk.

Update: In de nieuwste versie van de software (26 april 2022) toont de robot welk IP adres je kunt gebruiken. Zodra er niemand aan je robot connected is, begint deze weergave. Je ziet 5 gekleurde weergave stapjes langs komen.

  • De start herken je aan 6 gekleurde stippen rood-rood-groen-groen-blauw-blauw. Dit betekent dat het IP nummer getoond gaat worden. De laatste twee stippen geven aan welk WiFi netwerk het betreft.
    • donker-donker betekent dan dat je moet connecten aan de Robot WiFi
    • wit-wit betekent dat je het ingestelde lokale netwerk gebruikt, dus ons netwerk
  •  Rode stippen geven dan het eerste getal in binaire code, meestal is dit 192 of 10
  • Groene stippen geven het tweede getal, meestal is dat 168 of 10
  • Blauwe stippen geven het derde getal, meestal is dat 4 of 1
  • Gele stippen geven het vierde getal, dit moet je zelf even uitzoeken

Getallen geven we weer met de kleinste bit aan de kant van het stekkertje. Dat betekent dat bij het getal één alleen de led aan de kant van het stekkertje aan is. In de binaire notatie schrijven we die bit meestal aan de rechter kant, zorg dat jouw stekkertje dan ook aan de rechter kant ligt.

Zo laten we het IP nummer van de besturingspagina van de robot zien. Dit zijn dan binaire getallen deze leggen we hier uit: https://junioriot.nl/binair/

Veel voorkomende nummers bij onze ledstrip:

  • 00 00 00 01 – dit is dan nummer één
  • 00 00 01 00 – is nummer 4
  • 00 00 10 10  – betekent nummer tien
  • 10 10 10 00 – dit is 168
  • 11 00 00 00 – dit is nummer 192

 

Telefoon connecten en robot besturen

Zet de robotwagen op een verhoging, zodat de wielen vrij kunnen draaien. De zelfstandige robot bedien je via de WiFi / het access point van de robot zelf.

Update: Je telefoon blijft telkens op zoek naar een internet verbindingen, waardoor de WiFi van de robot telkens wordt losgelaten. Met een wifi netwerk om internet en robot bediening te combineren hebben we daar minder last van.

Ook als jouw robot aangesloten is op het lokale WiFi, dan kan je ook nog steeds het netwerk van de robot zelf gebruiken.

Connecten volgens keuze 1: ons Robot Battle WiFi netwerk

Op je telefoon kies je het netwerk ‘Junior IOT RobotBattle’. Kijk naar de kleurencode van de robot, en noteer wat het ip adres is van de besturingspagina. In de browser ga je naar dit IP adres om de besturingspagina te openen.

Connecten volgens keuze 2: Access point van je robot zelf

Op je telefoon kies je het wifi netwerk van je robotwagen. Daarna kan je naar de besturingspagina, meestal is dat 192.168.4.1. Maar je kunt het ook opzoeken via de welkom pagina. Dit is voor Android en voor iPhone een beetje verschillend.

Open je browser en ga naar het adres van je robotwagen. Dit is wellicht 192.168.4.1

Voor Android: Het wifi netwerk opent een aanmeld pagina. Bij sommige telefoons is dat meteen de besturingspagina. Maar op Android hebben we gekozen daar een tussen tekstje te zetten, gewoon omdat de aanmeld browser niet goed werkt. Op Android hou je bij de tussentekst de url lang ingedrukt, en kies dan ‘openen’. Zo ga je naar de besturingspagina.

Voor de iPhone. De wifi van je robot heeft geen internet verbinding, daarom werkt het op de iPhone net even anders. Nadat je connected bent aan de wifi van de robot: open je browser en ga naar de pagina 192.168.4.1

Een tip van Vincent en Iris:

Een kleine hint voor de wifi connectie met een iPhone:

Zet in je iPhone voor de wifi configuratie van je robot ( instellingen -> wifi -> wifi netwerk robot) de DNS op handmatig. Hierdoor blijft de iPhone niet zoeken naar internet en houd deze contact met je robot. Zie het blauwe vinkje in het plaatje hieronder.

In de browser ga je naar 192.168.4.1

De besturingspagina wordt geladen op je scherm.

De bediening via je telefoon (of je laptop)

Zo, nu heb je verbinding gemaakt, en je hebt de bedieningspagina gevonden. Op de bedieningspagina is het midden van je scherm nu een joystick voor je robotwagen.

Zodra je het gevoelige deel van je scherm aanraakt wordt dat het midden van je joystick. Zo kan het ook goed werken voor mensen met kleine vingers, en voor mensen met overdreven grote telefoons. Kijk eens of het lekkerder werkt in portrait mode of als landscape?

De bedieningspagina kan je ook met een laptop of een chromebook met een touch screen bedienen.

 

De eerste beweging van de robotwagen – richting controle

Als een en ander goed is gegaan dan zag je in de vorige stap dat één of twee motors gingen draaien. Soms moet je een beetje met je aansluitingen rommelen totdat beide motoren willen draaien.

Controleer nu of het goed werkt. Als je op je telefoonscherm naar voren schuift, dan moet de robot ook naar voren bewegen. Naar links bewegen is een bocht naar links. Zo horen alle bewegingen te kloppen. Dat lukt meestal niet in één keer.

Pas nu je aansluitingen aan: Als een motor verkeerd om draait, dan verwissel je de plus en de min door de stekker om te draaien. Als links/rechts lijkt verwisseld, dan verwissel je aansturings jumpers van die motor. Probeer maar wat, tot hij doet wat jij wilt.

Onderzoek eens of de wagen sterk genoeg is om echt te rijden. Als de usb kabel er nog aan zit, dan komt hij niet erg ver.

Verbinding troubleshooter

Probleem:

Hij deed het eerst wel maar nu doet hij het na een paar seconden niet meer.

Antwoord:

Misschien is de batterij leeg. Dit kan je eenvoudig testen.

Maak de batterij los. Verbind het zwarte arduino/esp printje met een usb kabel aan een usb lader (een voeding).

Kan je dan wel verbinden?
Dan weet je dat er niks mis is met de robot of de software. Op deze manier heb je ontdekt dat de grote batterij leeg is.
Dan kan je wel verbinden maar niet besturen. Dat klopt! Want de motoren hebben de grote batterij nodig en die is blijkbaar leeg.

Dat is dus goed nieuws, want er is niets stuk. Gewoon een nieuwe batterij er in en alles doet het weer.

Lost dit het niet op, en heb je nog steeds geen verbinding? Maak dan even al de breadboard kabeltjes los. Je hebt dan een losse ESP brein aan een usb kabeltje. Doet ie t dan wel? Blijkbaar zit iets in je bedrading niet helemaal goed.

Werkt de kale arduino/esp aan een kabeltje het ook niet?
Kom dan de volgende keer even langs onze werkplaats.

Mooi maken?

Natuurlijk wil jij dat jouw robot nog mooier wordt.

Ter controle, de Pin-out van het project

De pin-out van de LOLIN32 zie je onderaan de uitlegpagina op https://junioriot.nl/lolin32-arduino-ide/

De aansluitingen die we maken in deze beschrijving, zie je in deze pinout:

Zelf opnieuw bouwen: groter, sterker en nog beter?

Met dit lab heb jij een werkende WiFi robotwagen gebouwd. Dit lab is nu klaar.

Maar misschien wil je nu méér. Je kunt nu alles al om zelf een grotere versie te ontwerpen, te programmeren en te bouwen. Hoe zou je een grotere versie willen ontwerpen? Iets sterkere motoren? Heb je dan ook een sterker frame nodig? Wat denk je van een grote servo om ook een flipper toe te voegen? Bedenk voor jezelf eens welke onderdelen je dan moet upgraden. We hebben voor de XL robot bij de WiFi Robot Challenge al een paar onderdelen gekozen.

De bediening voor een XL battlebot werkt natuurlijk hetzelfde. We hebben een simpel frame voorbereid voor de XL, gemaakt uit een houten plaatje van 18 bij 18 centimeter, maar je mag ook een eigen ontwerp kiezen. Ons ontwerp is natuurlijk gelijk aan de afmeting van het bed van onze 3D printer, zodat je kunt proberen een mooie kap te ontwerpen voor jouw robot. Je kunt natuurlijk zelf een heel ander ontwerp verzinnen.

De motor controller is nu wat groter, en de accu sluiten we direct aan. De motor controller maakt ook 5V die we met een USB kabel naar ons brein brengen (rode en zwarte draad van de doorgeknipte USB kabel). Voor de verdere aansluitingen vinden we op aliexpress dit schema: