- Erforderliche Komponenten
- APDS9960 RGB & Gestensensor
- Schaltplan
- Code Erklärung
- Testen des gestengesteuerten berührungslosen Lifts
In dieser Zeit der Corona-Pandemie sind Aufzüge zu einem Ort mit hohem Risiko geworden, an dem jeder die gleichen Knöpfe berührt. An vielen Orten haben Menschen Tricks entdeckt, um den Kontakt mit Aufzugsknöpfen zu verhindern, z. B. das Verwenden von Pumppapier, Zahnstochern oder Hygienetüchern zum Drücken der Aufzugsknöpfe.
In Fortsetzung unserer früheren Corona-Sicherheitsprojekte wie der automatischen Desinfektionsmaschine, der kontaktlosen Temperaturüberwachung und dem sozialen Distanzdetektor werden wir hier einen gestengesteuerten Aufzugsprototyp mit dem Arduino Nano bauen.
Dieser kontaktlose Aufzug verwendet Arduino Nano, einen Gestensensor APDS9960 und ein OLED-Anzeigemodul. Mit diesem gestenbasierten Bedienfeld können Sie Ihren Lift einfach steuern, indem Sie eine Handbewegung ausführen. Der APDS9960-Sensor wird zum Lesen der Gesten verwendet. Mit den Gesten UP und DOWN wird die Bodennummer eingestellt, mit der linken Geste wird die Aufzugstür geschlossen und der Aufzug entsprechend der Bodennummer bewegt, und mit der rechten Geste wird die Tür geöffnet.
Erforderliche Komponenten
- Arduino Nano
- OLED-Anzeigemodul
- APDS9960 RGB & Gestensensor
- Steckbrett
- Überbrückungsdrähte
APDS9960 RGB & Gestensensor
Das RGB- und Gestenerkennungsmodul APDS9960 ist ein kleines Breakout-Board mit integriertem APDS-9960-Sensor, UV- und IR-Sperrfiltern, vier separaten Dioden, die für unterschiedliche Richtungen empfindlich sind, und einer I2C-kompatiblen Schnittstelle. Dieser Sensor kann zur Messung von Umgebungslicht und Farbe, zur Näherungserkennung und zur berührungslosen Gestenerkennung verwendet werden. Es hat einen Gestenerkennungsbereich von 10 bis 20 cm und kann zur Steuerung eines Mikrocontrollers, eines Roboters und in vielen anderen Projekten verwendet werden.
Eigenschaften:
- Betriebsspannung: 2,4 V bis 3,6 V.
- Betriebsbereich: 10-20 cm.
- I2C-Schnittstelle (I2C-Adresse: 0x39).
- Umgebungslicht und RGB-Farberkennung, Nähe
- Erfassung und Gestenerkennung in einem optischen Modul
- I2C-Bus-Fast-Mode-kompatible Schnittstelle mit Datenraten bis zu 400 kHz.
Schaltplan
Das Schaltbild für den kontaktlosen Aufzug mit APDS9960 ist unten angegeben.
Wir verbinden den Arduino Nano mit dem APDS9960-Sensor und dem OLED-Display. Die VCC- und GND-Pins des APDS9960-Sensors und des OLED-Displays sind mit 3,3 V und GND von Arduino verbunden. Während die SCL- und SDA-Pins des APDS9960-Sensors und des OLED-Displays jeweils mit den A5- und A4-Pins von Arduino verbunden sind.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
So sieht das komplette Setup für den gestengesteuerten Aufzug mit Arduino aus:
Folgen Sie dem Link, um mehr über das OLED-Display und seine Schnittstelle zu anderen Mikrocontrollern zu erfahren.
Code Erklärung
Der vollständige Code für Contactless Elevator mit APDS9960 finden Sie am Ende der Seite. Hier erklären wir einige wichtige Teile des Codes. In diesem Programm werden wir die Bibliotheken APDS9960 und Adafruit_SH1106 verwenden . Die APDS9960-Bibliothek kann von der Arduino IDE heruntergeladen werden. Um die Bibliothek herunterzuladen, gehen Sie zu Skizze> Bibliotheksmanager> Suchen und geben Sie Arduino APDS9960 ein. Die Adafruit_SH1106-Bibliothek kann hier heruntergeladen werden.
Starten Sie den Code also wie gewohnt, indem Sie alle erforderlichen Bibliotheken einschließen. Adafruit_SH1106.h ist die geänderte Version der ursprünglichen Adafruit-Bibliothek.
#einschließen
Definieren Sie in den nächsten Zeilen die Variablen, um die aktuelle Etage und die Stockwerknummer zu speichern, in die der Benutzer gehen möchte.
int floornum = 0; int currentfloor = 0;
Geben Sie danach die Bitmaps für die Bilder UP Arrow, Down Arrow, Open Door und Close Door ein. HEX-Code für ein Bild kann mit einem Konverter wie Image2cpp generiert werden. Um mehr über die Verwendung von Image2cpp zu erfahren, folgen Sie diesem Tutorial zum Arduino QR-Codegenerator.
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, ………………………… …………………………………………………………..};
Im Setup () Funktion, initialisieren Sie den Serial Monitor mit einer Baudrate von 9600 für Debugging - Zwecke. Initialisieren Sie dann in den nächsten Zeilen das OLED-Display und den APDS9960-Sensor mit der Methode begin () wie folgt:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Fehler beim Initialisieren des APDS9960-Sensors!"); } Serial.println ("Gesten erkennen…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Löschen Sie nach dem Initialisieren der Anzeige und des Sensors den Anzeigepuffer mit der Methode clearDisplay () und legen Sie die Schriftgröße und -farbe mit den Methoden display.setTextSize () und display.setTextColor () fest .
display.setTextSize (2); display.setTextColor (WHITE); display.clearDisplay (); display.display ();
Innerhalb der Leeren Schleife () , überprüft ständig, wenn eine Geste gemacht wurde. Wenn ja, lesen Sie die Gestenwerte und prüfen Sie, um welche Geste es sich handelt (AUF, AB, RECHTS, LINKS), und drucken Sie den entsprechenden Wert auf den seriellen Monitor. Mit den Gesten UP und DOWN wird die Stockwerksnummer festgelegt, zu der der Benutzer gehen möchte. Die linke Geste besteht darin, die Aufzugstür zu schließen und den Aufzug entsprechend der Bodennummer zu bewegen, während die rechte Geste zum Öffnen der Tür verwendet wird.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (Geste) {case GESTURE_UP: Serial.println ("Erkannte UP-Geste"); display.clearDisplay (); floornum ++; home1 (); Unterbrechung; case GESTURE_DOWN: Serial.println ("Erkannte DOWN-Geste"); display.clearDisplay (); floornum -; home1 (); Unterbrechung; case GESTURE_LEFT: Serial.println ("Erkannte LINKE Geste"); display.clearDisplay (); Start(); Unterbrechung; case GESTURE_RIGHT: Serial.println ("Erkannte RECHTE Geste"); display.clearDisplay (); home1 (); Unterbrechung; Standard: break; }}
Mit der Funktion home1 () wird die Home-Anzeige für einen Aufzug gezeichnet . Dies besteht aus einem Aufwärtspfeil, einem Abwärtspfeil, Schildern zum Öffnen der Tür, Schließen der Tür und der aktuellen Stockwerksnummer. Mit der Funktion drawBitmap () werden die Bilder auf dem OLED-Display gezeichnet . Die Syntax für die Funktion drawBitmap () ist unten angegeben:
drawBitmap (int16_t x, int16_t y, Bitmap, int16_t w, int16_t h, Farbe);
Wo:
int16_t x, int16_t y sind X- und Y-Koordinaten der OLED-Anzeige
Die Bitmap ist der Name der Bitmap
int16_t w, int16_t h sind die Größe und das Gewicht des Bildes.
void home1 () {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, Türöffnung, 29, 30, WEISS); display.drawBitmap (60, 15, Closedoor, 29, 30, WHITE); display.display (); }}
Mit der Funktion start () können Sie den Lift nach oben oder unten bewegen. Dazu wird die aktuelle Stockwerknummer mit der Stockwerknummer verglichen, in die der Benutzer gehen möchte. Wenn die Stockwerksnummer größer als die aktuelle Stockwerksnr. dann fährt der Aufzug nach oben und wenn die Stockwerksnummer kleiner als die aktuelle Stockwerk-Nr. dann fährt der Lift nach unten. Der Aufzug stoppt, wenn sowohl die aktuelle Etage Nr. und Etage Nr. sind gleich.
void start () {while (floornum> currentfloor) {Serial.println ("Going UP"); currentfloor ++; display.drawBitmap (0, 0, up, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); Verzögerung (2000); } while (floornum <currentfloor) {Serial.println ("Going Down"); currentfloor--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); Verzögerung (2000); } if (floornum == currentfloor) {Serial.println ("erreicht"); display.clearDisplay (); home1 (); Serial.print (currentfloor); }}
Testen des gestengesteuerten berührungslosen Lifts
Sobald die Hardware und der Code fertig sind, schließen Sie den Arduino Nano an den Laptop an und laden Sie den unten angegebenen vollständigen Code hoch. Wie Sie standardmäßig sehen können, zeigt OLED die Elevator-Benutzeroberfläche an.
Bewegen Sie nun Ihre Hand nach oben oder unten, wie im folgenden Video gezeigt, um den Boden so einzustellen, wie Sie möchten. Machen Sie dann die linke Geste, um zu bestätigen, dass der Aufzug in diese Etage fährt. Wenn Sie den Aufzug anhalten möchten, machen Sie mit Ihrer Hand die richtige Geste.
Das vollständige Arbeitsvideo und der Code für dieses Projekt sind unten angegeben. Ich hoffe, Ihnen hat der Bau dieses Projekts gefallen. Wenn Sie Fragen zu diesem Projekt haben, hinterlassen Sie diese bitte im Kommentarbereich.