Stojak na kartridże – wersja IoT:)

Gromadzące się kartridże do SNES leżały sobie w artystycznym nieładzie… Wreszcie postanowiłem je uporządkować na stojaku… Ale gdyby tak dodać do niego trochę elektroniki… Podświetlenie diodami wskazującymi ilość gier? Nie ma problemu. Wyświetlacz? Jasne. Podłączenie do Internetu?! Czemu nie!


Ostatni stan:

Pomysł jest taki:

  • Stojak na kartridże, max 22 sztuki,
  • Boki stojaka podświetlane taśmami LED,
  • Kolor podświetlenia zmieniający się w zależności od tego, ile w stojaku znajduje się kartridży (coś jak zielono-czerwone światełka na parkingu),
  • Stojak wyposażony w wyświetlacz…
  • …na którym będę podawał ostatnie wiadomości ze strony Nintendo:)

Ze względu na potrzebę ściągania wiadomości z sieci, użyję WeMos D1 (czyli właściwie ESP8266/12). Taśmy LED wymagają napięcia 12v, stąd całość będzie zasilana takim właśnie zasilaczem.

Zanim zaczniecie…

Przeczytajcie:

Sterowanie

Sterowanie stojakiem oprę na płytce WeMos D1. Płytka ta to nic innego jak esp8266 wyposażony w kilka dodatkowych układów, które umożliwiają np. programowanie przez USB.

WeMos będzie sterował taśmami led, wyświetlaczem, sprawdzał ilość kaset w stojaku. Oczywiście do tych celów mógłbym użyć każdy inny układ – z Arduino na czele. Ale mnie chodzi o coś więcej.

Mój stojak ma wyświetlać najnowsze informacje ze strony Nintendo.com. To, czym wyróżnia się chip ESP8266 od innych mikrokontrolerów, jest wbudowana możliwość łączenia się po interfejsie WiFi. Wykorzystam to. Mój WeMos podłączy się do Internetu i stamtąd odczyta najnowsze wiadomości. A może obsłuży jeszcze protokół NTP i wyświetli godzinę?

Stojak

Jak zwykle zacząłem od pomiarów. Do mierzenia w ciasnych półkach świetnie nadaje się miernik laserowy:

Sam stojak zbudowałem z 4mm sklejki. Boczne ścianki są podwójne o takiej szerokości, żeby można w nie było wpasować aluminiowe prowadnice dla taśm LED:

Boki połączyłem górą i dołem. Do klejenia naprawdę prostych półek bardzo przydają się kątowe imadełka:

Powoli wyłania się kształt stojaka:

Dopasowałem tył z płyty pilśniowej (na razie go nie wklejam) – zamknie stojak i usztywni całość:

Zwróćcie uwagę na wycięcia u szczytu boczków. Wyprowadzę przez nie resztkę taśmy LED oraz jej kabelki. Oczywiście będę musiał je przełożyć do środka stojaka. W tym celu wywierciłem sobie przepusty:

Przy okazji w półkach wywierciłem otwory na czujniki HC-SR04. To najtańszy sposób mierzenia odległości:

Teraz dodałem półeczki rozdzielające:

Nastęnie naciąłem deseczki na podpórki pod kartridże:

…i po kolei je przyklejałem na bokach. Specjalnie robiłem to pod kątem, żeby kartridże „wpadały” w głąb stojaka:

Połowa skończona:

W równym odmierzaniu odstępów między podpórkami posłużyła mi mała deseczka docięta na wymiar:

W górnej części stojaka przewidziałem półeczkę na kartridże dla GameBoy’a:

Niestety grzbiet sklejki nie wygląda zbyt atrakcyjnie. Postanowiłem go okleić fornirem:

Paski forniru dobrze jest docisnąć:

I półka gotowa:

W podobny sposób będę oklejał wszystkie frontowe deseczki… Brzmi jak mnóstwo zabawy:)

Teraz wziąłem się za front:

Tym razem zrezygnowałem ze sklejki i wykonałem go z płyty pilśniowej. Materiał może i mało szlachetny, ale dużo łatwiejszy w obróbce. W szerszej części wykonałem otwór na wyświetlacz:

O tak:

Oczywiście nie pozostawię takiej białej ramki:) Pilśnię nakleiłem na fornir:

Tego typu fornirowanie wymaga dokładnego dociśnięcia. Użyłem do tego dwóch desek do krojenia (ikea!) oraz ścisków stolarskich:

Ponieważ boki frontu wykonałem z płyty pilśniowej, musiałem je okleić, żeby nie wyglądały brzydko:

Okienko wyświetlacza obkleiłem listewkami z forniru:

…i oszlifowałem, żeby nie wyglądało tak „kwadratowo”:

W międzyczasie przykleiłem podpórki pod czujniki odległości:

Całość poszła do szlifowania i lakierowania. Zazwyczaj kładę 2-3 warstwy lakieru szlifując drewno między kolejnymi malowaniami.

Wziąłem się również za podpórki pod płytkę sterującą. Czasami zamiast piłować je z drewna, używam gotowych materiałów – na przykład sześciennych klocków:

Skleiłem ze sobą dwie kostki. W górnych nawierciłem otwory i włożyłem w nie śrubki 2mm; ustabilizowałem „distalem”:

Płytka sterująca wmontowana:

Podobnie wykonałem podpórki pod LCD:

W ten sposób mogłem już osadzić wyświetlacz:

Teraz trochę nadrobiłem przód: przykręciłem z powrotem metalowe  prowadnice i dopasowałem długość pasków LED:

LEDy wkleiłem na kawałki przylepnej taśmy dwustronnej:

Pierwszy test oświetlenia:

Zasilanie

W skład zestawu będzie wchodziło kilka elementów, które wymagają  różnych poziomów zasilania. W tym:

  • WeMos: zasilany 3.3v (pin 3v3) lub 5v (pin 5v),
  • Taśma RGB: zasilanie +12v,
  • Wyświetlacz 4×16: zasilanie 5v,
  • Czujniki HCSR-04: 5v.

Reasumując:

  • Całość zasilę z 12v,
  • Na potrzeby WeMos obniżę napięcie do 5v,
  • 5v użyję do zasilenia czujników i wyświetlacza.

Do obniżenia napięcia z 12v do 5v użyłem prostej przetwornicy step-down:

Przylutowałem ją na płytkę uniwersalną i dołożyłem terminale:

Terminal wyjściowy dostarcza masę, 12v (napięcie wejściowe) oraz 5v z przetwornicy.

Uwaga: Zanim podłączycie taką przetwornicę, za pomocą potencjometru (ten niebieski) ustawcie napięcie wyjściowe. Podłączcie zasilanie na wejściu, miernik na wyjściu i (cierpliwie) kręćcie śrubokrętem do uzyskania pożądanego wyjścia. Zazwyczaj napięcie zmienia się w dość wąskim zakresie obrotów, więc dostrojenie może Wam chwilę zająć.

Wreszcie zasilanie trafiło do stojaka:

Warto też dołożyć główny wyłącznik:

Podłączenie do WeMos

Wemos – porty (znalezione na forum esp8266))

Niestety Wemos nie oferuje aż tyle portów, co np. Arduino UNO (zobacz: wemos d1 mini: esp8266…).

Pin wemos Funkcja Pin ESP-8266 Uwagi
TX TXD – nadawanie na porcie szeregowym TXD
RX RXD – odbiór RXD
A0 Wejście analogowe max 3.3V (o tym poniżej) A0
D0 IO GPIO16 Lepiej nie dotykać
D1 IO, SCL GPIO5 Wyświetlacz
D2 IO, SDA GPIO4 Wyświetlacz
D3 IO, 10k Pull-up GPIO0 Lepiej nie dotykać (flashowanie firmware)
D4 IO, 10k Pull-up, BUILTIN_LED GPIO2 Lepiej nie dotykać (flashowanie firmware)
D5 IO, SCK GPIO14 Pobudzenie czujników
D6 IO, MISO GPIO12 Odpowiedź czujnika A
D7 IO, MOSI GPIO13 Odpowiedź czujnika B
D8 IO, 10k Pull-down, SS GPIO15  Lepiej nie dotykać (flashowanie firmware) – ale musiałem – sterowanie taśmami LED.
G Ground GND
5V 5V
3V3 3.3V 3.3V
RST Reset RST

Użyję następujących pinów:

  • i2c do wyświetlacza: D1 (SCL) i D2 (SDA),
  • Pobudzenie czujników (będzie wspólne dla obydwóch): D5,
  • Echo z czujników: D6 i D7,
  • Sterowanie taśmą: 2 piny dla taśm lewej i prawej…

No to mam problem. Obydwiema taśmami chciałem sterować osobno. Wygląda jednak na to, że będę musiał nimi sterować razem przez jeden pin D8. Trochę to skomplikuje kod – ale nie mam wyboru.

Używanie pinu D8 może być kontrowersyjne, jako że jest on przeznaczony do programowania ESP8266 (napędzającego Wemos). Niestety nie miałem wyboru…

Konwersja poziomów napięć

Układy wchodzące w skład stojaka posługują się różnymi poziomami logiki:

  • Wemos D1 posługuje się logiką 3.3v,
  • Logika taśma LED (DIN) wymaga sterowania 5v,
  • Czujniki HC-SR04 wymagają pobudzenia 5v – i takim napięciem odpowiadają (są wyjątki 3.3v),
  • Wyświetlacz pracuje z logiką 5v.

Wygląda więc na to, że konieczne będzie dopasowywanie poziomów napięć. Użyję do tego taniego 4-ro kanałowego konwertera:

A więc:

  • SDL i SCA do wyświetlacza – do 2 kanały,
  • Taśma LED – trzeci kanał,
  • Pobudzenie (TRIG) – wspólne dla obydwóch czujników – to czwarty kanał.

Wyjścia z czujników HC dopasuję do portów Wemos za pomocą dzielników napięcia – np. z rezystorów 4k7 i 10k.

Płytka sterująca

Sterowanie zlutowałem na uniwersalnej płytce przewlekanej jednostronnej. Na niej umieściłem wszystkie komponenty. Wemos’a i konwerter logiki wpiąłem do żeńskich gniazd goldpin.

Wszystkie złącza wykonałem na konektorach XH. Są bardzo praktyczne i znacznie lepsze od goldpinów. Złącza wykonałem dla:

  • Zasilania (2x),
  • Logiki taśm (2x),
  • Czujników odległości (dwa po 4x),
  • Wyświetlacza (4x).

Całość połączona kynarem.

Wyświetlacz LED

Tutaj odeślę Was do innego postów: Wemos D1: podłączenie wyświetlacza LED oraz Wemos D1 i wyświetlacz LCD/I2C: własne znaki. Zawierają wszystkie informacje wymagane do podłączenia i oprogramowania tego wyświetlacza.

Taśmy LED

Do oświetlenia boków stojaka użyję taśmy LED kontrolowanej przez UCS1903. Zacznijcie od pobrania biblioteki ze strony: https://github.com/FastLED/FastLED. Zainstalujcie w folderze z bibliotekami, np. ~/sketchbook/libraries.

Pozostaje napisać kod:

Ten kod zbudowano dla:

  • DIN taśmy podpiętej do portu D8 (przez konwerter logiki),
  • 8 segmentów LED (razem 24 diody),

Kod zapala pierwszą diodę na czerwono.

A właśnie – mam przecież 2 paski – jak sterować je przez jeden pin? Paski połączyłem szeregowo:

  • początek pierwszej taśmy do D8,
  • koniec pierwszej taśmy do początku drugiej taśmy.

Czujniki HC-SR04

W półce zamontowałem dwa czujniki odległości HC-SR04. Czujniki te mierzą odległość do najbliższej im kasety. Na tej podstawie zapalane są diody symbolizujące wypełnienie półki.

Czujniki podłączyłem:

  • Wspólny pin TRIG, podłączony (przez konwerter poziomów logiki) do D5,
  • Wyjścia z czujników ECHO, podłączone do D6 i D7 poprzez dzielnik napięcia.

Więcej o obsłudze czujnika przeczytacie w tekście HC-SR04: ultradźwiękowy czujnik odległości.

Niestety…

Czujniki HC-SR04 charakteryzują się pewnym rozproszeniem wiązki. Okazało się, że ultradźwięki odbijają się od bocznych półeczek. Gdy je przesłoniłem kartkami papieru – odległość do najniższego kartridża mierzona była bez najmniejszych problemów:

Przy okazji wyszło na jaw, że każdy model czujnika ma trochę inny rozrzut. Znalazłem taki czujnik, który mierzył aż do 2 kartridży – inne wykrywały dopiero 5.

Wypróbowałem też kilka sposobów wytłumienia odbić np. przez obklejenie półek korkiem czy filcem. Korek okazał się pewnym rozwiązaniem. Umieszczony na środkowych półkach pozwolił na zwiększenie użytecznego zakresu o 2-3 centymetry.

Podjąłem też próby „skoncentrowania” wiązek z nadajnika i odbiornika HC-SR04.

Dało to pewne rezultaty… Ale czujnik zrobił się dość kapryśny. Dodatkowo po wykonaniu modyfikacji, oba czujniki zaczęły zachowywać inaczej. Dla każdego z nich trzeba było inaczej interpretować zwracane odległości.

Ostatecznie nie rozwiązałem problemu. Półka „wykrywa” kasety od mniej więcej 3-4 pozycji.

Kod

Kod to właściwie zlepek bardzo różnych przykładów z Wemos – z kilkoma dodatkami do sterowania wyświetlaczem i diodami LED. Nie jest może piękny, muszę jeszcze nad nim popracować – ale generalnie robi to, co powinien.

 

Podsumowanie

Półka powstała i działa. Niestety nie do końca tak, jak chciałem.

Odległości do kartridży nie są mierzone poprawnie. Być może pomogłoby inne ustawienie czujników (np. poprzeczne lub bliżej krawędzi półki). Niestety problem wykryłem na późnym etapie projektu. Jego naprawienie wymagałoby praktycznie przebudowania całej półki – bez gwarancji na powodzenie.

Najmniej problemów sprawiło oprogramowanie Wemos. Podłączenie wyświetlacza, czujników, taśm – wszystko zrealizowałem praktycznie na fragmentach kodu dostarczonych z bibliotekami.

Największą bolączką Wemos jest niewielka ilość wyprowadzonych GPIO. Ledwo – ledwo starczyło ich na ten projekt. Większe projekty będą wymagały jakiegoś ekspandera portów, np. MCP23008.

Ale ogólnie – niezła zabawa.

Materiały

  • Sklejka 4mm
  • Płyta pilśniowa,
  • Fornir 1mm,
  • Szyny aluminiowe do pasków led (z blendą),
  • Taśmy LED UCS1903,
  • Dwa czujniki HC-SR04,
  • Moduł WeMos D1 mini,
  • Konwerter logiki, 4 kanały, oraz rezystory 4k7 i 10k do dzielnika napięcia,
  • Płytka uniwersalna,  jednostronna, 10x9cm,
  • Gniazda goldpin,
  • Konektory XH,
  • Kynar,
  • Śrubki fi 2mm/10mm,
  • Papier ścierny, lakier bezbarwny,
  • Miniszlifierka, piła tarczowa,

Źródła

  • Dokumentacja UCS1903
  • https://hackaday.io/project/8856-incubator-controller/log/29259-driving-lcd-with-i2c
  • https://github.com/nethoncho/FastSPI_LED2

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *