In de vorige blogpost werd de bionische spin bestuurd met een zelfgebouwde controller die het ESPNOW-protocol gebruikte.
Dit maakt een eenvoudige apparaat-naar-apparaat verbinding mogelijk zonder dat je verbonden hoeft te zijn met een netwerk.
In deze blog gebruiken we het UDP internetprotocol om gegevenspakketten uit te wisselen tussen de microcontrollers. Hiervoor moeten de afstandsbediening en de spin zich in hetzelfde netwerk bevinden.
Deze kleine beperking heeft echter ook het voordeel dat het bereik met repeaters en toegangspunten in je thuisnetwerk meestal groter en uitgebreider is, wat betekent dat een verbinding zelfs over een grotere afstand dan de zichtlijn tot stand kan worden gebracht.
Hardware
Als u de controller al hebt geïnstalleerd in de Blog kun je het volgende gedeelte overslaan en doorgaan met de software.
Er zijn twee versies van de joystick beschikbaar: aan de ene kant de KY-023 module worden gebruikt. Maar omdat dit opnieuw veel bekabeling vereist, raden we de PS2 joystick schilddie ook rechtstreeks op een microcontroller kan worden aangesloten met Uno lay-out kan worden aangesloten.
Aangezien de microcontroller moet communiceren met de robot, is een microcontroller met WiFi-functionaliteit vereist. Verder zijn er twee ADC's nodig voor elk van de X- en Y-assen, daarom moet hier een ESP32 worden gebruikt.
(De ESP8266 heeft slechts één ADC-ingang).
Voor de realisatie van het project heb je nodig:
(optioneel) 9V blokbatterij + Batterijclip
en natuurlijk een geassembleerd exemplaar Bionische Spider Robot Kit
Aangezien de analoge ingangen van de twee assen van de joystick verbonden zijn met GPIO 2 en 4, die verbonden zijn met ADC2, kunnen deze niet gelijktijdig met de WLAN-module gebruikt worden. De aansluitingen IO 34 en IO35 (ADC1) bevinden zich hier echter direct naast, zodat de functionaliteit eenvoudig kan worden ingesteld via een draadjumper.

Afbeelding 1: Draadbrug tussen de aansluitingen
Sluit de aansluitingen aan zoals hierboven getoond.
Omdat de on-board LED is verbonden met GPIO 2, moet de pin hier worden verwijderd omdat de verbinding anders de waarde van de spanning op de X-as zou beïnvloeden.
Hetzelfde geldt voor pin D12, omdat deze het opstartproces verstoort en er dus niet opgestart kan worden met het shield aangesloten. De middelste knop van de joystick is verbonden met deze aansluiting en kan dus niet meer gebruikt worden. Als je dit toch wilt implementeren, moet het opnieuw verbonden worden met een vrije aansluiting.

Afbeelding 2: Schild met wijzigingen
De afscherming kan gewoon op de D1 R32 worden aangesloten. Zorg ervoor dat de kleine schakelaar in de linkerhoek is ingesteld op 3v3 Anders kan de ESP32 beschadigd raken door de te hoge spanning van 5V.
Software
Als je voor de eerste keer een ESP32/ESP8266 in de Arduino IDE programmeert, kopieer dan de volgende URL's in de Arduino IDE onder: File->Preferences->Additional boards manager URLs : https://dl.espressif.com/dl/package_esp32_index.json
http://arduino.esp8266.com/stable/package_esp8266com_index.json
en installeer het ESP32- en ESP8266-pakket in het bordbeheer.
Voor de communicatie worden de gegevenspakketten uitgewisseld met UDP. Met dit communicatieprotocol worden de pakketten eenvoudig verzonden zonder te controleren of het pakket is ontvangen.
Dit maakt gegevensuitwisseling erg snel, maar ook onveilig, omdat het niet mogelijk is om te bepalen of de ontvanger de gegevens daadwerkelijk ontvangt.
De bibliotheek voor UDP-communicatie is al opgenomen in de uitgebreide bordpakketten voor de ESP8266 en ESP32.
In de ESPnow-blog was het MAC-adres van de microcontroller nodig voor de communicatie.
Bij communicatie via UDP is alleen het IP-adres van de ontvanger vereist. Dit wordt automatisch toegewezen via de DHCP-server van de router wanneer je verbinding maakt met het thuisnetwerk (WLAN).
Het IP-adres kan worden bepaald via de gebruikersinterface van je router, maar wordt ook weergegeven op de seriële monitor aan het begin van het ontvangerprogramma.
Code bionische spin
Laad de volgende code op de ESP8266 van de Bionic Spider kit door de juiste poort en het juiste bord te selecteren in de Arduino IDE.
|
#include <ESP8266WiFi.h> |
Uitleg:
De vereiste bibliotheken worden aan het begin geïntegreerd. Het bestand commando's.h met de bewegingssequenties is samen met de code te vinden in de download aan het einde van deze sectie.
Vervolgens worden de WLAN-toegangsgegevens gedefinieerd en wordt een variabele voor het ontvangen commando gedeclareerd. Het object voor de UDP-bibliotheek wordt ook aangemaakt.
In setup() wordt de microcontroller verbonden met het WLAN en worden de afzonderlijke servomotoren geïnitialiseerd.
In de loop() worden de inkomende gegevenspakketten overgedragen van de afzender naar de cmd string opgeslagen. Deze wordt vervolgens geanalyseerd door de if-query's en de bijbehorende opdracht wordt uitgevoerd. Zodra het commando is uitgevoerd, wordt er een bevestiging teruggestuurd naar de controller.
Je kunt de volledige code downloaden hier download.
Voer uw WLAN-toegangsgegevens in het programma in, in plaats van de plaatshouders.
Open na het uploaden naar de microcontroller de seriële monitor en noteer het IP-adres dat wordt weergegeven.
Als dit niet aan het begin wordt weergegeven, kun je de twee regels aan het begin in de loop() gebruiken voor de uitvoer.
Code controleur
|
#include <WiFi.h> |
Uitleg:
Eerst worden de vereiste bibliotheken geïntegreerd, macro's aangemaakt voor de pinnen van de verschillende knoppen en de WLAN-toegangsgegevens en het IP-adres van de ontvanger gedeclareerd. Vervolgens worden de globale variabelen voor de kalibratie van de assen van de joystick, het te verzenden commando en voor de implementatie van het bevestigingsbericht gedeclareerd.
In setup() wordt de microcontroller verbonden met het WLAN, worden de assen van de joystick gekalibreerd en worden de digitale ingangen gedefinieerd.
In de loop() wordt de positie van de joystick eerst uitgelezen als een analoge waarde en opgeslagen in overeenkomstige variabelen.
Dit wordt gevolgd door een controle, waarbij de verzendstatus na een time-out van 10 seconden wordt gereset.
Het evaluatiealgoritme voor de bewegingsrichting controleert of de waarden van de assen een grenswaarde van 50 overschrijden. Dit is nodig omdat zowel de potentiometers, die worden gebruikt om de positie van de assen uit te lezen, als de analoog-digitaalomzetters (ADC) minimaal rond de nulwaarde bewegen, zelfs in de nulpositie (zogenaamde drifting).
Als een as boven de drempelwaarde ligt, worden de waarden van de magnitude van de twee assen met elkaar vergeleken. Op deze manier kan worden bepaald welke as het meest heeft bewogen en dus richtinggevoelig is.
Bovendien worden de digitale ingangen uitgelezen en wordt de bijbehorende opdracht (knopaanduiding) opgeslagen in de variabele msg wanneer er op een knop wordt gedrukt.
Tenslotte wordt het commando naar de robot gestuurd als een UDP pakket.
Als de ontvanger het commando heeft uitgevoerd, stuurt hij een bevestiging terug naar de zender. Als deze wordt ontvangen, wordt de variabele status weer op Echt waardoor het mogelijk is om opnieuw te verzenden.
Je kunt het hele programma downloaden hier download.
Upload deze met de juiste WLAN toegangsgegevens en IP-adres naar de ESP32 D1 R32 door de juiste poort te selecteren.
Conclusie
In deze blogpost heb je geleerd hoe je de bionische Spider-robot kunt besturen met behulp van het UDP-communicatieprotocol.
Natuurlijk legt dit project alleen de basis voor je eigen uitbreidingen en aanpassingen. Je kunt bijvoorbeeld een microcontroller in AP-modus laten werken om niet afhankelijk te zijn van een externe router.
Dus naast ESP's eigen ESPnow communicatieprotocol met UDP, heb je ook kennis gemaakt met een zeer wijdverbreid protocol dat in veel tijdkritische toepassingen wordt gebruikt.
Veel plezier met herbouwen :)






