Spisu treści:

Oświetlenie biurkowe sterowane Arduino/aplikacją: 6 kroków (ze zdjęciami)
Oświetlenie biurkowe sterowane Arduino/aplikacją: 6 kroków (ze zdjęciami)

Wideo: Oświetlenie biurkowe sterowane Arduino/aplikacją: 6 kroków (ze zdjęciami)

Wideo: Oświetlenie biurkowe sterowane Arduino/aplikacją: 6 kroków (ze zdjęciami)
Wideo: Ups. 2024, Lipiec
Anonim
Image
Image
Oświetlenie biurkowe sterowane Arduino/aplikacją
Oświetlenie biurkowe sterowane Arduino/aplikacją
Oświetlenie biurkowe sterowane Arduino/aplikacją
Oświetlenie biurkowe sterowane Arduino/aplikacją

Do tego projektu chciałem czegoś, co pozwoliłoby mi nauczyć się więcej o elektronice/oprogramowaniu, coś, w co jeszcze się nie zagłębiłem. Uznałem, że światło będzie do tego dobrą platformą.

Projekt, który wymyśliłem, dotyczył lampy w górę, która ma regulację koloru i jasności. W produkcie, temperatura i jasność barwy od ciepłej do zimnej bieli są kontrolowane za pomocą „krążka”, a jego położenie i orientacja zmieniają je niezależnie – jest to dość wyjątkowa/przyjemna interakcja.

Obraz
Obraz

Skończyło się również na stworzeniu aplikacji (również może rzucić sobie wyzwanie), aby je dostosować, a także dodać dodatkową funkcjonalność do sterowania niektórymi diodami LED RGB i ustawić alarm wschodu słońca. Alarm wschodu słońca stopniowo zwiększa jasność w ciągu 30 minut, aby pomóc Ci się obudzić.

Ponieważ jest to mój pierwszy projekt Arduino/App, zakładam, że na pewno będą lepsze sposoby na wykonanie kodu, więc nie przejmuj się! To działa, więc jestem szczęśliwy. Jeśli masz sugestie dotyczące ulepszeń itp., Dobrze by było to usłyszeć..

Wszystkie pliki dla tego projektu (kod wynalazcy arduino/aplikacji, grafika aplikacji itp.) oraz apk aplikacji. można znaleźć pod tym linkiem.

Zgłosiłem to do konkursów Raspberry Pi i FULL SPECTRUM LASER, więc jeśli uważasz, że jest wart głosowania, będzie to bardzo mile widziane!

Czego potrzebujesz….

Elektr. Składniki:

  • Arduino Micro
  • 12 liniowych radiometrycznych czujników Halla
  • Gniazdo prądu stałego
  • Zasilanie 12 V
  • 2x 1W zimne białe diody LED (6000K)
  • 2x 1W ciepłe białe diody LED (2800K)
  • 4x Neopiksele RGB Adafruit
  • Sparkfun Picobuck 350mA sterownik prądu stałego
  • Moduł Bluetooth HC06
  • Płytka prototypowa
  • Bloki zaciskowe
  • Przewody

Materiały:

  • Materiały do produkcji form (karton lub silikon itp.)
  • Żywica poliuretanowa do odlewania
  • Sklejka

Materiały eksploatacyjne:

  • Lutować
  • Farba w sprayu
  • Papier ścierny
  • Kubki do mieszania/mieszadła

Narzędzia:

  • Lutownica
  • Pistolet na klej
  • Szczypce/śrubokręty/noże itp.
  • Wycinarka laserowa

Oprogramowanie:

  • Arduino
  • MIT App Inventor (bezpłatny internet)
  • Photoshop lub coś do tworzenia grafiki aplikacji

Krok 1: Czujniki Halla

Do kontroli/interakcji z produktem chciałem wymyślić coś nieco innego, a nie tylko tarczę lub coś takiego.

Po krótkich badaniach nad różnymi typami elementów elektronicznych znalazłem liniowe czujniki radiometryczne z efektem Halla. Są to w zasadzie czujnik, na którego wyjście wpływają pola magnetyczne. Zwykle wyjście czujników jest o połowę niższe od napięcia wejściowego. Jednak po zbliżeniu magnesu sygnał wyjściowy albo wzrośnie do napięcia wejściowego, albo spadnie do 0 V (granice nasycenia), w zależności od tego, czy jest to biegun północny czy południowy magnesu.

Zdałem sobie sprawę, że mogę to wykorzystać, aby móc kontrolować dwa różne ustawienia na jednym czujniku Halla - narodził się pomysł „krążka”. W wycinanym laserowo krążku ukryty jest magnes, który kontroluje jasność lub temperaturę koloru w zależności od tego, który koniec był skierowany w stronę czujników. Później przechodzę do kodu Arduino, ale zasadniczo czytam te czujniki i szukam, czy wyjście wzrosło powyżej „wysokiego wyzwalacza”, czy spadło poniżej „niskiego wyzwalacza”. Używam wielu czujników efektu Halla, aby umożliwić mi mapowanie określonej temperatury kolorów i wartości jasności na każdym z nich, które są wyzwalane podczas przesuwania krążka po łuku.

Obraz
Obraz

Krok 2: Sprzęt elektroniczny

Sprzęt elektroniczny
Sprzęt elektroniczny
Sprzęt elektroniczny
Sprzęt elektroniczny
Sprzęt elektroniczny
Sprzęt elektroniczny

Pierwszym krokiem tego projektu było podłączenie sprzętu elektronicznego. Zdecydowałem się na użycie Arduino Micro, ponieważ ma on dużą liczbę analogowych pinów do odczytu - co pozwala mi korzystać z wielu czujników efektu Halla, aby zapewnić wystarczającą rozdzielczość do regulacji ustawień. Zasilacz 12V DC jest dzielony pomiędzy zasilanie Arduino i sterownika LED.

Łuk sterujący wykorzystuje 11 czujników Halla, a kolejny 1 służy do wyłączania światła. Zostały one podłączone do pinów A0->A5 i 4, 6, 8, 9, 10, 12. Mają wspólną szynę 5V i uziemienie.

Zastosowane przeze mnie diody LED mają moc 1W i wymagają zasilacza stałoprądowego. Użyto Sparkfun PicoBuck, ponieważ zapewnia stałe 350mA do maksymalnie 3 kanałów wyjściowych. Zasilanie 12V jest podłączone do pinów Vin sterowników. Sterownik posiada piny wejściowe do sterowania PWM wyjść, zostały one podłączone do pinów 3 i 5 Arduino.

Następnie podłączono moduł bluetooth. Bluetooth Rx->Arduino Tx, Tx->Rx oraz 5v.masa.

Obraz
Obraz

Diody LED zamontowano na osobnej płytce. Dwie chłodnobiałe diody LED są połączone szeregowo, podobnie jak ciepłe. Łączą się one z wyjściami 1 i 2 sterownika. Diody LED RGB to Neopiksele Adafruit; są to moduły dające się łączyć w łańcuchy, którymi można indywidualnie sterować kolorem i jasnością z jednego pinu Arduino. Łączą się one z pinem 11 i pinami 5V/masa.

Krok 3: Wynalazca aplikacji

Wynalazca aplikacji
Wynalazca aplikacji
Wynalazca aplikacji
Wynalazca aplikacji
Wynalazca aplikacji
Wynalazca aplikacji

Aby stworzyć aplikację, użyłem MIT App Inventor, jest darmowy i dość łatwy do nauczenia/użytkowania. Najpierw musiałem stworzyć ekrany/grafikę aplikacji - można to zrobić w Photoshopie itp. Ułatwia to App Inventor, jeśli masz wszystkie komponenty, które tworzą ekrany jako osobne obrazy/pliki.

App Inventor ma dwa widoki, jest zakładka „Projektant” dla elementów wizualnych front-endu i zakładka „Blocks” dla kodu.

Korzystając z zakładki „Projektant” zbudowałem ekrany aplikacji. Jednym z problemów, który znalazłem, jest to, że komponent bluetooth nie działa na wielu ekranach, więc po ekranie „powitalnym” wszystkie pozostałe (połączenie, RGB, temperatura kolorów, alarm) są tworzone na tym samym ekranie – skutecznie włączam warstwy /wyłączony.

Główne narzędzia, których używałem, to „układ/wyrównanie” i „płótno”. Płótno to obszar wrażliwy na dotyk, który można wyświetlić jako obraz.

Po skonfigurowaniu wizualizacji nadszedł czas, aby przejść do zakładki „Bloki” i napisać kod. Opiszę to pokrótce, ale prawdopodobnie będzie łatwiej, jeśli zaimportujesz mój plik do App Inventor i pobawisz się…

Te pierwsze bloki dotyczą ekranów połączeń. Aby umożliwić aplikacji automatyczne połączenie się z modułem bluetooth Arduinos, tworzę i ustawiam zmienną na adres mojego HC06. Używam timera do zmiany obrazu tła podczas łączenia. Jeśli połączenie się powiedzie, ładuje ekran temperatury kolorów. Jeśli Bluetooth nie połączy się automatycznie, musisz nacisnąć przycisk „połącz z urządzeniem”. Spowoduje to wyświetlenie listy wszystkich urządzeń Bluetooth, które może zobaczyć Twój telefon. Polecenie „bluetoothclient1.connect” używa adresu urządzenia wybranego z tej listy do połączenia.

Obraz
Obraz
Obraz
Obraz
Obraz
Obraz

Bloki te kontrolują to, co dzieje się po dotknięciu każdego z przycisków menu - zmiana pomiędzy RGB, temperaturą kolorów i alarmem. Po dotknięciu odpowiednie warstwy wizualne są włączane i wyłączane. Tzn. po dotknięciu przycisku menu RGB przełącza obraz tła płótna przycisków na ciemną ikonę, włącza ekran RGB, a drugi wyłącza.

Sterowanie mocą i jasnością jest dzielone między ekrany RGB i temperatury kolorów. Aby Arduino wiedziało, które diody LED ma sterować, muszę mu powiedzieć, który ekran jest załadowany. Ciąg tekstowy w formacie (ekran)? jest wysyłany przez telefony bluetooth za pomocą polecenia BluetoothClient1. SendText.

Obraz
Obraz

Ten blok wysyła ciąg (Power)? po naciśnięciu przycisku zasilania.

Obraz
Obraz

Bloki te kontrolują regulację temperatury barwowej. Kiedy dotykasz płótna, współrzędna Y punktu kontaktu jest używana do ustawienia zmiennej „cool”. Wartość Y zależy od rozmiaru płótna w pikselach, więc w moim przypadku wartość od 0 do 450. Używam mnożnika, aby przekonwertować to na użyteczną wartość PWM (0-255). Następnie wysyłam ciąg z tą wartością i identyfikatorem w postaci (Tempvalue)?.

Obraz
Obraz

Podobne bloki jak powyżej, ale do regulacji jasności. Używając tym razem współrzędnej X i różnych mnożników, ustaw zmienną „Jasny” na wartość od 10 do 100.

Obraz
Obraz

Te bloki służą do sterowania RGB. Istnieje polecenie o nazwie „GetPixelColor”, którego można użyć do uzyskania wartości RGB piksela, którego dotyka palec. Z jakiegoś powodu wyprowadza wartość z dodatkowymi 255 na końcu, więc robię trochę pracy, aby uzyskać wartość w formacie (RGBredvalue.greenvalue.bluevalue.)? Ponownie jest to następnie wysyłane do Arduino, ale z RGB jako identyfikatorem w ciągu.

Obraz
Obraz

Kolejna sekcja bloków dotyczy ustawień alarmów. Pierwszy blok kontroluje, co się dzieje, gdy dotykasz/przeciągasz słońce w górę i w dół. Ponownie, polecenia „pobierz bieżące X i Y” są używane do uzyskania wartości miejsca, w którym znajduje się palec, i zmiany obrazu tła w zależności od wysokości słońca. Pozycja słońca również sterowniki, czy alarm jest włączony lub wyłączony, jest to wysyłane przez bluetooth.

Obraz
Obraz
Obraz
Obraz

Gdy dotkniesz lub zakończysz przesuwanie słońca, wyświetli się selektor czasu, który pozwoli Ci ustawić godzinę alarmu. Główną częścią tego następnego bloku jest wykorzystanie bieżącego czasu do obliczenia, ile milisekund pozostało do ustawienia alarmu. Ta wartość jest następnie wysyłana do Arduino

Obraz
Obraz
Obraz
Obraz

W następnym kroku opiszę, jak Arduino odczytuje i używa ciągów…

Krok 4: Kod Arduino

Podobnie jak w przypadku kodu aplikacji, omówię to krótko….

Najpierw ustawiłem wszystkie moje zmienne, przypisując czujniki i diody LED do właściwych pinów. Sygnał wyjściowy z czujników hallotronowych zostanie odczytany za pomocą funkcji analogRead, dającej wartość od 0 do 1023. Jak opisano wcześniej, wyprowadza połowę, gdy nie ma magnesów, więc około 500. Używam zmiennych wyzwalania Low i High, aby ułatwić mi wyreguluj, gdy wie, że krążek jest nad czujnikiem.

Obraz
Obraz

Neopiksele wymagają biblioteki, która jest tutaj zdefiniowana.

Obraz
Obraz
Obraz
Obraz

Konfiguracja pusta uruchamia szeregi, dla Micro piny Rx / Tx (bluetooth) używają Serial1.. Piny są następnie ustawiane jako wejścia lub wyjścia, a diody LED są wyłączone.

Obraz
Obraz

Teraz to główna pętla…

Pierwsza sekcja sprawdza, czy z aplikacji są odbierane jakiekolwiek dane. Serial1.available() odczytuje numer seryjny i pobiera liczbę bajtów w ciągu. Jeśli to > 0, to wiem, że nadchodzą dane.

Jeśli pamiętasz, wszystkie ciągi, które wysyłam z aplikacji, kończą się znakiem zapytania…. tj. (Jasny100)?

Używam funkcji.readStringUntil, aby odczytać dane szeregowe do znaku zapytania (Bright100) i ustawić zmienną BTstring na to. Sprawdzam, czy BTstring kończy się znakiem „)”, aby upewnić się, że odbierane są kompletne polecenia. Jeśli tak, wówczas wywoływana jest pętla programu Bluetooth… jest to opisane w dalszej części..

Obraz
Obraz

Ten następny bit steruje alarmem wschodu słońca. Zasadniczo, jeśli alarm jest włączony, a czas jest prawidłowy, diody LED będą zanikać. Ze względu na to, że ludzkie oko postrzega światło logarytmicznie, lepiej jest wykonywać wszelkiego rodzaju rozjaśnienia LED w górę/w dół z krzywą wykładniczą, a nie liniową. Stąd równanie napędza wartości PWM…

Obraz
Obraz

Aby uniknąć zakłócania kontroli aplikacji przez krążek, zostaje on dezaktywowany podczas korzystania z aplikacji. Aby ponownie aktywować krążek, musisz odsunąć go od produktu na 5 sekund. Ten fragment kodu najpierw sprawdza, czy wszystkie czujniki wysyłają wartość stanu ustalonego (brak magnesu), a następnie uruchamia licznik czasu. Po upływie 5 sekund zmienna BTinControl jest ustawiana z powrotem na fałsz.

Obraz
Obraz

Teraz kod do krążka. Najpierw trzeba odczytać czujniki.

Jeśli światło jest aktualnie wyłączone, sprawdzi, czy którykolwiek z czujników znajduje się powyżej lub poniżej punktów wyzwalania, tj. krążek został umieszczony na łuku. Jeśli tak, białe diody LED będą rozjaśniane do ostatniego ustawienia, bez względu na to, gdzie je umieścisz.

Obraz
Obraz
Obraz
Obraz

Aby diody LED były ustawione na ostatnie ustawienie, zamiast aktualizować się do wartości skojarzonych z dowolnymi czujnikami, z których zostały wyzwolone, zmienna MovedSinceStandby jest ustawiona na wartość false. Ten następny fragment kodu w zasadzie sprawdza, czy przesunąłeś krążek z jego początkowej pozycji o ustaloną kwotę….

Obraz
Obraz
Obraz
Obraz

Jeśli poruszasz krążkiem, wywoływany jest „Program Główny”, aby zaktualizować jasność/temperaturę barwową. Jest to opisane w dalszej części.

Obraz
Obraz

Ostatni bit w tej pętli głównej sprawdza, czy krążek został ponownie umieszczony w doku w stanie gotowości – czy czujnik 12 odczytuje wartość powyżej/poniżej punktu wyzwalania. Jeśli tak, dioda LED zgaśnie..

Obraz
Obraz

Pętla bluetooth:

Jak opisano powyżej, gdy dane są odbierane przez bluetooth, ciąg jest odczytywany. Musimy teraz sprawdzić, co mówi ten ciąg…

Wszystkie struny poza jasnością, temperaturą kolorów i RGB są dość łatwe w obsłudze. Sprawdzasz, czy BTstring jest równy tekstowi wysłanemu z aplikacji.

Jeśli sobie przypominasz, za każdym razem, gdy zmienisz ekrany w aplikacji, wyślesz polecenie bluetooth. Tutaj pytamy o to i ustawiamy niektóre zmienne na prawdę lub fałsz, abyśmy wiedzieli, na którym ekranie się znajdujesz.

Zauważ, że na końcu każdej sekcji ustawiam zmienną BTinControl na true i usuwam wartość BTstring.

Obraz
Obraz
Obraz
Obraz

Gdy naciśniesz przycisk zasilania w aplikacji, diody LED znikną w górę lub w dół. Zmienne ustawione powyżej dla tego, na którym ekranie się znajdujesz, są używane do określenia, czy do sterowania ma być dioda LED RGB, czy biała..

Obraz
Obraz
Obraz
Obraz

Jeśli chodzi o jasność, temperaturę barwową i RGB, napisy muszę odczytać w nieco inny sposób. Ponieważ część liczbowa ciągu będzie się zmieniać, zastanawiam się, czy ciąg zaczyna się od jednego z identyfikatorów, a nie od pełnego ciągu, więc po prostu (tutaj jasne..

Teraz muszę oddzielić rzeczywistą wartość jasności od ciągu. Format ciągu wysyłanego z aplikacji to (Brightvalue), więc wiem, że wartość jasności będzie między „t” i „)”. Pozycja 't' pozostanie stała, zawsze będzie to siódmy znak w łańcuchu. Ale ponieważ wartość jasności może wynosić od 10 do 100, pozycja „)” ulegnie zmianie. Używam polecenia.indexOf, aby ustalić, gdzie jest ')', jaki to jest znak, a następnie mogę użyć polecenia.substring, aby odczytać ciąg między 7 znakiem a pozycją znaku ')'. To pozostawia mi tylko wartość jasności, której mogę użyć do dostosowania RGB lub białych diod LED w zależności od ekranu.

Obraz
Obraz

Regulacja temperatury barwowej jest podobnym procesem do powyższego, ale tym razem wartość będzie pomiędzy „p” i „)”…

Obraz
Obraz

Do regulacji RGB mamy trzy wartości do wyodrębnienia z ciągu, ale to znowu podobny proces. Z aplikacji otrzymujemy stringi w postaci (RGBvalue.value.value)

Więc wiem, że czerwona wartość będzie pomiędzy „B” a pierwszą kropką. Zielona wartość znajduje się między 1./2. kropką, a niebieska wartość między 2. kropką a „)”.

Gdy mamy już wartości, neopiksele są ustawiane na nowy kolor…

Obraz
Obraz

Tutaj sprawdzamy, czy alarm jest włączony czy wyłączony. Jeśli czas alarmu zostanie zmieniony, otrzymamy ciąg z liczbą milisekund od chwili obecnej do alarmu. Znowu ta wartość jest pobierana z napisu i aby móc sprawdzić, czy jest godzina rozpoczęcia wschodu słońca musimy ustawić zmienną na aktualny czas (millis).

Obraz
Obraz

Sterowanie krążkiem:

Jak opisano wcześniej, jeśli krążek (magnes) jest w jedną stronę w górę, będzie napędzał wyjście czujnika Halla poniżej niskiego wyzwalacza, a jeśli w drugą stronę powyżej wysokiego wyzwalacza.

Pozwala to kontrolować zarówno jasność, jak i temperaturę barwową na tym samym łuku.

Odczytywane są wartości czujników. Jeśli którykolwiek z nich jest mniejszy niż dolna wartość wyzwalania, dostosowujemy temperaturę barwową. Pod obszarem łuku znajduje się 11 czujników, których wyjścia z kolei przechodzą poniżej punktu wyzwalania, gdy krążek jest nad nimi przesuwany. Każdy czujnik ma odpowiednią wartość PWM dla zimnych i ciepłych diod LED, zaczynając od czujnika 1 przy 100% ciepła, 0% chłodu i pracując do 11 przy 0% ciepła i 100% chłodu.

Obraz
Obraz
Obraz
Obraz
Obraz
Obraz

Sterowanie jasnością odbywa się w ten sam sposób.. sprawdzenie, czy wyjścia czujników tym razem są powyżej górnego wyzwalania i nadanie każdemu czujnikowi wartości wagi jasności.

Ta waga jasności jest następnie mnożona przez wartość temperatury barwowej, aby uzyskać ogólną wartość wyjściową. Umożliwia ustawienie dowolnej temperatury barwowej na dowolną jasność…

Obraz
Obraz
Obraz
Obraz

Krok 5: Mieszkanie

Mieszkania
Mieszkania
Mieszkania
Mieszkania
Mieszkania
Mieszkania
  1. Zacząłem od wykonania formy z tektury na dolną część obudowy. Aby stworzyć wgłębienia dla obszaru kontrolnego, wycięłem laserowo kawałek sklejki w kształcie łuku i użyłem monety 5 pensów do stacji dokującej „standby”. Zostały one przyklejone do tekturowej formy, zwracając uwagę, aby umieścić je we właściwej pozycji, która byłaby zgodna z czujnikami efektu Halla.
  2. Następnie wymieszano żywicę poliuretanową. Rzeczy, których używam, mają prosty stosunek 1:1 i utwardzają się w ciągu około 20 minut… więc muszę działać dość szybko!
  3. Wstępne nalewanie miało na celu wypełnienie dna formy. Po tym zestawie dodałem wewnętrzną ściankę z tektury, aby umożliwić mi wylanie ścian bocznych.
  4. Aby stworzyć górną część, w której miałyby siedzieć diody LED, wyciąłem i przykleiłem pod kątem plastikową rurkę/kubek. I ponownie wlano żywicę i pozostawiono do zastygnięcia.
  5. Teraz obudowa była już gotowa, musiałem wywiercić kilka otworów i dobrze ją przeszlifować.
  6. Nałożono podkład, a następnie natryśnięto ostatnią wierzchnią warstwę farby.

Krok 6: Montaż/wniosek

Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
Montaż/Wniosek
  1. Z obudowy wycięto gniazdo na gniazdo DC. Podnośnik jest następnie wklejany.
  2. Płytkę LED można następnie przykręcić w górnej części, a przewody poprowadzić do dolnej części.
  3. Przewody z diod LED i gniazda DC zostały następnie przykręcone do odpowiednich bloków zacisków.
  4. Płyta główna jest następnie przykręcana do obudowy
  5. Kawałek sklejki jest następnie przykręcany, aby zakryć spód obudowy.
  6. Ostatnią rzeczą jest sklejenie „krążka” ze sobą, upewniając się, że bieguny magnesu są zorientowane z właściwą nasadką „jasności” lub „temperatury barwy”.

Ogólnie światło działa całkiem dobrze! W oprogramowaniu jest kilka błędów, które należy usunąć, a diody LED RGB mogą być jaśniejsze. Mogę też dodać czujnik światła otoczenia, który automatycznie zmienia temperaturę barwową, zaczynając od „chłodnej” w ciągu dnia i zmieniającej się na „ciepłą” w nocy.

Pozdrawiam za czytanie!

Zalecana: