Ontwerp snel en eenvoudig uw eigen betaalbare 3D gebarenbesturing
Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey
2019-08-13
We communiceren meestal met machines en embedded apparaten via knoppen, toetsen, hendels en touchscreens. Dankzij recente verbeteringen in sensortechnologie kunnen ontwikkelaars nu driedimensionale (3D) gebarenbesturing aan hun producten toevoegen.
Afhankelijk van de technologie die wordt gebruikt, kunnen de kosten voor aanschaf en integratie van gebarenbesturing flink oplopen. Er zijn echter tal van technologieën beschikbaar op het gebied van gebarensensoren, variërend van goedkope sensoren die infrarood-leds en fotodiodes gebruiken om beweging te detecteren tot dure camera's met gebaarherkenning. Infrarood gebarensensoren zijn goedkoop en kunnen digitaal aan een low-cost microcontroller worden gekoppeld. Bovendien zijn deze sensoren met maar een beetje software nauwkeurig genoeg voor tal van toepassingen.
Dit artikel behandelt gebarenbesturing met behulp van de Broadcom APDS-9960, een infrarood (IR) gebarenbesturingssensor die eenvoudig in nagenoeg elk embedded systeem kan worden geïntegreerd.
IR-gebarensensoren
De theorie achter een infrarood gebarensensor is relatief eenvoudig. Bij het detecteren van handgebaren richten ontwikkelaars zich meestal op de volgende bewegingen:
- Omhoog/omlaag
- Links/rechts
- Vooruit/achteruit
In elk van deze gevallen moet de sensor de bewegingsrichting kunnen detecteren. Hiervoor gebruikt de sensor twee soorten componenten: een lichtemiterende diode (led) en diverse directionele fotodiodes. Directionele fotodiodes zijn simpelweg vier of meer fotodiodes die op een vooraf bepaalde afstand van de IR-led zijn geplaatst. De fotodiodes voor de omgevingslicht-, nabijheid- en gebarensensoren op de Broadcom APDS-9960 zijn bijvoorbeeld in een ruitpatroon geplaatst, waarbij elke diode een richting aanduidt, zoals omhoog, omlaag, links en rechts (Afbeelding 1).
Afbeelding 1: De Broadcom APDS-9960 bevat een geïntegreerde IR-led en vier directionele fotodiodes die gereflecteerde IR-energie detecteren. Deze energie kan vervolgens worden geanalyseerd op een gebarenprofiel. (Bron afbeelding: Broadcom)
De door de led uitgezonden infraroodenergie wordt door een voorwerp, zoals een hand, gereflecteerd. Vervolgens meet de fotodiode de gereflecteerde energie bij verschillende intensiteiten, afhankelijk van waar het voorwerp zich bevindt. Zo zal een fotodiode aan het begin van het gebaar aanvankelijk minder gereflecteerde energie ontvangen dan een fotodiode aan het eind. Dit betekent dat de ene fotodiode een hogere count-waarde registreert dan de andere. Door gedurende een langere periode metingen uit te voeren terwijl het gebaar wordt gemaakt, detecteren de verschillende fotodiodes diverse gereflecteerde intensiteiten. Deze directionele informatiestroom kan daarna worden geanalyseerd om het gebaar te bepalen.
Zeg dat een gebruiker bijvoorbeeld zijn of haar hand van boven naar beneden over de sensor veegt. De fotodiode voor omlaag detecteert dan aan het begin van het gebaar meer gereflecteerde energie dan de fotodiode voor omhoog. Terwijl het gebaar plaatsvindt, is er een moment waarop beide diodes evenveel energie detecteren. Nadat het gebaar is voltooid, ontvangt de fotodiode voor omlaag minder gereflecteerde energie dan de fotodiode voor omhoog, zodat de curve en de fase voor de fotodiodes is omgekeerd (Afbeelding 2).
Afbeelding 2: Een neerwaarts gebaar over de Broadcom APDS-9960 genereert deze fotodiodecurven waarbij de voorste curve de richting van het gebaar aangeeft. (Bron afbeelding: Broadcom)
Nu we weten hoe de gegevens voor een gebaar worden gegenereerd, bekijken we vervolgens hoe de interface naar de APDS-9960 werkt.
Interface naar de Broadcom APDS-9960-gebarenbesturing
De APDS-9960 wordt geleverd als opbouwmontagepakket met acht pennen (SMD-8) dat zeer weinig ruimte op de printplaat inneemt (Afbeelding 3). De sensor meet slechts 3,94 x 2,36 x 1,35 millimeter (mm). Het pakket bevat de normale voedings- en aardpennen samen met een I2C-interface voor een digitale verbinding met een microcontroller en pennen voor het aanpassen van de led-stuurschakelingen. Het pakket bevat ook een interrupt-pen om de microcontroller te laten weten wanneer er gebaren beschikbaar zijn om te verwerken.
Afbeelding 3: De APDS-9960 wordt geleverd in een compact SMD-8 opbouwmontagepakket dat zeer weinig ruimte op de printplaat inneemt. (Bron afbeelding: Broadcom)
Voor het bouwen van een prototype met interface naar de APDS-9960 zijn verschillende opties beschikbaar. HetSparkFun APDS-9960 evaluatieboard bestaat bijvoorbeeld uit een relatief klein breakout-board met led-stuurschakelingen, die gebruiksklaar worden geleverd (Afbeelding 4). Ontwikkelaars hoeven alleen een pinheader voor de voedingsjumper en aarde te solderen. Nadat de I2C-bus en optionele interrupt-pen op een microcontroller zijn aangesloten, kan met ontwikkelen van de embedded software worden gestart. Het SparkFun-board bevat montagegaten zodat deze snel en eenvoudig in een ontwerp kan worden geplaatst als gebruik van een bestaand board zinvol is voor de toepassing.
Afbeelding 4: Het APDS-9960 evaluatieboard van SparkFun is uitgerust met alle on-board schakelingen die nodig zijn voor gebarenbesturing. (Bron afbeelding: DigiKey)
Als alternatief is er nog een andere totaaloplossing, namelijk het Adafruit APDS-9960 breakout-board (Afbeelding 5). Het Adafruit breakout-board is met name interessant omdat deze niet alleen klein is, maar ook een ingebouwde 3 V-regelaar bevat die kan worden gebruikt om extra circuits aan te sturen, zoals een power-led of zelfs een low-power microcontroller. Bovendien hebben ontwikkelaars toegang tot een volledige gebruikershandleiding voor het Adafruit APDS-9960 breakout-board evenals diverse softwarebibliotheken voor aansluiting op Arduino-boards of ontwikkelingsboards die Python runnen. Hierdoor is gebruik van de APDS-9960 een geweldige out-of-the-box ervaring en wordt de hoeveelheid tijd die een ontwikkelaar besteedt om een begin te maken met de sensor drastisch verminderd.
Afbeelding 5: Het Adafruit APDS-9960 breakout-board bevat de APDS-9960 samen met een ingebouwde 3 V-regulator en I2C-spanningsomzettercircuits voor het ondersteunen van 3 V- of 5 V-bussen. (Bron afbeelding: DigiKey)
De eenvoudigste manier om een interface te maken naar deze breakout-boards is door Molex 22-28-4255 breakaway-headers aan de boards te solderen. Dit kan het beste worden gedaan met de headers naar beneden gericht, wat verschillende voordelen biedt. Ten eerste kan het board worden aangesloten op een breadboard zoals de Digilent 340-002-1 soldeerloos breadboardset (Afbeelding 6) Ten tweede blijft zo de bovenkant van het board vrij, waardoor er voldoende ruimte is om handgebaren te maken zonder per ongeluk de draden van de headers aan te raken.
Afbeelding 6: Het Adafruit APDS-9960 breakout-board met gesoldeerde headers op een Digilent soldeerloos breadboard. (Bron afbeelding: Adafruit)
Vervolgens worden de voeding en aarde aangesloten en de I2C-lijnen verbonden met het gewenste microcontroller-ontwikkelingsboard. Elk willekeurig ontwikkelingsboard met een microcontroller kan worden gebruikt. Een goede keuze is echter de B-L475E-IOT01A2 STM32L475 IoT Discovery Kit for IoT Node van STMicroelectronics (Afbeelding 7). Dit ontwikkelingsboard heeft Arduino-headers en wordt ook ondersteund door MicroPython, wat snel en eenvoudig op het bord kan worden geprogrammeerd. Zodra dat is klaar is, kan door middel van Python-scripts worden gecommuniceerd met de gebarensensor, waardoor gebarenbesturing niet alleen haalbaar, maar nagenoeg triviaal wordt.
Afbeelding 7: De STM32L475 Discovery Kit for IoT Node bevat Arduino-headers voor een eenvoudige interface naar de APDS-9960 breakout-boards. (Bron afbeelding: STMicroelectronics)
Gebaren detecteren met Python
Gebarengegevens verzamelen met de APDS-9960 is niet moeilijk, maar een ontwikkelaar moet wel even de datasheet zorgvuldig doorlezen. De APDS-9960 biedt verschillende mogelijkheden, waaronder:
- Gebarendetectie
- Omgevingslichtdetectie
- RGB-kleurdetectie
- Nabijheidsdetectie
Deze worden allemaal bestuurd via een statusmachine die afhankelijk is van hoe de registers voor de toepassing zijn ingesteld. Een uitstekende techniek om te voorkomen dat de gebarenengine continu werkt, is het gebruik van de nabijheidsdetectie-engine die detecteert wanneer een hand aanwezig is. Zodra de gereflecteerde IR-energie een vooraf ingestelde count-waarde bereikt, verandert de status van de nabijheidsdetectie-engine naar de gebarenengine, die de directionele fotodiodes meet en de gemeten waarde in een FIFO-buffer (first-in, first-out) plaatst. Deze functie wordt ingeschakeld door het besturingsregister zo in te stellen dat nabijheidsdetectie mogelijk is. Ook moet een count-drempelwaarde worden ingesteld.
Afhankelijk van de gebaren die voor de toepassing nodig zijn, moet een ontwikkelaar wellicht algoritmen schrijven om specifieke gebaren te detecteren. Voor gangbare gebaren zoals omhoog/omlaag en links/rechts kunnen ontwikkelaars de Adafruit APDS-9960 CircuitPython-bibliotheek gebruiken. Nadat de bibliotheek naar het Python-apparaat is gekopieerd, kan deze worden geïmporteerd met behulp van de code in Listing 1. Deze code importeert de APDS-9960-bibliotheek samen met verschillende bibliotheken die de I2C-bus ondersteunen.
Copy import board import busio import adafruit_apds9960.apds9960 i2c = busio.I2C(board.SCL, board.SDA) sensor = adafruit_apds9960.apds9960.APDS9960(i2c)
Listing 1: De geïmporteerde CircuitPython-code en de bibliotheekinitialisatiecode voor de interface naar de APDS-9960-gebarenbesturing. (Bron afbeelding: Adafruit)
Het sensorobject is een exemplaar van de APDS-9960-bibliotheek. We zullen zo zien dat deze heel gemakkelijk te gebruiken is. Om gebaren te kunnen gebruiken, hoeft een ontwikkelaar alleen met behulp van de volgende code de gebarenfunctie in te schakelen:
Copy sensor.enable_gesture = True De centrale programmaloop om het gebaar te lezen is zelf maar een paar regels lang (Listing 2).
gesture = sensor.gesture() while gesture == 0: gesture = sensor.gesture() print('Saw gesture: {0}'.format(gesture))
Listing 2: Een gebaar detecteren is eigenlijk gewoon het herhaaldelijk aanroepen van een enkele bibliotheekmethode. (Bron afbeelding: Adafruit)
Zoals u in deze code ziet, wordt een gedetecteerd gebaar op het scherm afgedrukt Afbeelding 8).
Afbeelding 8: Voorbeeld van een gebarenuitvoerresultaat uit de Adafruit APDS-9960 CircuitPython-bibliotheek. (Bron afbeelding: Adafruit)
De gebarenuitvoer wordt weergegeven met een nummer, dat op de volgende manier kan worden geconverteerd:
0 = Geen gebaar gedetecteerd
1 = Gebaar omhoog gedetecteerd
2 = Gebaar omlaag gedetecteerd
3 = Gebaar naar links gedetecteerd
4 = Gebaar naar rechts gedetecteerd
Zoals u kunt zien, kan het gebruik van een bestaande bibliotheek gebaarherkenning met slechts een paar regels code eenvoudiger maken. Voor complexere gebaren moet de bibliotheek worden aangepast om de onbewerkte gebarengegevens te analyseren.
Tips en trucs voor het maken van een gebarenbesturing
Het bouwen en integreren van een gebarensensor in een product gaat niet vanzelf. Hier volgen een paar ‘tips en trucs’ waar ontwikkelaars rekening mee moeten houden bij het werken met infrarood gebarenbesturing:
- Activeer de gebarenengine met de interne nabijheidsdetector van de gebarensensor om een ongeldige gebarenstart te voorkomen.
- Begin met een bestaande gebarenbibliotheek en voeg nieuwe gebaren aan de reeds bestaande mogelijkheden toe.
- Stel de versterking op de fotodiodes in op waarden die het beste bij de eindtoepassing passen.
- Stel de intensiteit van de led-uitvoer in op waarden die het beste bij de toepassing passen. Om reproduceerbare resultaten te krijgen, kunnen verschillende aanpassingen nodig zijn.
- Ontwikkelaars kunnen bij het ontwikkelen van een gebarentoepassing het beste beginnen met software op hoog niveau tot ze begrijpen hoe de sensor werkt en daarna verdergaan met code op lager niveau.
Door deze tips te volgen, kunnen ontwikkelaars de tijd die ze besteden om een IR-gebarenbesturing werkend te krijgen, minimaliseren.
Conclusie
De voortdurende druk om natuurlijker en intuïtiever met machines te communiceren, heeft geleid tot een belangrijke ontwikkeling in het gebruik van gebarenbesturingstechnologie. Hoewel er veel verschillende soorten gebarenbesturing zijn, zijn infrarood gebarensensoren het goedkoopst en het eenvoudigst om mee te werken. Zoals hier is aangetoond, hoeft de integratie van een gebarensensor met een microcontroller geen tijdrovende bezigheid te zijn, mits ontwikkelaars gebruik maken van bestaande hardware- en softwaretechnologieën.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




