Spisu treści:

Arduino Interactive Stolik kawowy LED: 6 kroków (ze zdjęciami)
Arduino Interactive Stolik kawowy LED: 6 kroków (ze zdjęciami)

Wideo: Arduino Interactive Stolik kawowy LED: 6 kroków (ze zdjęciami)

Wideo: Arduino Interactive Stolik kawowy LED: 6 kroków (ze zdjęciami)
Wideo: Interaktywny stół ledowy 2024, Lipiec
Anonim
Image
Image
Interaktywny stolik kawowy LED Arduino
Interaktywny stolik kawowy LED Arduino

Zrobiłem interaktywny stolik kawowy, który zapala diody LED pod przedmiotem, gdy przedmiot jest umieszczony nad stołem. Zaświecą się tylko diody znajdujące się pod tym obiektem. Robi to, skutecznie wykorzystując czujniki zbliżeniowe, a gdy czujnik zbliżeniowy wykryje, że obiekt jest wystarczająco blisko, podświetli węzeł pod tym obiektem. Wykorzystuje również Arduino do umieszczania animacji, które nie wymagają czujników zbliżeniowych, ale dodają naprawdę fajny efekt, który po prostu uwielbiam.

Czujniki zbliżeniowe składają się z fotodiod i emiterów IR. Emitery wykorzystują światło podczerwone (którego ludzkie oko nie widzi), aby wystrzelić światło poza stół, a fotodiody odbierają światło podczerwone odbite od obiektu. Im więcej światła odbitego (im bliżej obiektu), tym większe wahania napięcia pochodzące od fotodiod. Jest to używane jako wskaźnik informujący, który węzeł ma się zapalić. Węzły to zbiór diod led ws2812b i czujnik zbliżeniowy.

Załączony film przedstawia cały proces kompilacji, a poniżej przedstawiam więcej szczegółów.

Kieszonkowe dzieci

  1. Żarówki LED ws2812b -
  2. Zasilanie 5V -
  3. Dowolny Arduino, którego użyłem 2560 -
  4. Fotodiody
  5. Emitery IR
  6. Rezystory 10 omów
  7. Rezystory 1 MOhm
  8. Kondensatory 47 pF
  9. Multipleksery CD4051B
  10. SN74HC595 Rejestry przesuwne
  11. ULN2803A Tablice Darlingtona
  12. Dowolne podłoże do wykorzystania jako duża tablica do diod led, użyłem papierowej płyty kompozytowej z domowego magazynu

Krok 1: Utwórz tablicę i włóż diody LED

Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED
Utwórz tablicę i włóż diody LED

Pierwszą rzeczą, jaką zrobiłem, było stworzenie tablicy, która będzie zawierała diody, które umieścimy w stoliku kawowym. Użyłem kawałka papierowej deski kompozytowej z domowego magazynu i przyciąłem go do odpowiednich wymiarów dla stolika kawowego, który miałem. Po przycięciu deski na wymiar wywierciłem wszystkie otwory, w których biegły diody. Sama tablica miała 8 rzędów i 12 kolumn ledów ws2812b oddzielonych od siebie o 3 cale, które były połączone w serpentyn. Użyłem gorącego kleju, aby zabezpieczyć je na miejscu.

Musiałem też wywiercić otwory w środku tego, co stanie się węzłem: 4 diody led ws2812b tworzące kwadrat, 2 fotodiody i 2 emitery IR w mniejszym kwadracie pośrodku tego. Te 4 otwory w środku węzła byłyby miejscami dla fotodiod i emiterów ir (po 2). Zmieniałem je, aby zapewnić maksymalną ekspozycję, i umieściłem je około 1 cala od siebie na środku każdego węzła. Nie musiałem przyklejać ich na gorąco, po prostu wygiąłem przewody po drugiej stronie, aby upewnić się, że nie wyjdą po drugiej stronie. Upewniłem się również, że końcówki dodatnie i ujemne zagięły się w określonych kierunkach, aby były prawidłowo zorientowane w obwodzie. Wszystkie dodatnie odprowadzenia znajdowały się po lewej stronie z tyłu planszy, podczas gdy wszystkie ujemne odprowadzenia znajdowały się po prawej stronie planszy.

Krok 2: Zrozum obwód

Zrozum obwód
Zrozum obwód
Zrozum obwód
Zrozum obwód
Zrozum obwód
Zrozum obwód

Uwaga: Wszystkie animowane rysunki nie są dokładne w implementacji (niektóre piny arduino są inne, a ja łączę kilka, więcej o tym później). Wynik końcowy był nieco inny ze względu na złożoność układu, ale wszystkie animowane układy służą jako świetna baza do zrozumienia, jak stworzyć prototyp każdej części. Standardowy schemat i schemat obwodu są takie, jak na płytce drukowanej użytej w projekcie.

Kod PCB zawierający projekt KiCad i pliki gerber można znaleźć tutaj: https://github.com/tmckay1/interactive_coffee_tabl…, jeśli chcesz samodzielnie zamówić PCB i stworzyć podobny projekt. Do stworzenia płyt użyłem NextPCB.

Istnieją zasadniczo trzy różne obwody, które składają się na tę tabelę. Pierwszy, którego nie będziemy omawiać szczegółowo i jest prostym obwodem, który zasila diody led ws2812b. Sygnał danych PWM jest wysyłany z Arduino do żarówek led ws2812b i kontroluje, jakie kolory są wyświetlane. Używamy diod led ws2812b, ponieważ są one indywidualnie adresowalne, więc będziemy mogli kontrolować, które diody mają się włączyć, a które wyłączyć. Diody ws2812b są zasilane z zewnętrznego źródła zasilania 5V, ponieważ samo arduino nie ma wystarczającej mocy, aby włączyć wszystkie światła. Na załączonym animowanym schemacie używają rezystora pullup 330 Ohm, jednak nie używam go w mojej konstrukcji.

Drugi obwód włącza emitery IR. Ten obwód wykorzystuje rejestr przesuwny do sterowania tablicą darlington, która wysyła moc do emiterów IR. Rejestr przesuwny to układ scalony, który jest w stanie wysyłać sygnały HIGH i LOW do wielu pinów z niewielkiej liczby pinów. W naszym przypadku używamy rejestru przesuwnego SN74HC595, który może być sterowany z 3 wejść, ale kontroluje do 8 wyjść. Zaletą korzystania z tego z arduino jest to, że można połączyć łańcuchowo do 8 rejestrów przesuwnych z rzędu (arduino może obsłużyć tylko do 8 z nich). Oznacza to, że potrzebujesz tylko 3 pinów z arduino do włączania i wyłączania 64 emiterów IR. Tablica darlington umożliwia zasilanie urządzenia z zewnętrznego źródła, jeśli sygnał wejściowy jest WYSOKI, lub wyłączenie zasilania tego urządzenia, jeśli sygnał wejściowy jest NISKI. W naszym przykładzie używamy tablicy darlington ULN2803A, która umożliwia zewnętrznemu źródłu zasilania 5 V włączanie i wyłączanie do 8 emiterów podczerwieni. Używamy rezystora 10 Ohm z nadajnikami IR połączonymi szeregowo, aby uzyskać maksymalne natężenie prądu z nadajników IR.

Trzeci obwód wykorzystuje multiplekser do odbierania wielu sygnałów wejściowych z fotodiod i wysyła sygnał wyjściowy w postaci danych. Multiplekser to urządzenie, które służy do przyjmowania wielu wejść, z których chcesz czytać, i potrzebuje tylko kilku pinów do odczytu z tych wejść. Może również działać odwrotnie (demultipleks), ale nie używamy go tutaj w tej aplikacji. Tak więc w naszym przypadku korzystamy z multipleksera CD4051B, który odbiera do 8 sygnałów z fotodiod, a do odczytu tych sygnałów potrzebujemy tylko 3 wejścia. Dodatkowo możemy połączyć łańcuchowo do 8 multiplekserów (arduino może obsłużyć tylko do 8 z nich). Oznacza to, że arduino może odczytać 64 sygnały fotodiod z zaledwie 3 pinów cyfrowych. Fotodiody są zorientowane z polaryzacją wsteczną, co oznacza, że zamiast zorientowanych w normalnym kierunku z dodatnim przewodem podłączonym do dodatniego źródła napięcia, przypisujemy ujemny przewód dodatniemu źródłu napięcia. To skutecznie zamienia fotodiody w fotorezystory, których rezystancja zmienia się w zależności od ilości otrzymywanego światła. Następnie tworzymy dzielnik napięcia, aby odczytać napięcie zależne od zmieniającej się rezystancji fotodiod, dodając do masy rezystor 1 MOhm o wysokiej rezystancji. Dzięki temu możemy odbierać wyższe i niższe napięcia do arduino w zależności od tego, ile światła IR otrzymują fotodiody.

Podążałem za większością tego projektu od innej osoby, która zrobiła to tutaj: https://www.instructables.com/Infrared-Proximity-S… W tym projekcie dodali również kondensator 47pF, tak jak my, naprzeciwko rezystora 1 MOhm służy do tworzenia dzielnika napięcia z fotodiodami. Powodem, dla którego to dodał, było to, że włączał i wyłączał emitery IR za pomocą sygnału PWM, co spowodowało niewielki spadek napięcia z fotodiod, gdy emitery IR zostały natychmiast włączone. To spowodowało, że fotodiody zmieniły rezystancję, nawet gdy nie otrzymywały więcej światła podczerwonego od obiektu, ponieważ emitery podczerwieni współdzieliły to samo źródło zasilania 5 V, co fotodiody. Kondensator został użyty, aby upewnić się, że nie ma spadku napięcia podczas włączania i wyłączania nadajników IR. Pierwotnie planowałem zastosować tę samą strategię, ale zabrakło czasu na jej przetestowanie, więc zamiast tego pozostawiłem emitery IR włączone zawsze. Chciałbym to zmienić w przyszłości, ale dopóki nie przeprojektuję kodu i obwodu, w tej chwili płytka drukowana jest zaprojektowana tak, aby światła IR były włączone przez cały czas, a mimo to zachowałem kondensatory. Nie powinieneś potrzebować kondensatora, jeśli używasz tego projektu PCB, ale zamierzam przedstawić inną wersję PCB, która akceptuje dodatkowe wejście do rejestru przesuwnego, co pozwoli ci modulować włączanie i wyłączanie emiterów IR. Pozwoli to dużo zaoszczędzić na zużyciu energii.

Możesz sprawdzić animowane schematy dołączone do konfiguracji prototypu do testowania na swoim arduino. Istnieje również bardziej szczegółowy kolorowy schemat dla każdego obwodu, który przedstawia konfigurację i orientację urządzeń elektronicznych. Na załączonym schemacie PCB mamy łącznie 4 obwody, 2 obwody służące do włączania emiterów IR i 2 obwody do odczytu z fotodiod. Są one zorientowane na PCB 2 grupy obok siebie z grupą składającą się z 1 obwodu emitera IR i 1 obwodu fotodiody, dzięki czemu 2 kolumny po 8 węzłów można umieścić w jednej PCB. Łączymy również ze sobą dwa obwody, dzięki czemu trzy piny z arduino mogą sterować dwoma rejestrami przesuwnymi, a 3 dodatkowe piny mogą sterować dwoma multiplekserami na płycie. Dostępny jest dodatkowy nagłówek wyjściowy, który umożliwia połączenie szeregowe z dodatkowymi płytkami drukowanymi.

Oto kilka zasobów, które wykorzystałem do prototypowania:

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

Krok 3: Przylutuj przewody do węzła

Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła
Przylutuj przewody do węzła

Teraz, gdy rozumiesz, jak wykonany jest obwód, przylutuj przewody do każdego węzła. Wlutowałem fotodiody równolegle (drut żółty i szary), a emitery ir szeregowo (drut pomarańczowy). Następnie przylutowałem do fotodiod równolegle dłuższy żółty przewód, który zostanie podłączony do źródła zasilania 5 V, i niebieski przewód, który zostanie podłączony do wejścia fotodiody płytki drukowanej. Przylutowałem długi czerwony przewód do obwodu emitera IR, który będzie używany do podłączenia do źródła zasilania 5 V i czarny przewód, który połączy się z wejściem emitera IR na płytce drukowanej. Właściwie zrobiłem trochę za krótkie przewody zabrakło czasu, więc na końcu mogłem połączyć tylko 5 węzłów w każdej kolumnie (zamiast 7). Planuję naprawić to później.

Krok 4: Przylutuj elementy PCB i przymocuj je do płyty

Przylutuj elementy PCB i przymocuj je do płyty
Przylutuj elementy PCB i przymocuj je do płyty
Przylutuj elementy PCB i przymocuj je do płyty
Przylutuj elementy PCB i przymocuj je do płyty
Przylutuj elementy PCB i przymocuj je do płyty
Przylutuj elementy PCB i przymocuj je do płyty

Uwaga: Płytka drukowana na załączonym zdjęciu to pierwsza wersja, którą wykonałem, w której brakowało wejść i wyjść zasilania, a także połączenia szeregowego dla każdego wewnętrznego obwodu. Nowy projekt PCB koryguje ten błąd.

Tutaj wystarczy postępować zgodnie ze schematem PCB, aby przylutować komponenty do PCB, a następnie przylutować PCB do płytki. Użyłem zewnętrznych płytek drukowanych do podłączenia sygnału zasilania 5V, który rozprowadziłem na wszystkie żółte i czerwone przewody. Z perspektywy czasu nie potrzebowałem tak długich czerwonych i żółtych przewodów i mogłem połączyć węzły ze sobą (zamiast podłączać je do wspólnej zewnętrznej płytki drukowanej). To naprawdę zmniejszy bałagan z tyłu planszy.

Ponieważ miałem 8 rzędów diod ws2812b i 12 kolumn, skończyłem z 7 rzędami i 11 kolumnami węzłów (łącznie 77 węzłów). Pomysł polega na użyciu jednej strony PCB dla jednej kolumny węzłów, a drugiej strony dla drugiej kolumny. Skoro miałem 11 kolumn, potrzebowałem 6 płytek PCB (ostatnia potrzebuje tylko jednej grupy komponentów). Ponieważ zrobiłem przewody za krótkie, mogłem połączyć tylko 55 węzłów, 11 kolumn i 5 rzędów. Jak widać na zdjęciu popełniłem błąd i przylutowałem do płytki surowe przewody, co by było w porządku, gdyby przewody były wystarczająco cienkie, ale w moim przypadku były za grube. Oznaczało to, że miałem strzępiące się końce przewodów bardzo blisko siebie dla każdego wejścia emitera podczerwieni i wejścia fotodiody, więc było dużo debugowania ze wszystkich zwarć przewodów. W przyszłości zamierzam użyć złączy do podłączenia PCB do przewodów na płytce, aby uniknąć zwarć i posprzątać.

Ponieważ Arduino może łączyć łańcuchowo tylko do 8 rejestrów przesuwnych i multiplekserów, utworzyłem dwa oddzielne łańcuchy, jeden zajmujący pierwsze 8 kolumn, a drugi zajmujący pozostałe 3 kolumny. Następnie dołączyłem każdy łańcuch do innego PCB, który miał tylko 2 multipleksery, abym mógł odczytać każdy łańcuch sygnałów danych multipleksera z tych dwóch multiplekserów do arduino. Te dwa multipleksery były również połączone łańcuchowo. Oznacza to, że w arduino wykorzystano łącznie 16 sygnałów wyjściowych i 2 wejścia analogowe: 1 sygnał wyjściowy do sterowania diodami ws2812b, 3 sygnały wyjściowe dla pierwszego łańcucha rejestrów przesuwnych, 3 sygnały wyjściowe dla pierwszego łańcucha multiplekserów, 3 sygnały wyjściowe dla drugiego łańcucha rejestrów przesuwnych, 3 sygnały wyjściowe dla drugiego łańcucha multiplekserów, 3 sygnały wyjściowe dla 2 multiplekserów, które agregują każdy sygnał danych PCB, i wreszcie 2 wejścia analogowe dla każdego sygnału danych z 2 agregujących multiplekserów.

Krok 5: Przejrzyj kod

Uwaga: Oprócz interaktywnego kodu poniżej, użyłem biblioteki innej firmy do stworzenia animacji dla diod led ws2812b. Znajdziesz to tutaj:

Kod, którego użyłem, znajdziesz tutaj:

Na górze określam piny arduino, które będą łączyć się z każdą częścią PCB. W metodzie konfiguracji ustawiam piny wyjściowe dla multiplekserów, włączam emitery podczerwieni, ustawiam tablicę baseVal, która śledzi odczyt światła otoczenia dla każdej fotodiody, i inicjuję FastLED, który będzie zapisywał diody ws2812b. W metodzie pętli resetujemy listę diod, które są przypisane do włączenia w pasku ws2812b. Następnie odczytujemy wartości z fotodiod w łańcuchach multiplekserów i włączamy diody ws2812b, które mają być włączone, jeśli odczyt z fotodiody w węźle przekracza pewien określony próg od wartości bazowej odczytów światła otoczenia. Następnie renderujemy diody LED, jeśli nastąpi jakakolwiek zmiana w węźle, który powinien być włączony. W przeciwnym razie zapętla się, dopóki coś się nie zmieni, aby przyspieszyć działanie.

Kod można prawdopodobnie poprawić i zamierzam to zrobić, ale jest około 1-2 sekundowe opóźnienie od włączenia świateł po umieszczeniu przedmiotu na stole. Uważam, że podstawowym problemem jest to, że FastLED potrzebuje trochę czasu, aby wyrenderować 96 diod LED na stole, a kod musi przejść przez pętlę i odczytać 77 wejść z tabeli. Próbowałem tego kodu z 8 diodami LED i stwierdziłem, że jest prawie natychmiastowy, ale patrzę na słodki punkt diod LED, które będą działać z tym kodem i będą prawie natychmiastowe, a także poprawią kod.

Krok 6: Włącz Arduino

Włącz Arduino!
Włącz Arduino!
Włącz Arduino!
Włącz Arduino!
Włącz Arduino!
Włącz Arduino!

Teraz wystarczy włączyć arduino i zobaczyć funkcję stołu! Korzystając z wcześniej wspomnianej biblioteki animacji, możesz umieścić kilka fajnych animacji led ws2812b lub możesz umieścić kod stolika kawowego i zobaczyć, jak zapala się w każdej sekcji. Zapraszam do komentowania wszelkich pytań lub opinii, a postaram się odpowiedzieć w odpowiednim czasie. Pozdrawiam!

Zalecana: