Inhaltsverzeichnis:

Arduino interaktiver LED-Couchtisch - Gunook
Arduino interaktiver LED-Couchtisch - Gunook

Video: Arduino interaktiver LED-Couchtisch - Gunook

Video: Arduino interaktiver LED-Couchtisch - Gunook
Video: reactive led coffee table 2 2024, Juli
Anonim
Image
Image
Arduino Interaktiver LED-Couchtisch
Arduino Interaktiver LED-Couchtisch

Ich habe einen interaktiven Couchtisch gemacht, der LED-Lichter unter einem Objekt einschaltet, wenn das Objekt über dem Tisch platziert wird. Nur die LEDs, die sich unter diesem Objekt befinden, leuchten. Dies geschieht durch den effektiven Einsatz von Näherungssensoren, und wenn der Näherungssensor erkennt, dass ein Objekt nahe genug ist, leuchtet er einen Knoten unter diesem Objekt auf. Es verwendet auch einen Arduino, um Animationen zu erstellen, die die Näherungssensoren nicht benötigen, aber einen wirklich coolen Effekt hinzufügen, den ich einfach liebe.

Die Näherungssensoren bestehen aus Fotodioden und IR-Strahlern. Die Strahler verwenden Infrarotlicht (das das menschliche Auge nicht sehen kann), um Licht aus dem Tisch zu strahlen, und die Fotodioden empfangen das von einem Objekt reflektierte Infrarotlicht. Je mehr Licht reflektiert wird (je näher das Objekt), desto stärker schwankt die von den Fotodioden kommende Spannung. Dies wird als Indikator verwendet, um anzugeben, welcher Knoten aufleuchten soll. Die Knoten sind eine Sammlung von ws2812b-LEDs und ein Näherungssensor.

Das angehängte Video beschreibt den gesamten Build-Prozess, während ich unten mehr Details skizziere.

Lieferungen

  1. ws2812b LED-Lampen -
  2. 5V Netzteil -
  3. Jeder Arduino, den ich den 2560 verwendet habe -
  4. Fotodioden
  5. IR-Strahler
  6. 10 Ohm Widerstände
  7. 1 MOhm Widerstände
  8. 47 pF-Kondensatoren
  9. CD4051B Multiplexer
  10. SN74HC595 Schieberegister
  11. ULN2803A Darlington-Arrays
  12. Jedes Substrat, das als große Platine für die LEDs verwendet werden kann, habe ich eine Papierverbundplatte aus dem Heimdepot verwendet

Schritt 1: Erstellen Sie die Platine und fügen Sie die LEDs ein

Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein
Erstellen Sie die Platine und fügen Sie die LEDs ein

Das erste, was ich tat, war, das Brett zu erstellen, das die LEDs enthält, die wir in den Couchtisch legen. Ich habe ein Stück Papierverbundplatte aus dem Heimdepot verwendet und es auf die richtigen Maße für den Couchtisch geschnitten, den ich hatte. Nachdem ich das Brett zurechtgeschnitten hatte, bohrte ich alle Löcher für die LEDs aus. Die Platine selbst hatte 8 Reihen und 12 Spalten von ws2812b-LEDs, die 3 Zoll voneinander entfernt waren, und sie waren in einem Serpentinenmuster angebracht. Ich benutzte Heißkleber, um sie zu befestigen.

Ich musste auch Löcher in die Mitte des Knotens bohren: 4 ws2812b-LEDs, die ein Quadrat bilden, 2 Fotodioden und 2 IR-Emitter in einem kleineren Quadrat in der Mitte. Diese 4 Löcher in der Mitte des Knotens wären die Spots für die Photodioden und IR-Emitter (jeweils 2). Ich wechselte sie ab, um eine maximale Belichtung zu gewährleisten, und platzierte sie etwa 1 Zoll voneinander entfernt in der Mitte jedes Knotens. Ich musste diese nicht heiß kleben, ich habe nur die Leitungen auf der anderen Seite gebogen, um sicherzustellen, dass sie nicht auf der anderen Seite herauskommen. Ich habe auch darauf geachtet, die positiven und negativen Enden in bestimmte Richtungen zu biegen, damit sie im Stromkreis richtig ausgerichtet waren. Alle positiven Leitungen befanden sich auf der linken Seite der Rückseite der Platine, während sich alle negativen Leitungen auf der rechten Seite der Platine befanden.

Schritt 2: Verstehen Sie die Schaltung

Verstehen Sie die Schaltung
Verstehen Sie die Schaltung
Verstehen Sie die Schaltung
Verstehen Sie die Schaltung
Verstehen Sie die Schaltung
Verstehen Sie die Schaltung

Hinweis: Alle animierten Zeichnungen entsprechen nicht der Implementierung (einige Arduino-Pins sind anders, und ich verketten ein paar, dazu später mehr). Das Endergebnis war aufgrund der Komplexität der Schaltung etwas anders, aber alle animierten Schaltungen dienen als hervorragende Grundlage, um zu verstehen, wie jedes Teil prototypisiert wird. Der normale Schaltplan und der Schaltplan sind so wie auf der im Projekt verwendeten Platine.

Den PCB-Code, der das KiCad-Projekt und Gerber-Dateien enthält, finden Sie hier: https://github.com/tmckay1/interactive_coffee_tabl…, falls Sie die PCBs selbst bestellen und ein ähnliches Projekt erstellen möchten. Ich habe NextPCB verwendet, um die Boards zu erstellen.

Es gibt im Grunde drei verschiedene Schaltungen, aus denen diese Tabelle besteht. Die erste, auf die wir nicht im Detail eingehen, ist eine einfache Schaltung, die die ws2812b-LEDs mit Strom versorgt. Ein PWM-Datensignal wird vom Arduino an die ws2812b-LED-Lampen gesendet und steuert, welche Farben wo angezeigt werden. Wir verwenden ws2812b-LEDs, da sie einzeln adressierbar sind, sodass wir steuern können, welche der LEDs eingeschaltet und welche ausgeschaltet werden sollen. Die ws2812b-LEDs werden von einer externen 5V-Stromquelle gespeist, da das Arduino allein nicht genug Strom hat, um alle Lichter einzuschalten. Im beigefügten animierten Diagramm verwenden sie einen Pullup-Widerstand von 330 Ohm, den ich jedoch in meinem Build nicht verwende.

Der zweite Stromkreis schaltet die IR-Sender ein. Diese Schaltung verwendet ein Schieberegister, um ein Darlington-Array zu steuern, das Strom an die IR-Emitter sendet. Ein Schieberegister ist eine integrierte Schaltung, die HIGH- und LOW-Signale von nur einer kleinen Anzahl von Pins an mehrere Pins senden kann. In unserem Fall verwenden wir ein SN74HC595 Schieberegister, das von 3 Eingängen angesteuert werden kann, aber bis zu 8 Ausgänge steuert. Der Vorteil der Verwendung mit dem Arduino besteht darin, dass Sie bis zu 8 Schieberegister hintereinander verketten können (Arduino kann nur bis zu 8 davon verarbeiten). Dies bedeutet, dass Sie nur 3 Pins vom Arduino benötigen, um 64 IR-Sender ein- und auszuschalten. Mit dem Darlington-Array können Sie ein Gerät über eine externe Quelle mit Strom versorgen, wenn das Eingangssignal HIGH ist, oder das Gerät ausschalten, wenn das Eingangssignal LOW ist. In unserem Beispiel verwenden wir also ein Darlington-Array ULN2803A, das es einer externen 5-V-Stromquelle ermöglicht, bis zu 8 der IR-Emitter ein- und auszuschalten. Wir verwenden einen 10-Ohm-Widerstand mit den IR-Emittern in Reihe, um die maximale Stromstärke aus den IR-Emittern zu erhalten.

Die dritte Schaltung verwendet einen Multiplexer, um mehrere Eingaben von den Fotodioden zu empfangen, und sendet die Ausgabe in einem Datensignal. Ein Multiplexer ist ein Gerät, das verwendet wird, um mehrere Eingänge zu verwenden, von denen Sie lesen möchten, und benötigt nur wenige Pins, um von diesen Eingängen zu lesen. Es kann auch das Gegenteil tun (Demultiplexen), aber wir verwenden es hier nicht für diese Anwendung. In unserem Fall verwenden wir also einen CD4051B-Multiplexer, um bis zu 8 Signale von den Fotodioden aufzunehmen, und wir benötigen nur 3 Eingänge, um diese Signale auszulesen. Außerdem können wir bis zu 8 Multiplexer verketten (arduino kann nur bis zu 8 davon verarbeiten). Dies bedeutet, dass das Arduino 64 der Photodiodensignale von nur 3 digitalen Pins lesen kann. Die Fotodioden sind in Sperrrichtung ausgerichtet, was bedeutet, dass wir die negative Leitung nicht in normaler Richtung mit der positiven Spannungsquelle an der positiven Spannungsquelle orientiert, sondern der positiven Spannungsquelle zuordnen. Dadurch werden die Fotodioden effektiv in Fotowiderstände umgewandelt, deren Widerstand sich abhängig von der empfangenen Lichtmenge ändert. Wir erstellen dann einen Spannungsteiler, um eine Spannung abhängig vom variierenden Widerstand der Fotodioden zu lesen, indem wir einen hochohmigen 1 MOhms-Widerstand zur Erde hinzufügen. Dies ermöglicht es uns, höhere und niedrigere Spannungen an das Arduino zu erhalten, abhängig davon, wie viel IR-Licht die Fotodioden empfangen.

Ich folgte den größten Teil dieses Designs von einer anderen Person, die dies hier getan hat: https://www.instructables.com/Infrared-Proximity-S… In diesem Design haben sie auch einen 47pF-Kondensator hinzugefügt, wie wir es tun, gegenüber dem 1 MOhm-Widerstand verwendet, um den Spannungsteiler mit den Fotodioden zu erstellen. Der Grund, warum er es hinzufügte, war, dass er die IR-Emitter mit einem PWM-Signal ein- und ausschaltete und dabei einen kleinen Spannungsabfall von den Fotodioden zog, wenn die IR-Emitter sofort eingeschaltet wurden. Dies führte dazu, dass die Fotodioden ihren Widerstand änderten, selbst wenn sie kein IR-Licht von einem Objekt erhielten, da die IR-Strahler dieselbe 5-V-Stromquelle wie die Fotodioden teilten. Der Kondensator wurde verwendet, um sicherzustellen, dass beim Ein- und Ausschalten der IR-Emitter kein Spannungsabfall auftrat. Ich hatte ursprünglich vor, dieselbe Strategie zu verwenden, aber die Zeit zum Testen ging nicht mehr, also ließ ich stattdessen die IR-Strahler immer eingeschaltet. Ich würde dies gerne in Zukunft ändern, aber bis ich den Code und die Schaltung neu entwerfe, ist die Platine im Moment so ausgelegt, dass die IR-Lichter immer eingeschaltet sind, und ich habe die Kondensatoren trotzdem behalten. Sie sollten den Kondensator nicht benötigen, wenn Sie dieses PCB-Design verwenden, aber ich werde eine andere Version der PCB vorstellen, die einen zusätzlichen Eingang zum Schieberegister akzeptiert, mit dem Sie die IR-Emitter ein- und ausschalten können. Dadurch wird viel Strom gespart.

Sie können die animierten Diagramme für ein Prototyp-Setup zum Testen auf Ihrem Arduino überprüfen. Für jeden Stromkreis gibt es auch einen detaillierteren farbigen Schaltplan, der den Aufbau und die Ausrichtung der elektronischen Geräte umreißt. Im beigefügten PCB-Schema haben wir insgesamt 4 Schaltungen, 2 Schaltungen zum Einschalten der IR-Emitter und 2 Schaltungen zum Lesen von den Fotodioden. Sie sind auf der Leiterplatte 2 Gruppen nebeneinander mit einer Gruppe bestehend aus 1 IR-Emitter-Schaltung und 1 Fotodioden-Schaltung ausgerichtet, so dass 2 Spalten mit 8 Knoten in einer einzigen Leiterplatte untergebracht werden können. Wir verketten die beiden Schaltungen auch miteinander, sodass drei Pins vom Arduino die beiden Schieberegister steuern können und 3 zusätzliche Pins die beiden Multiplexer auf der Platine steuern können. Es gibt einen zusätzlichen Ausgangsheader, um weitere PCBs in Reihe schalten zu können.

Hier sind ein paar Ressourcen, die ich für das Prototyping befolgt habe:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Schritt 3: Lötdrähte an den Knoten

Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten
Lötdrähte an den Knoten

Nachdem Sie nun verstanden haben, wie die Schaltung hergestellt wird, löten Sie die Drähte an jeden Knoten. Ich lötete die Fotodioden parallel (gelbe und graue Drähte) und die IR-Emitter in Reihe (orangefarbener Draht). Ich habe dann ein längeres gelbes Kabel an die Fotodioden parallel gelötet, das an die 5-V-Stromquelle angeschlossen wird, und ein blaues Kabel, das an den Fotodiodeneingang der Platine angeschlossen wird. Ich habe ein langes rotes Kabel an die IR-Emitter-Schaltung gelötet, die zum Anschluss an die 5-V-Stromquelle verwendet wird, und ein schwarzes Kabel, das an den IR-Emitter-Eingang der Platine angeschlossen wird. Ich habe die Drähte tatsächlich ein wenig zu kurz gemacht, sodass die Zeit ausgegangen ist, sodass ich am Ende nur 5 der Knoten in jeder Spalte verbinden konnte (statt 7). Ich habe vor, das später zu beheben.

Schritt 4: Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine

Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine
Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine
Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine
Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine
Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine
Löten Sie die PCB-Komponenten und befestigen Sie sie an der Platine

Hinweis: Die Platine im beigefügten Bild ist die erste Version, die ich ohne Stromein- und -ausgänge und auch eine Verkettung für jeden inneren Stromkreis gemacht habe. Das neue PCB-Design korrigiert diesen Fehler.

Hier müssen Sie nur dem PCB-Schema folgen, um die Komponenten auf die Platine zu löten, und dann, sobald dies erledigt ist, die Platine auf die Platine löten. Ich habe externe Leiterplatten verwendet, um das 5V-Stromsignal anzubringen, das ich auf alle gelben und roten Drähte verteilt habe. Im Nachhinein brauchte ich keine so langen roten und gelben Drähte und hätte die Knoten miteinander verbinden können (anstatt sie an eine gemeinsame externe Platine anzuschließen). Dadurch wird die Unordnung auf der Rückseite des Boards wirklich reduziert.

Da ich 8 Reihen ws2812b-LEDs und 12 Spalten hatte, hatte ich am Ende 7 Reihen und 11 Spalten mit Knoten (insgesamt 77 Knoten). Die Idee ist, eine Seite der Leiterplatte für eine Spalte von Knoten und die andere Seite für die andere Spalte zu verwenden. Da ich also 11 Spalten hatte, brauchte ich 6 PCBs (die letzte benötigte nur eine Gruppe von Komponenten). Da ich die Drähte zu kurz gemacht habe, konnte ich nur 55 Knoten, 11 Spalten und 5 Reihen verbinden. Sie können auf dem Bild sehen, ich habe einen Fehler gemacht und die Rohdrähte an die Platine gelötet, was in Ordnung wäre, wenn die Drähte dünn genug wären, aber in meinem Fall waren sie zu dick. Dies bedeutete, dass ich für jeden IR-Emitter-Eingang und Fotodiodeneingang sehr nahe beieinander ausfransende Drahtenden hatte, so dass bei allen Drahtkurzschlüssen viel Debugging stattfand. In Zukunft werde ich Steckverbinder verwenden, um die Platine mit den Drähten auf der Platine zu verbinden, um Kurzschlüsse zu vermeiden und Dinge aufzuräumen.

Da der Arduino nur bis zu 8 Schieberegister und Multiplexer verketten kann, habe ich zwei separate Ketten erstellt, von denen eine die ersten 8 Spalten und eine andere die restlichen 3 Spalten aufnimmt. Ich habe dann jede Kette an eine andere Platine angeschlossen, die nur 2 Multiplexer hatte, damit ich jede Kette von Multiplexer-Datensignalen von diesen beiden Multiplexern in das Arduino einlesen konnte. Diese beiden Multiplexer wurden ebenfalls in Reihe geschaltet. Das bedeutet, dass im Arduino insgesamt 16 Ausgangssignale und 2 analoge Eingänge verwendet wurden: 1 Ausgangssignal zur Steuerung der ws2812b-LEDs, 3 Ausgangssignale für die erste Kette von Schieberegistern, 3 Ausgangssignale für die erste Kette von Multiplexern, 3 Ausgangssignale für die zweite Kette von Schieberegistern, 3 Ausgangssignale für die zweite Kette von Multiplexern, 3 Ausgangssignale für die 2 Multiplexer, die jedes PCB-Datensignal aggregieren, und schließlich 2 analoge Eingänge für jedes Datensignal von den 2 aggregierten Multiplexern.

Schritt 5: Überprüfen Sie den Code

Hinweis: Zusätzlich zum interaktiven Code unten habe ich eine Drittanbieterbibliothek verwendet, um die Animationen für die ws2812b-LEDs zu erstellen. Das findet ihr hier:

Den von mir verwendeten Code finden Sie hier:

Oben definiere ich die Arduino-Pins, die mit jedem Teil der Platine verbunden werden. In der Setup-Methode stelle ich die Ausgangspins für die Multiplexer ein, schalte die IR-Emitter ein, stelle ein baseVal-Array ein, das den Umgebungslichtwert für jede Fotodiode verfolgt, und initialisiert FastLED, das in die ws2812b-LEDs schreibt. Bei der Schleifenmethode setzen wir die Liste der LEDs zurück, die im ws2812b-Streifen eingeschaltet werden sollen. Dann lesen wir Werte von den Fotodioden in den Multiplexerketten und schalten die ws2812b-LEDs ein, die leuchten sollen, wenn der Messwert der Fotodiode im Knoten über einem bestimmten Schwellenwert vom Basiswert der Umgebungslichtmesswerte liegt. Wir rendern dann die LEDs, wenn sich der Knoten ändert, der eingeschaltet sein sollte. Andernfalls wird die Schleife fortgesetzt, bis sich etwas ändert, um die Dinge zu beschleunigen.

Der Code könnte wahrscheinlich verbessert werden, und ich überlege, dies zu tun, aber es gibt eine Verzögerung von 1-2 Sekunden, wenn die Lichter eingeschaltet werden, nachdem ein Objekt auf den Tisch gelegt wurde. Ich glaube, das zugrunde liegende Problem ist, dass FastLED einige Zeit braucht, um die 96 LEDs auf dem Tisch zu rendern, und der Code muss durchschleifen und 77 Eingänge aus der Tabelle lesen. Ich habe diesen Code mit 8 LEDs ausprobiert und festgestellt, dass er fast sofort ist, aber ich suche nach dem Sweetspot von LEDs, die mit diesem Code funktionieren und fast sofort sind, sowie den Code verbessern.

Schritt 6: Schalten Sie das Arduino ein

Schalten Sie den Arduino ein!
Schalten Sie den Arduino ein!
Schalten Sie den Arduino ein!
Schalten Sie den Arduino ein!
Schalten Sie den Arduino ein!
Schalten Sie den Arduino ein!

Jetzt müssen Sie nur noch das Arduino einschalten und die Tabellenfunktion sehen! Mit der zuvor erwähnten Animationsbibliothek können Sie einige coole ws2812b-LED-Animationen erstellen, oder Sie können den Couchtischcode eingeben und ihn in jedem Abschnitt aufleuchten sehen. Fühlen Sie sich frei, Fragen oder Meinungen zu kommentieren, und ich werde versuchen, Ihnen zeitnah zu antworten. Danke schön!

Empfohlen: