- Komponenter krävs
- APDS9960 RGB & gestsensor
- Kretsschema
- Kodförklaring
- Testa geststyrd Touchless Lift
Under denna tid av Corona-pandemin har hissar blivit en högriskplats där alla trycker på samma knappar. På många ställen har människor upptäckt knep för att förhindra kontakt med hissknappar som att använda ett pumppapper, tandpetare eller sanitetsvävnader för att trycka på lyftknapparna.
Så i fortsättning av våra tidigare Corona-säkerhetsprojekt som automatisk desinfektionsmaskin, kontaktlös temperaturövervakning och social avståndsdetektor, här ska vi bygga en geststyrd hissprototyp med Arduino Nano.
Denna kontaktlösa hiss använder Arduino Nano, en APDS9960 gestsensor och en OLED-skärmmodul. Med den här gestbaserade kontrollpanelen kan du enkelt styra din Lift genom att göra en handgest. APDS9960-sensorn används för att läsa gesterna. UPP- och NED-gester används för att ställa in golvnumret, den vänstra gesten är att stänga hissdörren och flytta hissen enligt golvnumret och höger gest används för att öppna dörren.
Komponenter krävs
- Arduino Nano
- OLED-skärmmodul
- APDS9960 RGB & gestsensor
- Bakbord
- Bygeltrådar
APDS9960 RGB & gestsensor
APDS9960 RGB & Gesture Detection Module är ett litet brytkort som levereras med en inbyggd APDS-9960-sensor, UV- och IR-blockeringsfilter, fyra separata dioder som är känsliga för olika riktningar och ett I2C-kompatibelt gränssnitt. Denna sensor kan användas för mätning av omgivande ljus och färg, närhetsdetektering och beröringsfri gestavkänning. Den har ett gestdetekteringsområde på 10 till 20 cm och kan användas för att styra en mikrokontroller, robot och i många andra projekt.
Funktioner:
- Driftspänning: 2,4V till 3,6V
- Räckvidd: 4-8 tum (10-20 cm).
- I2C-gränssnitt (I2C-adress: 0x39).
- Omgivande ljus och RGB-färgavkänning, närhet
- Avkänning och gestavkänning i en optisk modul
- I2C-buss snabbläge kompatibelt gränssnitt med datahastigheter upp till 400 kHz.
Kretsschema
Kretsschema för kontaktlös hiss med APDS9960 ges nedan.
Vi gränsar Arduino Nano med APDS9960-sensor och OLED-skärm. VCC- och GND-stift på både APDS9960-sensorn och OLED-skärmen är anslutna till 3,3 V och GND för Arduino. Medan SCL- och SDA-stiften på APDS9960-sensorn och OLED-skärmen är anslutna till A5- och A4-stift på Arduino.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Så här kommer hela installationen för geststyrd hiss med Arduino att se ut:
För att lära dig mer om OLED-skärm och dess gränssnitt med andra mikrokontroller, följ länken.
Kodförklaring
Den kompletta koden för kontaktlös hiss med APDS9960 ges i slutet av sidan. Här förklarar vi några viktiga delar av koden. I det här programmet ska vi använda biblioteken APDS9960 och Adafruit_SH1106 . APDS9960-biblioteket kan laddas ner från Arduino IDE. För att ladda ner biblioteket, gå till Sketch> Library Manager> Sök och ange sedan Arduino APDS9960. Medan Adafruit_SH1106-biblioteket kan laddas ner härifrån.
Så som vanligt starta koden med alla nödvändiga bibliotek. Adafruit_SH1106.h är den modifierade versionen av det ursprungliga Adafruit-biblioteket.
#omfatta
I nästa rader definierar du variablerna för att lagra det aktuella golvet och golvnumret dit användaren vill gå.
int floornum = 0; int strömgolv = 0;
Därefter anger du bitmappar för UPPIL, Nedåtpil, Öppna dörr och Stäng dörrbilder. HEX-kod för en bild kan genereras med hjälp av en omvandlare som Image2cpp. För att lära dig mer om hur du använder Image2cpp, följ denna Arduino QR-kodgeneratorhandledning.
const osignerad char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………………..}; const osignerad röd ner 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,, ………………………… ………………………………………………………………..};
I inställningsfunktionen () initierar du den seriella bildskärmen med en baudhastighet på 9600 för felsökningsändamål. Initiera sedan OLED-skärmen och APDS9960-sensorn i nästa rader med start () -metoden enligt följande:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Fel vid initialisering av APDS9960-sensor!"); } Serial.println ("Upptäcka gester…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Efter att ha initierat displayen och sensorn, rensa displaybufferten med clearDisplay () -metoden och ställ in teckenstorlek och färg med metoderna display.setTextSize () och display.setTextColor () .
display.setTextSize (2); display.setTextColor (WHITE); display.clearDisplay (); display.display ();
Inuti hålrummet () , kontrollera ständigt om någon gest gjordes. Om ja, läs sedan gestvärdena och kontrollera vilken gest det är (UPP, NED, HÖGER, VÄNSTER) och skriv ut motsvarande avläsning på den seriella bildskärmen. UPP- och NED-gester används för att ställa in golvnumret där användaren vill gå. Den vänstra gesten är att stänga hissdörren och flytta hissen enligt golvnumret medan höger gest används för att öppna dörren.
if (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); switch (gest) {case GESTURE_UP: Serial.println ("Upptäckt UPP-gest"); display.clearDisplay (); floornum ++; Hem 1(); ha sönder; fall GESTURE_DOWN: Serial.println ("Upptäckt NED-gest"); display.clearDisplay (); golvnummer -; Hem 1(); ha sönder; fall GESTURE_LEFT: Serial.println ("Upptäckt VÄNSTER gest"); display.clearDisplay (); Start(); ha sönder; fall GESTURE_RIGHT: Serial.println ("Upptäckt RIGHT gest"); display.clearDisplay (); Hem 1(); ha sönder; standard: bryta; }
Den home1 () funktionen används för att dra hem display för en hiss. Detta består av uppåtpil, nedåtpil, öppen dörr, stäng dörrskyltar och nuvarande våningsnummer. drawBitmap () -funktionen används för att rita bilderna på OLED-skärmen. Syntaxen för drawBitmap () -funktionen ges nedan:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, färg);
Var:
int16_t x, int16_t y är X- och Y-koordinater för OLED-skärm
bitmappen är namnet på bitmappen
int16_t w, int16_t h är bildens höjd och vikt.
void home1 () {display.setCursor (101,23); display.println (golvnummer); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, VIT); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Den start () funktionen används för att flytta hissen uppåt eller nedåt. För det jämförs nuvarande våningsnr med det golvnummer där användaren vill åka. Om golvnumret är större än det aktuella våningsnumret. då flyttas hissen uppåt och om golvnumret är lägre än det aktuella våningsnumret. sedan flyttas hissen nedåt. Hissen stannar när både nuvarande våningsnr. och våning nr. är samma.
ogiltig start () {while (floornum> currentfloor) {Serial.println ("going UP"); strömgolv ++; display.drawBitmap (0, 0, upp, 100, 64, VIT); display.setCursor (101,23); display.println (nuvarande golv); display.display (); display.clearDisplay (); fördröjning (2000); } while (floornum <currentfloor) {Serial.println ("going down"); strömgolv--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (nuvarande golv); display.display (); display.clearDisplay (); fördröjning (2000); } if (floornum == currentfloor) {Serial.println ("Reached"); display.clearDisplay (); Hem 1(); Serial.print (nuvarande golv); }}
Testa geststyrd Touchless Lift
När hårdvaran och koden är redo, anslut Arduino Nano till den bärbara datorn och ladda upp hela koden nedan. Som du kan se som standard visar OLED Elevator UI.
Vinka nu din hand upp eller ner, som visas i videon nedan, för att ställa in golvet dit du vill gå. Gör sedan vänster gest för att erkänna hissen för att gå till det golvet. Om du vill stoppa hissen gör du rätt gest med handen.
Den fullständiga arbetsvideo och koden för detta projekt ges nedan. Hoppas att du gillade att bygga detta projekt. Om du har några frågor angående detta projekt, vänligen lämna dem i kommentarsektionen.