Inhoudsopgave:

ESP32 Camera Robot - FPV - Ajarnpa
ESP32 Camera Robot - FPV - Ajarnpa

Video: ESP32 Camera Robot - FPV - Ajarnpa

Video: ESP32 Camera Robot - FPV - Ajarnpa
Video: ESP32 Camera Robot FPV 2024, November
Anonim
Image
Image
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV

De ESP32 Cameramodule is een goedkope en krachtige PLC. Het bevat zelfs gezichtsherkenning!

Laten we een First Person Viewpoint-robot bouwen die u via een ingebouwde webinterface bestuurt!

Dit project maakt gebruik van de Geekcreit ESP32-module met OV2640-camera. Het is gebaseerd op de AIThinker-module.

Er zijn veel verschillende ESP32-cameraklonen. Sommige werken, andere niet. Ik stel voor dat je dezelfde module gebruikt als ik, zodat je een goede kans hebt om succesvol te zijn.

De robot werkt als volgt.

De ESP32 zendt een web-URL uit naar uw netwerk die de live videostream presenteert met enkele selectievakjes voor het bedienen van sommige functies van de camera. Het ontvangt ook toetsaanslagen die vanaf het toetsenbord naar de webpagina worden verzonden en die richtingsopdrachten voor de robot zijn. Misschien wilt u het USB-joystick-schild zo bouwen dat u de robot met de joystick kunt besturen in plaats van toetsenbordcommando's te typen.

Wanneer de ESP32 toetsaanslagen ontvangt, stuurt hij die bytes door naar de Arduino Nano, die vervolgens de motoren aandrijft om de robot te laten bewegen.

Dit project heeft een matige tot hoge moeilijkheidsgraad. Neem je tijd.

Laten we beginnen!

Benodigdheden

  • ESP-32 Cameramodule met OV2640 Camera - Ik zou het Geekcreit-product aanbevelen
  • Externe klikantenne voor de ESP-32 om de signaalsterkte te maximaliseren
  • Arduino Nano
  • Arduino Leonardo voor de Joystick-module (we hebben USB-toetsenbordemulatie nodig die door de Leonardo wordt geleverd)
  • Generieke joystickmodule
  • L293D Quad H-bridge-chip
  • DC-DC Buck Coverter met 5V-uitgang om de ESP32. van stroom te voorzien
  • FTDI Seriële Adapter voor het programmeren van de ESP32
  • Een generiek robotchassis met twee motorreductoren - elk chassis werkt. 3 tot 6V motoren worden aanbevolen
  • 2 x 7.4V 1300mAh LiPo-batterijen (of vergelijkbaar) om de ESP32 en de motoren van stroom te voorzien
  • 1 x 9V batterij om de Arduino Nano van stroom te voorzien

Stap 1: Programmeer de ESP32-camera

Programmeer de ESP32-camera
Programmeer de ESP32-camera
Programmeer de ESP32-camera
Programmeer de ESP32-camera

Gebruik een breadboard om uw ESP32-camera als volgt op de FTDI-adapter aan te sluiten:

FTDI ESP32

3.3V ----------- 3.3V

GND ----------- GND

TX ----------- U0R

Rx ----------- U0T

Sluit bovendien pin IO0 ("eye-oh-zero") aan op GND. Dit moet u doen om de ESP32 in de programmeermodus te zetten.

Pak het bestand esp32CameraWebRobotforInstructable.zip uit.

Er zijn 4 bestanden in dit project:

esp32CameraWebRobotforInstructable.ino is de Arduino-schets.

ap_httpd.cpp is de code die de webserver beheert en zich bezighoudt met het instellen van de camerafuncties van de webpagina en het ontvangen van toetsaanslagen van de webpagina.

camera_index.h bevat de HTML/JavaScript-code voor de webtoepassing als byte-arrays. Het aanpassen van de webapplicatie valt ver buiten de scope van dit project. Ik zal later een link toevoegen voor het wijzigen van de HTML/JavaScript.

camera_pins.h is het headerbestand dat betrekking heeft op de pinconfiguratie van de ESP32-camera.

Om de ESP32 in de programmeermodus te zetten, moet u IO0 ("eye-oh-zero") verbinden met Ground.

Start uw Arduino IDE en ga naar Tools/Boards/Boards Manager. Zoek naar esp32 en installeer de esp32-bibliotheek.

Open het project in uw Arduino IDE.

Plaats de netwerk-ID van UW router en UW wachtwoord in de regels die in de bovenstaande afbeelding zijn gemarkeerd. Sla het project op.

Ga naar het menu Extra en maak de selecties zoals weergegeven in de bovenstaande afbeelding.

Bord: ESP32 Wrover

Uploadsnelheid: 115200

Partitieschema: "Grote APP (3MB geen OTA)"

en kies de poort waarop uw FTDI-adapter is aangesloten.

Klik op de knop "Uploaden".

Nu begint de ESP32 soms niet met uploaden. Dus wees klaar om op de RESET-knop op de achterkant van de ESP32 te drukken wanneer u tijdens het uploaden de …---… tekens in de console ziet verschijnen. Het zal dan beginnen met uploaden.

Als je op de console 'press RST' ziet staan, is de upload voltooid.

VERBIND IO0 van aarde. Ontkoppel de 3.3V-lijn tussen de FTDI-adapter en de ESP32.

De ESP32-camera heeft veel stroom nodig om goed te werken. Sluit een 5V 2A-voedingsadapter aan op de 5V- en GND-pinnen op de ESP32.

Open de seriële monitor, stel de baudrate in op 115200 en kijk hoe de ESP32 opnieuw opstart. Uiteindelijk ziet u de URL voor de server.

Ga naar uw browser en voer de URL in. Wanneer de website wordt geladen, klikt u op de knop 'Start Streaming' en de live videostream zou moeten beginnen. Als u het selectievakje 'Floodlight' aanklikt, moet de ingebouwde flits-LED gaan branden. Kijk uit! HET IS HELDER!

Stap 2: Bouw de robot

Bouw de robot
Bouw de robot

Je hebt een tweewielig robotchassis nodig. Iedereen zal het doen. Monteer het chassis volgens de instructies van de fabrikant.

Sluit de robot vervolgens aan volgens het schema. Laat de batterijaansluitingen nu staan.

De L293D wordt gebruikt om de motoren aan te sturen. Merk op dat de halve inkeping op de chip NAAR de ESP32 is.

Meestal zijn er 6 pinnen nodig op de Arduino om twee motoren te besturen.

Deze robot heeft slechts 4 pinnen nodig en werkt nog steeds volledig.

Pins 1 en 9 zijn verbonden met de 5V-bron van de Arduino, zodat ze permanent HOOG zijn. Door de robot op deze manier te bedraden, hebben we twee pinnen minder op de Arduino nodig om de motoren te besturen.

In voorwaartse richtingen zijn de INPUT-pinnen ingesteld op LAAG en de pinnen van de pulsgolfmodulatie van de motor zijn ingesteld op waarden tussen 0 en 255, waarbij 0 UIT betekent en 255 maximale snelheid betekent.

In omgekeerde richting worden de INPUT-pinnen op HOOG gezet en worden de PWM-waarden omgekeerd. 0 betekent maximale snelheid en 255 betekent uit.

Pak de ArduinoMotorControl-schets uit en upload deze naar de Arduino Nano.

Stap 3: HEE! Wacht even! Waarom heb ik een Arduino Nano nodig?

Je denkt waarschijnlijk: "Hé! Er zijn minstens 4 IO-pinnen beschikbaar op de ESP32-camera. Waarom kan ik ze niet gebruiken om de motoren te besturen?"

Nou, het is waar, er zijn pinnen op de ESP32 als volgt:

IO0 - nodig om de ESP32 in programmeermodus te zetten

IO2 - beschikbaar

IO4 - de flits-LED

IO12, IO13, IO14, IO15, IO16 - extra GPIO-pinnen.

Als je gewoon een basisschets op de ESP32 laadt om de pinnen met PWM-commando's te bedienen, werken ze wel.

ECHTER, zodra u de CAMERA-bibliotheken in uw schetsen activeert, zijn deze pinnen niet langer beschikbaar.

Het eenvoudigste is dus om gewoon een Nano te gebruiken om de motoren via PWM te besturen en de commando's van de ESP32 via seriële communicatie over één draad (ESP32 U0T naar Arduino Rx0) en GND te verzenden. Erg makkelijk.

Stap 4: Sluit de USB-joystick aan (optioneel)

U kunt de robot besturen door als volgt toetsaanslagen naar de webpagina te sturen:

8 - Vooruit

9 - Vooruit rechts

7 - Vooruit links

4 - Linksom draaien

5 - Stop

1 - Achteruit links

2 - Achteruit

3 - Rechts achteruit.

De USB-joystick-schets vertaalt joystickinvoer naar toetsaanslagen en stuurt ze naar de webinterface die ze doorstuurt naar de Arduino om de robot aan te drijven.

Sluit de joystick als volgt aan op de Arduino LEONARDO:

Leonardo-joystick

5V ---------- VCC

GND ---------- GND

A0 ---------- VRx

A1 ---------- VRy

Open de usbJoyStick-schets, selecteer Arduino Leonardo als het bord en upload het naar de Leonardo.

Als u het wilt testen, opent u gewoon een teksteditor op uw computer, klikt u met de muis in het venster en begint u de joystick te bewegen. U zou de waarden van 1 tot 9 in het venster moeten zien verschijnen

Stap 5: LATEN WE RIJDEN

Neem de tijd en ga over uw bedrading om ervoor te zorgen dat alles correct is.

Sluit vervolgens uw batterijen als volgt aan.

1. Schakel de ESP32-camera in. Het heeft enkele seconden nodig om de webserver te starten.

2. Zet de Arduino Nano aan.

3. Schakel de motoren in.

Start uw browser en ga naar de URL voor de ESP32.

Klik op de knop Streamen starten.

Klik met je muis ergens in het browserscherm zodat het scherm nu de focus is.

Begin met het besturen van je robot met de joystick (of toetsenbord).

Ik heb geconstateerd dat de standaard framegrootte goed werkt voor het redelijk responsief uitzenden van de live video via wifi. Maar naarmate je de framegrootte vergroot, wordt de stream schokkeriger omdat je grotere afbeeldingen probeert uit te zenden.

Dit is een uitdagend project dat je de mogelijkheid geeft om aan de slag te gaan met live videostreaming en het besturen van een robot via wifi. Ik hoop dat je het leuk vond!

GA NU IETS PRACHTIG MAKEN!

Update januari 2020 - De laatste foto's tonen de definitieve versie van de robot, hard gesoldeerd en stevig op het chassis gemonteerd.

De drie aan de voorzijde gemonteerde schakelaars zijn als volgt:

Links - Motorstroomaccu

Center - Arduino-batterij

Rechts - ESP32 Camera Batterij

Ik zou een grote batterij kunnen gebruiken met een paar buck-boost-transformatoren (ik gebruik er een voor de ESP32 - het staat rechtsonder op de vooraanzichtfoto), maar voor de eenvoud bewaar ik gewoon de 3 batterijen.

Robot nu op Access Point

Ik vind het omslachtig om deze robot buiten mijn huis te demonstreren, omdat ik op mijn schoolbedrijfsnetwerk geen verbinding kan maken met de robotwebserver. Als oplossing heb ik onderzoek gedaan naar het gebruik van de Access Point-functie van de ESP32-webserver. Het kost wat werk, maar vereist vrij minimale wijzigingen in de hoofdschets van de robot om de ESP32 zijn eigen IP-adres te laten uitzenden. Het is niet zo krachtig als een speciale high-speed wifi-hub (soms blijft hangen als je te snel beweegt), maar het werkt best goed en nu kan ik de robot overal demonstreren waar ik maar wil zonder hem op een netwerk aan te sluiten! Als je de robot eenmaal aan het werk hebt, probeer hem dan zelf om te zetten in Access Point!

Stap 6: Details over het wijzigen van de HTML/Javascript-code voor de webserver

Dit is niet nodig, maar ik heb wat verzoeken gehad.

Ik heb dit Google-document voorzien van details over het gebruik van CyberChef om heen en weer te converteren tussen HTML/Javascript en de bytearray-representaties in het bestand camera_index.h.

Aanbevolen: