Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Onderdelen en Benodigdheden

Onderdeel Aantal Opmerkingen
Arduino 101 1 Heeft een ingebouwde accelerometer, geen extra componenten nodig.
Arduino UNO 1 Je kunt een Arduino Uno (of andere Arduino) gebruiken in plaats van de Arduino 101, maar je hebt dan wel een accelerometer nodig.
Adafruit Analog Accelerometer: ADXL335 1 Gebruik deze (of de SparkFun equivalent) als je een andere Arduino dan de Arduino 101 gebruikt.
SparkFun Triple Axis Accelerometer Breakout - ADXL335 1 Gebruik deze (of de Adafruit equivalent) als je een andere Arduino dan de Arduino 101 gebruikt.

Over Dit Project

Overzicht

Deze tutorial laat zien hoe je basis gebarenherkenning in je Arduino-projecten kunt integreren met behulp van het ESP-systeem. Je kunt bijvoorbeeld verschillende tennisslagen herkennen (voorhand, backhand, serve), elementen van een dansroutine, gewichthefgesten, enz. De gebaren worden waargenomen met een accelerometer en naar de ESP-applicatie op je computer gestuurd. ESP gebruikt een simpel machine learning-algoritme om de live accelerometerdata te matchen met opgenomen voorbeelden van verschillende gebaren, en stuurt een bericht terug naar de Arduino wanneer het een gebaar herkent dat lijkt op een van de voorbeelden. Het systeem herkent alleen discrete, afzonderlijke gebaren; het geeft geen informatie over hoe het gebaar wordt uitgevoerd. Toch kan het voor een breed scala aan interactieve toepassingen gebruikt worden.

Download de ESP gebarenherkenning applicatie:

  • Mac: ESP-Gestures-Mac-20161028.zip
  • Windows: ESP-Gestures-Win-20161028.zip. Mogelijk heb je ook de Visual C++ Redistributable (Update 3) van Microsoft nodig.
  • Ubuntu: ESP-Gestures-Ubuntu-20161028.tar.gz
  • Voorbeeldgebaren: ForehandBackhandServe.grt

Stap 1. Sluit je accelerometer aan.

Als je de Arduino 101 gebruikt (met ingebouwde accelerometer), kun je deze stap overslaan. Anders moet je je accelerometer aansluiten. Soldeer eerst mannelijke headerpinnen op de breakout-board als dat nog niet gedaan is. Vervolgens draai je de accelerometer aan de Arduino.

Als snelheidskortsluiting kun je de accelerometer-breakout direct in de analoge ingangspinnen van de Arduino Uno steken (of andere Arduino met dezelfde vormfactor). In de Arduino-code configureer je dan de juiste pinnen om stroom en ground aan de accelerometer te leveren.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Alternatief kun je de accelerometer op een breadboard plaatsen en bedraden naar de Arduino: voeding en ground naar 5V en GND van de Arduino, en de X-, Y-, Z-as pinnen naar drie analoge ingangen.

Stap 2. Upload de Arduino-code.

Je kunt een van de onderstaande Arduino-programma's gebruiken om data van de accelerometer te lezen en via seriëel (USB) naar de computer te sturen. Controleer eerst of de pinnen in het programma overeenkomen met je bedrading (bijv. dat xpin correspondeert met de analoge ingang die verbonden is met de X-as van je accelerometer). (Dit geldt niet voor de Arduino 101, waar de accelerometer intern verbonden is.) Selecteer het juiste bord en seriële poort in het Arduino Tools-menu en upload de sketch.

Stap 3. Controleer data in de Seriële Monitor.

Open de Arduino Seriële Monitor, stel in op 9600 baud, en controleer of je accelerometerdata ontvangt. Je zou drie kolommen getallen moeten zien die veranderen wanneer je de accelerometer beweegt. Gebruik de Arduino Serial Plotter om een grafiek te zien.

Sluit de Seriële Monitor en Serial Plotter voordat je doorgaat, anders blokkeren ze de ESP-applicatie om met je Arduino te communiceren.

Stap 4. Start de ESP gebarenherkenning applicatie en selecteer je seriële poort.

Download de ESP-applicatie:

  • Mac: ESP-Gestures-Mac-20160812.zip
  • Windows: ESP-Gestures-Win-20160812.zip

Selecteer de seriële poort van je Arduino-bord in het configuratiemenu. (Klik op "Select a serial port" om de lijst te openen.)

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Je zou nu live data moeten zien streamen in de "Raw Data" plot. De drie lijnen corresponderen met de drie assen: rood = X-as, groen = Y-as, blauw = Z-as.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Stap 5. Neem kalibratiemonsters op.

Om de ESP-applicatie te laten begrijpen welke waarden te verwachten zijn, neem je een kalibratiemonster op. Leg de accelerometer op een vlakke ondergrond met de Z-as omhoeg. Houd de 1-toets ongeveer een seconde ingedrukt voor het "Upright" kalibratiemonster. Je ziet een plot van het monster verschijnen. Keer de accelerometer omgekeerd omheen, houd hem plat en stil, en houd de 2-toets ingedrukt voor het "Upside down" kalibratiemonster. Het ESP-systeem gebruikt deze data om te bepalen welke numerieke waarden overeenkomen met 0g versnelling (op X- en Y-as) en 1g (op Z-as).

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Stap 6. Neem voorbeeldgebaren op.

Ga naar het tabblad "Training" in de ESP-applicatie (klik erop of druk op hoofdletter T). Hier kun je voorbeelden opnemen of laden van de gebaren die je wilt herkennen. Je kunt maximaal negen verschillende gebaren opnemen.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Om een gebaar voorbeeld op te nemen, maak het gebaar terwijl je de toets ingedrukt houdt die bij het label hoort. Bijvoorbeeld: houd de 1-toets ingedrukt tijdens het maken van het gebaar voor label 1. (Je kunt ook de voorbeeld-tennisgebaren laden uit ForehandBackhandServe.grt.)

Zorg dat je de voorbeeldgebaren opneemt met de accelerometer in dezelfde configuratie als later tijdens herkenning (bijv. vastgehouden in je hand met een bepaalde oriëntatie, of bevestigd aan een object).

Een goed monster bevat de data van het volledige gebaar, zonder veel extra rustdata aan begin of eind. Het monster moet beginnen en eindigen met een korte periode van relatief vlakke lijnen, noch te lang noch helemaal afwezig. Als je gebaar eindigt op een andere plaats dan waar het begint, neem dan niet de tijd op dat je de accelerometer terugbrengt naar de startpositie. Bij een "swipe right" gebaar neem je alleen de beweging van links naar rechts op, niet de terugbeweging.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Elk extra voorbeeld is een extra monster waar het machine learning-algoritme tegenaan kan matchen. Als je wilt dat het systeem verschillende variaties van een gebaar herkent (bijv. verschillende manieren waarop verschillende mensen het maken), helpt het om monsters van elke variatie op te nemen. Aan de andere kant: slechte monsters kunnen het systeem verwarren; meer is niet per se beter. Over het algemeen werken 5 tot 10 monsters per gebaar goed, maar de kwaliteit van individuele monsters is belangrijker dan het aantal.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Als je een monster niet leuk vindt (bijv. toets op verkeerd moment ingedrukt), kun je het verwijderen via het "delete" vakje onder het monster. Je kunt een monster inkorten door op de plot te klikken en te slepen om het gewenste deel te selecteren, en vervolgens op "trim" te klikken. Navigeer tussen monsters met de pijltjes onder de plot. Als je een monster in de verkeerde klasse hebt opgenomen, kun je het verplaatsen met "re-label" en vervolgens de toets van het gewenste label indrukken. Om een gebaar te hernoemen, klik op "rename", typ de naam en druk Enter.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Stap 7. Train het systeem om gebaren te herkennen.

Zodra je een paar voorbeeldgebaren hebt opgenomen, druk je op de t-toets om het systeem te trainen. Je ziet "training successful" verschijnen. Nu, wanneer je een gebaar maakt dat lijkt op een van je opnames, verschijnt de naam ervan op de live sensor data plot.

Gebarenherkenning met ESP32 en Arduino 101 Accelerometer – Eenvoudige DIY Tutorial

Het systeem werkt misschien niet perfect de eerste keer. Het helpt om vaak te trainen en testen terwijl je voorbeelden opneemt, zodat je een gevoel krijgt voor het gedrag.

Als het systeem gebaren niet herkent die het wel zou moeten, voeg dan extra voorbeelden toe van dat gebaar. Als het systeem gebaren herkent wanneer het niet zou moeten, verwijder of knip dan voorbeelden die er anders uitzien of lange rustperiodes bevatten. Druk na wijzigingen weer op t om opnieuw te trainen.

Stap 8. Pas de systeemconfiguratie aan indien nodig.

Naast het aanpassen van trainingsvoorbeelden, kun je ook onderliggende parameters configureren. Klik op "click to open configuration". Je ziet twee parameters: variability en timeout. Na wijziging moet je opnieuw trainen met t.

  • Variability: hoe anders een gebaar mag zijn van een opgenomen voorbeeld en toch herkend worden. Hogere waarde = meer tolerantie. Als het systeem te strikt is, verhoog dit getal. Als het spatiere gebaren herkent, verlaag het (of verwijder slechte voorbeelden).
  • Timeout: hoe lang (in milliseconden) het systeem wacht na herkenning voordat het een nieuw gebaar accepteert. Als gebaren in snel opvolging gemist worden, verlaag de timeout. Let op: te laag kan een enkel gebaar meerdere keren laten herkennen. Als één gebaar meerdere keren herkend wordt, verhoog de timeout.

Stap 9. Integreer gebarenherkenning in je Arduino-project.

Wanneer het ESP-systeem een voorspelling doet, stuurt het een bericht naar de Arduino met het nummer van het herkende gebaar (als ASCII tekst met newline, bv. 1\n). Door deze voorspellingen op de seriële poort te lezen, kun je de Arduino laten reageren op het gebaar.

De voorspellingen worden ook via TCP gestuurd naar een server op localhost poort 5204 (in hetzelfde formaat). Dit kan bijvoorbeeld een spel in Processing of andere software zijn. Zorg dat de TCP-server draait voordat je de ESP-applicatie start.

Hoe Het Werkt

Deze ESP-applicatie gebruikt het Dynamic Time Warping (DTW) algoritme. Dit algoritme vervormt het live sensorafsignaal door individuele metingen te elimineren of te dupliceren, genereert een array van variaties en controleert hoe vergelijkbaar ze zijn met de getrainde monsters. Het zoekt het trainingsmonster dat het dichtst bij de live data ligt. Als het verschil onder een bepaalde drempel ligt, wordt het als match beschouwd en wordt een voorspelling uitgegeven voor de bijbehorende trainingsklasse. Je kunt de benodigde afstand instellen met de parameter "variability" in het configuratiemenu.

Gebarenherkenning is slechts één domein waarvoor het ESP-systeem toepasbaar is. ESP is gebouwd op de Gesture Recognition Toolkit (GRT), die ondanks de naam een breed scala aan machine learning-algoritmes bevat voor real-time sensing-toepassingen. ESP vertaalt code voor een specifieke applicatie naar een aangepaste gebruikersinterface voor die machine learning-pijplijn. Deze applicatie-specifieke programma's bevatten een GRT-pijplijn, specificatie van sensorinvoeren, definitie van het kalibratieproces, en specificaties voor afstelbare parameters. Er zijn ESP-voorbeelden voor kleurensensing, houdingdetectie met accelerometers, en eenvoudige audioherkenning. Zie de ESP GitHub voor meer informatie.

Code

Arduino ADXL335 Code

Deze code leest van een ADXL335 aangesloten op een Arduino: de X-as pin van de accelerometer moet verbonden zijn met pin A5 van de Arduino, de Y-as met A4, en de Z-as met A3. Metingen worden via de seriële (USB) poort verstuurd op 9600 baud, als tab-gescheiden, newline-getermineerde ASCII-data.

Arduino 101 Accelerometer Code

Leest accelerometerdata van de ingebouwde accelerometer op een Arduino 101. De metingen worden via de seriële (USB) poort op 9600 baud verstuurd als newline-getermineerde, tab-gescheiden ASCII-data.

Productieproces

  1. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  2. Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
  3. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  4. Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
  5. Nauwkeurige Frequentie- en Duty Cycle-meting met Arduino UNO
  6. Bestuur een Arduino-rover naadloos met Firmata en een Xbox One-controller
  7. Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
  8. Naadloze LED-dimmer met Bolt IoT en Arduino UNO
  9. Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
  10. Spraakherkenning & Synthese Meesteren op Arduino Due
  11. Bouw een Real-time Digitale Kompas met Arduino & Processing