- Komponenter kreves
- APDS9960 RGB og gestesensor
- Kretsdiagram
- Kode Forklaring
- Testing av den kontrollerte berøringsløse heisen
I denne tiden av Corona-pandemien har heiser blitt et høyrisiko sted hvor alle berører de samme knappene. Mange steder har folk oppdaget triks for å forhindre kontakt med heisknapper som å bruke pumpepapir, tannpirkere eller sanitære vev for å trykke på heisknappene.
Så i forlengelse av våre tidligere Corona-sikkerhetsprosjekter som automatisk rensemaskin, kontaktløs temperaturovervåking og sosial avstandsdetektor, her skal vi bygge en geststyrt heisprototype ved hjelp av Arduino Nano.
Denne kontaktløse heisen bruker Arduino Nano, en APDS9960 gestesensor og en OLED-skjermmodul. Med dette bevegelsesbaserte kontrollpanelet kan du enkelt kontrollere løftet ditt ved å lage en håndbevegelse. APDS9960-sensoren brukes til å lese bevegelsene. OPP- og NED-bevegelser brukes til å stille gulvnummeret, venstre gest er å lukke heisdøren og flytte heisen i henhold til gulvnummeret, og den høyre bevegelsen brukes til å åpne døren.
Komponenter kreves
- Arduino Nano
- OLED-skjermmodul
- APDS9960 RGB og gestesensor
- Brettbrett
- Jumper Wires
APDS9960 RGB og gestesensor
APDS9960 RGB & Gesture Detection Module er et lite brytekort som leveres med en innebygd APDS-9960-sensor, UV- og IR-blokkeringsfiltre, fire separate dioder som er følsomme for forskjellige retninger og et I2C-kompatibelt grensesnitt. Denne sensoren kan brukes til å måle omgivende lys og farger, deteksjon av nærhet og berøringsfri sensing. Den har et bevegelsesdeteksjonsområde på 10 til 20 cm og kan brukes til å kontrollere en mikrokontroller, robot og i mange andre prosjekter.
Funksjoner:
- Driftsspenning: 2,4V til 3,6V
- Driftsområde: 4-8 tommer (10-20 cm).
- I2C-grensesnitt (I2C-adresse: 0x39).
- Omgivende lys og RGB fargefølelse, nærhet
- Sensing, og Gest Detection i en optisk modul
- I2C-buss hurtigmoduskompatibelt grensesnitt med datahastigheter opptil 400 kHz.
Kretsdiagram
Kretsdiagram for kontaktløs heis ved bruk av APDS9960 er gitt nedenfor.
Vi grensesnitt Arduino Nano med APDS9960 sensor og OLED-skjerm. VCC og GND-pinner på begge APDS9960-sensoren og OLED-skjermen er koblet til 3.3V og GND av Arduino. Mens SCL- og SDA-pinner på APDS9960-sensor og OLED-skjerm er koblet til A5- og A4-pinner på Arduino.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Slik ser det komplette oppsettet for geststyrt heis med Arduino ut:
For å lære mer om OLED-skjerm og grensesnittet med andre mikrokontrollere, følg lenken.
Kode Forklaring
Den komplette koden for kontaktløs heis ved bruk av APDS9960 er gitt på slutten av siden. Her forklarer vi noen viktige deler av koden. I dette programmet skal vi bruke biblioteket APDS9960 og Adafruit_SH1106 . APDS9960-biblioteket kan lastes ned fra Arduino IDE. For å laste ned biblioteket, gå til Skisse> Biblioteksbehandling> Søk og skriv deretter inn for Arduino APDS9960. Mens Adafruit_SH1106-biblioteket kan lastes ned herfra.
Så som vanlig starter du koden ved å inkludere alle nødvendige biblioteker. Adafruit_SH1106.h er den modifiserte versjonen av det originale Adafruit-biblioteket.
#inkludere
I de neste linjene definerer du variablene som skal lagre det aktuelle gulvet og gulvnummeret hvor brukeren vil gå.
int etasjenummer = 0; int strømgulv = 0;
Deretter skriver du inn bitmappene for OPP-pil, Ned-pil, Åpne dør og Lukk dør-bilder. HEX-kode for et bilde kan genereres ved hjelp av en omformer som Image2cpp. For å lære mer om hvordan du bruker Image2cpp, følg denne Arduino QR-kodegeneratorveiledningen.
const usignert char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………………..}; const usignert char ned PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………………..}; const usignert char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, …………………………… ………………………………………………………………..};
I oppsett () -funksjonen, initialiser du Serial Monitor med en overføringshastighet på 9600 for feilsøkingsformål. I de neste linjene initialiserer du deretter OLED-skjermen og APDS9960-sensoren med metoden begin () som følger:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Feil ved initialisering av APDS9960-sensor!"); } Serial.println ("Oppdager bevegelser…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Etter at du har initialisert skjermen og sensoren, må du fjerne skjermbufferen med clearDisplay () -metoden og angi skriftstørrelse og farge ved hjelp av metodene display.setTextSize () og display.setTextColor () .
display.setTextSize (2); display.setTextColor (HVIT); display.clearDisplay (); display.display ();
Inne i tomrummet () , sjekk hele tiden om det ble gjort en gest. Hvis ja, så les gestverdiene og sjekk hvilken gest det er (OPP, NED, HØYRE, VENSTRE) og skriver ut den tilsvarende avlesningen på seriell skjerm. OPP- og NED-bevegelser brukes til å angi gulvnummeret der brukeren vil gå. Den venstre gesten er å lukke heisdøren og flytte heisen i henhold til gulvnummeret mens den høyre bevegelsen brukes til å åpne døren.
hvis (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); bytte (gest) {case GESTURE_UP: Serial.println ("Oppdaget UP-gest"); display.clearDisplay (); floornum ++; hjem1 (); gå i stykker; sak GESTURE_DOWN: Serial.println ("Oppdaget NED-gest"); display.clearDisplay (); etasjenummer -; hjem1 (); gå i stykker; sak GESTURE_LEFT: Serial.println ("Oppdaget VENSTRE gest"); display.clearDisplay (); start(); gå i stykker; sak GESTURE_RIGHT: Serial.println ("Oppdaget RIGHT gest"); display.clearDisplay (); hjem1 (); gå i stykker; standard: pause; }
Funksjonen home1 () brukes til å tegne startskjermen for en heis. Dette består av en pil opp, pil ned, Åpne dør, Lukk dørskilt og gjeldende etasjenummer. drawBitmap () -funksjonen brukes til å tegne bildene på OLED-skjermen. Syntaksen for drawBitmap () -funksjonen er gitt nedenfor:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, farge);
Hvor:
int16_t x, int16_t y er X- og Y-koordinater for OLED-skjerm
bitmappen er navnet på bitmappen
int16_t w, int16_t h er høyden og vekten på bildet.
ugyldig hjemme1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Den start () funksjonen brukes for å bevege heisen oppover eller nedover. For det blir nåværende etasje nr. Sammenlignet med gulvnummeret hvor brukeren ønsker å gå. Hvis etasjeantallet er større enn dagens etasjenr. så vil heisen bevege seg oppover, og hvis gulvnummeret er mindre enn dagens etasje nr. så vil heisen bevege seg nedover. Heisen stopper når både dagens etasje nr. og etasje nr. er det samme.
ugyldig start () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, opp, 100, 64, HVIT); display.setCursor (101,23); display.println (gjeldende gulv); display.display (); display.clearDisplay (); forsinkelse (2000); } while (floornum <currentfloor) {Serial.println ("going Down"); strømgulv--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (gjeldende gulv); display.display (); display.clearDisplay (); forsinkelse (2000); } if (floornum == currentfloor) {Serial.println ("Reached"); display.clearDisplay (); hjem1 (); Serial.print (currentfloor); }}
Testing av den kontrollerte berøringsløse heisen
Når maskinvaren og koden er klar, kobler du Arduino Nano til den bærbare datamaskinen og laster opp den fullstendige koden nedenfor. Som du ser som standard vil OLED vise Heis UI.
Nå vinker du av hånden opp eller ned, som vist i videoen nedenfor, for å sette gulvet dit du vil dra. Gjør så venstre gest for å erkjenne heisen for å gå til gulvet. Hvis du vil stoppe heisen, gjør du den rette bevegelsen med hånden.
Den komplette arbeidsvideoen og koden for dette prosjektet er gitt nedenfor. Håper du likte å bygge dette prosjektet. Hvis du har spørsmål angående dette prosjektet, kan du legge dem i kommentarfeltet.