- Componenten vereist
- APDS9960 RGB- en bewegingssensor
- Schakelschema
- Code Uitleg
- Testen van de gebaargestuurde, contactloze lift
In deze tijd van de Corona-pandemie zijn liften een risicovolle plek geworden waar iedereen dezelfde knoppen aanraakt. Op veel plaatsen hebben mensen trucs ontdekt om contact met liftknoppen te voorkomen, zoals het gebruik van pomppapier, tandenstokers of maandverband om op de liftknoppen te drukken.
Dus in het verlengde van onze eerdere Corona-veiligheidsprojecten, zoals automatische ontsmettingsmachine, contactloze temperatuurbewaking en sociale afstandsdetector, gaan we hier een prototype van een gestuurde lift bouwen met behulp van de Arduino Nano.
Deze contactloze lift gebruikt Arduino Nano, een APDS9960-bewegingssensor en een OLED-displaymodule. Met dit op gebaren gebaseerde bedieningspaneel kunt u uw lift eenvoudig bedienen door een handgebaar te maken. De APDS9960-sensor wordt gebruikt om de gebaren te lezen. OMHOOG- en OMLAAG-gebaren worden gebruikt om het etagenummer in te stellen, het linkergebaar is om de liftdeur te sluiten en de lift te verplaatsen volgens het etagenummer en het rechtergebaar wordt gebruikt om de deur te openen.
Componenten vereist
- Arduino Nano
- OLED-weergavemodule
- APDS9960 RGB- en bewegingssensor
- Breadboard
- Doorverbindingsdraden
APDS9960 RGB- en bewegingssensor
De APDS9960 RGB- en bewegingsdetectiemodule is een klein uitbreekbord dat wordt geleverd met een ingebouwde APDS-9960-sensor, UV- en IR-blokkeerfilters, vier afzonderlijke diodes die gevoelig zijn voor verschillende richtingen en een I2C-compatibele interface. Deze sensor kan worden gebruikt voor het meten van omgevingslicht en kleur, nabijheidsdetectie en aanraakloze bewegingsdetectie. Het heeft een bewegingsdetectiebereik van 10 tot 20 cm en kan worden gebruikt om een microcontroller, robot en in vele andere projecten te besturen.
Kenmerken:
- Operationele spanning: 2,4V tot 3,6V
- Bereik: 4-8 inch (10-20 cm).
- I2C-interface (I2C-adres: 0x39).
- Omgevingslicht en RGB-kleurdetectie, nabijheid
- Detectie en bewegingsdetectie in een optische module
- I2C-bus Fast Mode-compatibele interface met datasnelheden tot 400 kHz.
Schakelschema
Het schakelschema voor een contactloze lift met APDS9960 wordt hieronder gegeven.
We koppelen de Arduino Nano aan de APDS9960-sensor en het OLED-display. VCC- en GND-pinnen van zowel de APDS9960-sensor als het OLED-display zijn verbonden met 3.3V en GND van Arduino. Terwijl SCL- en SDA-pinnen van APDS9960-sensor en OLED-display respectievelijk verbonden zijn met A5- en A4-pinnen van Arduino.
OLED & APDS9960-pen |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Dit is hoe de complete setup voor Gesture controlled Elevator met Arduino eruit zal zien:
Volg de link voor meer informatie over het OLED-display en de interface met andere microcontrollers.
Code Uitleg
De volledige code voor contactloze lift met APDS9960 staat aan het einde van de pagina. Hier leggen we enkele belangrijke delen van de code uit. In dit programma gaan we de bibliotheken APDS9960 en Adafruit_SH1106 gebruiken . De APDS9960-bibliotheek kan worden gedownload via Arduino IDE. Om de bibliotheek te downloaden, gaat u naar Sketch> Bibliotheekbeheer> Zoeken en voert u Arduino APDS9960 in. Terwijl de Adafruit_SH1106-bibliotheek hier kan worden gedownload.
Start dus zoals gewoonlijk de code door alle vereiste bibliotheken op te nemen. Adafruit_SH1106.h is de gewijzigde versie van de originele Adafruit-bibliotheek.
# omvatten
Definieer in de volgende regels de variabelen om de huidige verdieping en het nummer van de verdieping op te slaan waar de gebruiker naartoe wil.
int floornum = 0; int currentfloor = 0;
Voer daarna de bitmaps in voor afbeeldingen met de pijl omhoog, pijl omlaag, deur openen en deur sluiten. HEX-code voor een afbeelding kan worden gegenereerd met behulp van een converter zoals Image2cpp. Volg deze Arduino QR-codegenerator zelfstudie voor meer informatie over het gebruik van Image2cpp.
const unsigned char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const unsigned char down PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const unsigned char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ……………………… …………………………………………………………..};
In de setup () functie initialiseert de seriële monitor met een baudsnelheid van 9600 voor foutopsporing. Initialiseer vervolgens in de volgende regels het OLED-scherm en de APDS9960-sensor met de methode begin () als volgt:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Fout bij initialiseren APDS9960-sensor!"); } Serial.println ("Gebaren detecteren…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Na initialisatie van het display en de sensor, duidelijk de weergeefbuffer de clearDisplay () methode en het lettertype grootte en kleur met de display.setTextSize () en display.setTextColor () methoden.
display.setTextSize (2); display.setTextColor (WIT); display.clearDisplay (); display.display ();
Binnen in de leegte lus () , voortdurend te controleren of een gebaar gemaakt. Zo ja, lees dan de bewegingswaarden en controleer welke beweging het is (OMHOOG, OMLAAG, RECHTS, LINKS) en drukt de bijbehorende meting af op de seriële monitor. OMHOOG- en OMLAAG-gebaren worden gebruikt om het verdiepingnummer in te stellen waar de gebruiker naartoe wil. Het linkergebaar is om de liftdeur te sluiten en de lift te verplaatsen volgens het verdiepingsnummer, terwijl het rechtergebaar wordt gebruikt om de deur te openen.
if (APDS.gestureAvailable ()) {int gebaar = APDS.readGesture (); switch (gebaar) {case GESTURE_UP: Serial.println ("Gedetecteerd UP gebaar"); display.clearDisplay (); floornum ++; Thuis 1(); breken; case GESTURE_DOWN: Serial.println ("Gedetecteerd OMLAAG gebaar"); display.clearDisplay (); floornum -; Thuis 1(); breken; case GESTURE_LEFT: Serial.println ("Gedetecteerd LINKS gebaar"); display.clearDisplay (); begin(); breken; case GESTURE_RIGHT: Serial.println ("Gedetecteerd RECHTS gebaar"); display.clearDisplay (); Thuis 1(); breken; standaard: pauze; }
De functie home1 () wordt gebruikt om het startscherm voor een lift te tekenen. Dit bestaat uit een pijl omhoog, pijl omlaag, deur openen, deur sluiten en het huidige verdiepingnummer. drawBitmap () functie wordt gebruikt om de afbeeldingen op het OLED-scherm te tekenen. De syntaxis voor de functie drawBitmap () wordt hieronder gegeven:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, kleur);
Waar:
int16_t x, int16_t y zijn X- en Y-coördinaten van het OLED-scherm
de bitmap is de naam van de bitmap
int16_t w, int16_t h zijn de hoogte en het gewicht van de afbeelding.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WIT); display.drawBitmap (26, 46, downarrow, 40, 18, WIT); display.drawBitmap (0, 15, dooropen, 29, 30, WIT); display.drawBitmap (60, 15, closedoor, 29, 30, WIT); display.display (); }
De start () functie wordt gebruikt om de lift omhoog of omlaag te bewegen. Daarvoor wordt het huidige verdiepingsnummer vergeleken met het verdiepingsnummer waar de gebruiker naartoe wil. Als het etage nummer groter is dan het huidige etage nr. dan gaat de lift omhoog en als het etage nummer lager is dan het huidige etage nr. dan gaat de lift naar beneden. De lift stopt wanneer zowel de huidige verdieping nr. en verdieping nr. zijn hetzelfde.
void start () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, omhoog, 100, 64, WIT); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); vertraging (2000); } while (floornum <currentfloor) {Serial.println ("going Down"); huidige verdieping--; display.drawBitmap (0, 0, omlaag, 100, 64, WIT); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); vertraging (2000); } if (floornum == currentfloor) {Serial.println ("Bereikt"); display.clearDisplay (); Thuis 1(); Serial.print (currentfloor); }}
Testen van de gebaargestuurde, contactloze lift
Zodra de hardware en code klaar zijn, sluit u de Arduino Nano aan op de laptop en uploadt u de volledige onderstaande code. Zoals u kunt zien, geeft OLED standaard de gebruikersinterface van de lift weer.
Zwaai nu met je hand omhoog of omlaag, zoals in de onderstaande video, om de vloer in te stellen waar je heen wilt. Maak dan het linkergebaar om de lift te erkennen om naar die verdieping te gaan. Wil je de lift stoppen, maak dan het juiste gebaar met je hand.
De volledige werkvideo en code voor dit project worden hieronder gegeven. Ik hoop dat je het leuk vond om dit project te bouwen. Als u vragen heeft over dit project, laat deze dan achter in het commentaargedeelte.