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 helpen je om je eerste versie van de robotauto te bouwen, en ik ben benieuwd of je onderweg ideeën krijgt voor een eigen versie die misschien groter en sterker is. Deze wifi robot auto bestuur je gewoon via je telefoon!

Wat heb je nodig voor de Junior IOT – DISK wifi robot

We hebben de benodigde onderdelen samengevat in een handige uitbreidingsset. Als basisset gebruik je daarnaast de Arduino Bag-of-Fun.

Deze aanvulset bevat: twee motoren, twee mini wielen, een mini motor control, een Lolin32 Lite en een LiPo batterij. Waar van toepassing vind je ook iets om de motoren en het frame bij elkaar te houden. Uit je basisset gebruik je: het grote breadboard, micro usb kabel, headers en jumpers.

Ontwerpkeuzes

Geen bijna-klaar bouwpakketje maar liever een mooi avontuur!

Met alle keurige onderdelen voor de robot lijkt het net een bouwpakketje. Hopsa, even de stappen volgen en je hebt weer een leuk nieuw speelgoedje? Nee, dat is niet de bedoeling. Daar is natuurlijk de speelgoedwinkel voor.

Aan dit lab doe je mee om nieuwe dingen te leren. Je ontdekt waarom het allemaal op deze manier werkt. Tijdens het bouwen krijg je misschien al nieuwe ideeën om het nog mooier en beter te maken.

Zonder jouw inspiratie zou dit nooit meer kunnen worden dan een gewoon bouwpakketje, een zakje met wat rommeltjes. Dat kan natuurlijk véél beter. Kom mee, dit wordt een mooi avontuur!

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. 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 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, en we kunnen ongeveer dezelfde programma’s schrijven voor de wifi robotbesturing. 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

In ons ontwerp kiezen we voor heel kleine electromotoren, met door de tandwielen nu ook met verrassend veel trekkracht.

Micro motorcontroller L298N

Ook bij onze piepkleine motoren is de stroom nog te groot om de motoren direct op je brein aan te sluiten. 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. Voor ons eenvoudige ontwerp halen we de motorpower gewoon via dezelfde voeding als je brein. De kleinste versie van deze motorcontroller werkt prima in dit ontwerp.

Stroom voor onderweg: onze kleine lipo met één cel

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

Breadboard voor makkelijke ontwikkeling

In dit lab gebruik je een breadboard. Je kunt daarmee sneller je ontwerp testen, iets veranderen en nieuwe ideeën onderzoeken.

Maar let op: breadboard verbindingen blijven niet altijd goed vast zitten. Ze zijn ook niet bedoeld voor aansluitingen met sterkere stromen. Bij een definitief product zou daarom alles nog worden vastgesoldeerd op een mooie printplaat.

Een stevig frame

Het frame voor de robot bestaat uit meerdere 3D geprintte onderdelen.

Besturing via WiFi op je telefoon

We hebben voor dit lab wat software verzameld. Daar ga jij mee aan de slag. Bij deze code zorgen we ook voor een webserver met een bedieningspagina. Verbind jouw telefoon met het wifi netwerk van jouw robot, en roep de juiste pagina op. Via jouw telefoon 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. Maar 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.

Bouwen

Ervaring met de Arduino Bag-of-Fun

Met je Arduino Bag-of-Fun heb je vast al een heleboel Arduino oefeningen gedaan. Zo ontdek je hoe je zelf kunt solderen en programmeren. Als je deze oefeningen nog niet hebt gedaan, begin daar dan nu eerst mee.

De motordriver testen en klaarmaken

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.

Daarmee zitten ook de headers op de juiste manier op je mini L298N motor driver. En je hebt een stekker aan je motor gesoldeerd.

Headers op de Lolin32 Lite

Deze stap doe je pas als je een beetje geoefend hebt met solderen. Gelukkig heb je met de Bag-of-Fun genoeg kunnen oefenen. 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/

Hierna weet je dat je Lolin goed genoeg werkt om hem op je breadboard te zetten.

Aansluiting naar de motor controller

Om de eerste onderdelen in het breadboard te zetten doe je:

  • Leg je breadboard voor je, met de rode lijn aan de bovenkant.
  • Pak je Lolin met de usb naar links.
  • Zet je Lolin zover mogelijk naar links in je breadboard. Zorg dat je daarboven en daaronder nog jumpers kunt aansluiten.
  • Zet je motor controller in je breadboard. De twee grote condensatoren wijzen naar links, en aan weerskanten laat je ruimte om headers aan te kunnen sluiten.

Maak de verbinding voor de power naar de motor controller:

  • Lolin GND naar min –
  • Lolin 3V naar plus +

In onze software sturen we de motors aan via de pinnen:

  • Lolin 15 naar IN1
  • Lolin 13 naar IN2
  • Lolin 18 naar IN3
  • Lolin 5 naar IN4
  • Sluit de eerste motor aan op Motor-A
  • Sluit de tweede motor aan op Motor-B

Na wat debugging in de software blijkt het bij ons met deze pinnen goed te werken. Als je andere pinnen kiest, dan zal je moeten controleren of je robotwagen nog snel genoeg reageert.

Met het frame geef je jouw robot een body

Nu kan je het frame in elkaar zetten. Bas heeft het ontwerp zo gekozen dat alle onderdelen bijna vanzelf op hun plek zitten.

  • Druk de wielen op de N20 gearmotoren en plaats de motoren in het frame.
  • Dek dit af met het 3D geprintte tussenplaatje.
  • Hierna leg je de batterij op de tussenplaat.
  • De motorcontroller zet je rechtop in het vakje achter de motor.
  • Hierna past de ESP32 als deksel op de robot en ben je klaar.

Straks kan je kijken of de robot de goede kant op rolt. Doet hij dit niet? Dan moet je even de motoren in het frame omwisselen.

Software klaarzetten voor de Arduino IDE

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

  • Download de zipfile: Junior IOT – ESP Robotwagen 20201222
  • 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.

  • car – deze file ‘car.ino’ zorgt dat alle code goed wordt opgestart, niet veranderen.
  • car.cpp – hier stel je een netwerk naam in voor de robotwagen, en we kiezen de motor pinnen
  • car.h – hier hoef je niets aan te passen
  • functions.cpp – basis functies voor de besturing en het starten van de wifi hotspot, settings kan je aanpassen, en je kunt code schrijven voor button1 t/m 4 (welke code staat er nu)
  • 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.

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

Ik heb hier niets gevonden, dus dan moet ik deze importeren via ZIP. Hoe gaat dat ookalweer? Het internet vertelt:

You will need to install both libraries ESPAsyncTCP and ESPAsyncWebServer, since the latter is dependant on the first. You can install them by:

  1. Downloading the zip files from github:
    1. https://github.com/me-no-dev/ESPAsyncWebServer
    2. https://github.com/me-no-dev/ESPAsyncTCP
  2. In your Arduino IDE go to

Sketch > Include Library > ZIP-Library

and select the libraries you just downloaded.

Met die uitleg ga ik aan de slag:

Klik op de eerste link die hierboven wordt genoemd. 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 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:

Deze 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

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.’

Instellingen corrigeren

De eerste instelling die je wilt aanpassen staat in het begin van car.cpp. Zoek deze code eens op:

1

2

3

const char* ssid_Host = “car”;

const char* password_Host = “wroem”;

bool passwordProtect = false;

Bij ssid_Host verander je ‘car’ in een unieke naam. Dan zie je straks beter welk wifi netwerk bij je robotwagen hoort. Verander de waarde in ‘car_’ met je voornaam.

Als je merkt dat ongenode gasten met jouw auto connecten mag je straks ook een wachtwoord instellen. Doe dit nu nog niet.

Je kunt de robotwagen ook connecten aan een bestaand wifi netwerk. Dat is handig om de auto te bedienen en tegelijk nog internet connectivity te behouden op je telefoon. Echter, als de robotwagen dit netwerk niet kan vinden, dan reageert hij niet lekker; dus doe dit nu nog niet.

Programma naar je robotwagen sturen

Upload het programma naar je robotwagen.

Tip: Met de serialmonitor (op 115200 baud) kan je zien welk IP nummer aan de robotwagen is toegewezen. Op het eigen netwerk van de robotwagen is dat meestal 192.168.4.1

Telefoon connecten

Zet de robotwagen op een verhoging, zodat de wielen vrij kunnen draaien.

Op je telefoon kies je het wifi netwerk van je robotwagen.

Tip: Android doet erg zijn best om internet te vinden. Om goed met de robotwagen te werken schakel je je data uit. Iedere keer als de robotwagen een nieuwe upload krijgt, of wordt gereset zal je opnieuw het netwerk moeten kiezen.

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

De pagina wordt geladen op je scherm. Je scherm is nu een joystick voor je robotwagen. Kijk eens of het lekkerder werkt in portrait mode of als landscape?

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.

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 emotors 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 beweegingen 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 motor-A en motor-B. Tot hij doet wat jij wilt.

Klaar!

Onderzoek eens of de wagen sterk genoeg is om echt te rijden. Als de usb kabel er nog aan zit, dan doet hij niet veel. Is dat beter als de wagen alleen met de lipo accu is verbonden?

Ik kan mij voorstellen dat je de motoren sterker wilt laten draaien. Misschien zet je op de + en – van de motor controller een aparte lipo, of een andere soort batterij?

Mooier maken

Op het filmpje en de foto’s valt het je misschien al op dat er hier en daar al wat extra componenten bij passen. Alleen, deze heb je nu via de instructie en in de software nog niet gebruikt.

per wiel een bots-schakelaar

per wiel een RGB led

servo – je zag misschien de servo bediening in de software

Hiermee mag je doen wat jij wilt. Zelf heb ik een paar suggesties:

De bots-schakelaar ziet dat de robot aan de betreffende kant tegen de muur aanloopt. De motor moet dan de andere kant op draaien tot de schakelaar niet meer is ingedrukt. Zo kan je jouw robot strak tegen een muur laten parkeren.

De RGB led geeft aan wat de motor aan het doen is.

Wit licht – koplampen, als de motor de ene kant op draait

Rood licht – achterlicht, als de motor de andere kant op draait

Oranje knipperlicht – als de schakelaar is ingedrukt

Relax, flow van zachte regenboog kleuren – motor staat stil en bots-schakelaar niet ingedrukt

Een servo uit je startpakket. Kijk eens of je deze kunt aansturen. De vier functies in je software zorgen dat je met de vier knoppen op je scherm de servo in een bijbehorende stand zet. Wat ga je bedienen, wat mis je nog om het te laten werken?

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. De bediening voor een grotere battlebot werkt natuurlijk hetzelfde, alleen de onderdelen zijn dan allemaal wat groter.

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.