Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Led'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona


TempX

  1. Napisałem prosty program, którego zadaniem jest wyświetlaniu na ośmioelementowej listwie LED dowolnego wzoru i jego przesuwanie. //Dołączenie biblioteki obsługującej linijkę led #include <Adafruit_NeoPixel.h> //dedklaracja pinów i stałych const int ledPin = A0; const int ledCount = 8; //ilość LED w linijce const int patCount = 3; //ilość elementów wzoru do wyświetlania //deklaracja tablicy wyświetlanego wzoru unsigned long pattern[patCount]; bool start = true; //flaga używana w instrukcji if , start = true dla początkowego wzoru, start = false dla kolejnych wzorów //Konfiguracja linijki Adafruit_NeoPixel linijka = Adafruit_NeoPixel(ledCount, ledPin, NEO_GRB + NEO_KHZ800); void setup() { //Inicjalizacja linijki linijka.begin(); linijka.show(); } void loop() { //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa if (start) { //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); start = false; } else { //zmiana wzoru - przesunięcie o jeden element w górę, element ostatni staje się pierwszym unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); } } Program nie jest skomplikowany, wymaga zdefiniowania kolorów: //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); zadeklarowania w tablicy pattern: unsigned long pattern[] = {blue, blue, red}; przypisania kolejnym LED elementów wzoru: for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } wyświetlenia: linijka.show(); delay(150); Funkcję ruchu uzyskałem dzięki zmianie wzoru - przesuwając elementy o jeden tzn.: pierwszy staje się drugim, drugi - trzecim, a ostatni - pierwszym: unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; oraz ponownemu przypisaniu elementom LED kolejnych elementów nowego wzoru i wyświetleniu: //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Nic nadzwyczajnego, ale uruchamiając program napotkałem kilka istotnych problemów. Najważniejszy, to deklaracja zmiennych i ich zasięg. Aż się prosi by fragment przypisywania elementom LED elementów wzoru i wyświetlenie wstawić do odrębnej funkcji: //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Jednak gdy to zrobiłem, okazało się, że kompilator nie zgłaszał błędu, ale zapisany wzór nie był wyświetlany. Podobnie prosi się, by fragment funkcji void loop(): //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa który właściwie mógłby być wykonywany tylko raz, umieścić w void setup(). Próba umieszczenia tego fragmentu do setup także kończyła się błędami kompilacji. Czy mógłby ktoś bardziej biegły w programowaniu powiedzieć, co jest nie tak i skąd błędy w kompilacji i sygnalizowanie błędów zasięgu zmiennych? Co trzeba zrobić by powtarzające się fragmenty zapisać w funkcji?
  2. Dzień dobry, od niedawna próbuję stworzyć grę, chodzi o to że diody migają na lewo i prawo, a gracz ma wcisnąć przycisk aby miganie się zatrzymało. W zależności od tego na jakiej diodzie LED gracz zatrzyma, dostanie punkty (wyświetlane na LCD). I teraz chodzi o to że muszę w jednym kodzie sprawdzać czy przycisk nie został naciśnięty, i kontrolować miganie diod LED. Gdyby była opcja dwóch funkcji void loop to problem by był rozwiązany. Więc, czy można w jednym kodzie mieć dwie funkcje loop? Jeśli tak to proszę powiedzieć jak tego użyć, a jeśli nie to jak wykorzystać jedną funkcję loop do tego co chcę zrobić. Z góry dziękuję! 🙂
  3. Zrobiłem na szybko eksperyment z drukarką 3D i wyszła mi lampka nocna. Wszystko zaczęło się od wydruku litofan'u, takiego jak poniżej: Dorobiłem do tego na szybko świecącą płytkę z pasków LED: Oraz mocno toporne pudełko z płyty meblowej (dodałem nawet przełącznik i potencjometr): Koniec końców wyszła mi pierwsza w życiu lampka nocna: Dałem z siebie całe 47%, ale i tak jestem bardzo dumny. Mam już od żony i córki zamówienia na dwie kolejne lampki 🙂
  4. Cześć, na wstępie zaznaczę, że dopiero zaczynam i jestem całkowicie zielony jeśli chodzi o elektronikę. Szukając pomysłu na prezent dla drugiej połówki znalazłem coś takiego [LINK] i postanowiłem, że zrobię swoją własną wersje tylko przy wykorzystaniu Arduino Nano i programowalnych ledów. Chciałbym żeby całość była zasilana bateriami - i tutaj jest główny powód pisania tego postu, bo nie do końca wiem jak to wszystko połączyć. Zaznaczę, że do zasilenia będzie ok. 7-8 ledów. Lepiej użyć baterii 1.5V i przetwornicy step-up, czy baterii 9V i podpiąć się po prostu do pinu VIN? Jeśli istnieją inne opcje to proszę dajcie znać. Zależy mi żeby układ był jak najbardziej oszczędny i optymalny żeby nie trzeba było często wymieniać baterii 😄 Pozdrawiam serdecznie.
  5. Witam Serdecznie. Na tym worklog'u będę opisywał moje postępy prac z wykonania oświetlenia do modelu motoru HONDA CBR1100XX SUPER BLACKBIRD. Jest to drugi model, który robię z elementami elektroniki, więc ciągle jeszcze odkrywam podstawy. Dla przypomnienia dodam iż pierwszym modelem z elektroniką było KAWASAKI NINJA H2 CARBON, którego wykonanie opisałem tutaj. Nie przedłużam już więcej i poniżej opisuję część elektroniczną. Na początek postanowiłem wyeliminować pewną wadę poprzedniego projektu, a mianowicie bardzo krótkie działanie oświetlenia na baterii. Baterie, których używałem w KAWASAKI to CR2032, jednak wystarczają one tylko na niecałą dobę działania. Być może coś źle zrobiłem w połączeniach lub doborze elementów, ale tym razem na pewno będzie lepiej. Tak się składa, że w nowym modelu jest podwójne siedzenie, więc postanowiłem zamontować większe baterie 🙂 Trzeba było wyciąć odrobinę części z środka modelu, które i tak nie były by widoczne, ale całość powinna działać dłużej. Wymyśliłem też sobie, że tym razem kierunkowskazy będą mogły migać niezależnie lewy/prawy oraz oczywiście razem jako awaryjne. Do tego jednak musiałem wymyślić jak to zrobić, ponieważ nawet jak zasilałem jedną diodę to prąd mi "przepływał" również do drugiej. Na szczęście doczytałem na kursie forbot'a o diodach krzemowych i wykombinowałem sobie taki prosty układ jak poniżej. Skoro mój pomysł działa to skleiłem cztery diody krzemowe razem oraz zlutowałem tak aby można było wykorzystać gotowy element w modelu. Przy okazji zmierzyłem sobie spadek napięcia na tych moich diodach i wychodzi mi 0,4V, a na kursie było, że powinno być 0,7V. Zastanawiam, się czy te moje diody są jakieś "lepsze", czy też może wartość podana na kursie była taka bardziej przykładowa. Przy okazji lutowania przygotowałem też wstępnie diody na kierunkowskazy i co ciekawe nawet świecą 🙂 Teraz mam w planie dokładne wyliczenie jakich rezystorów potrzebuję. Tym co mi z tych wyliczeń wyszło pochwalę się w następnym wpisie. Na razie to tyle. Dziękuję za uwagę i do zobaczenia.
  6. Jestem laikiem i niestety nie udało mi się znaleźć w internecie odpowiedzi na moje pytanie. Mam 1m taśmy LED czerwonej i 8m taśmy LED białek. Taśmy 10W/m. Chcę to zasilić z jednego zasilacza 100W. 1) Czy 100W wystarczy? 2) Jak podłączyć zasilanie do taśm? Wiem, że nie powinno się łączyć szeregowo różnych kolorów i nie wiem jak to obejść... Nie mogę skopiować linku do allegro więc wrzucam screena zasilacza. Będę wdzięczny za pomoc, Łukasz
  7. Chciałbym zrobić aby dioda LED nie świeciła w 100% a np. w 10% i jednocześnie aby ogniwo 18650 dzięki temu dłużej działało. Co trzeba kupić aby to wykonać? Co do diody to nie znam jej parametrów.
  8. Cześć! Znowu przychodzę z podstawowym pytaniem. Ucząc się elektroniki spotkałem się ze stwierdzeniem, że każdy komponent stawia jakiś opór dla prądu. Idąc tym tokiem rozumowania, dla mnie sama dioda LED też musi stawiać jakiś opór. Nie mogę tego zmierzyć moim multimetrem (dla każdej wartości jaką wybiorę na pokrętle pokazuje mi wynik równy 0). Czy dobrze myślę, że jestem to w stanie obliczyć z prawa Ohma? W TinkerCadzie dodałem baterię 9V i połączyłem ją bezpośrednio z diodą. Program pokazał mi, że natężenie jest zbyt wysokie (wiem i zrobiłem to specjalnie bez żadnego rezystora) i wynosi ono 915 mA. Używając wzoru R=U/I wyszło mi, że rezystancja wynosi około 9,8. Czy jest to dobry tok myślenia? Wiem, że to są kompletne podstawy, ale proszę o podpowiedź.
  9. Przedstawiam mój projekt: osiatkowany regał na kwiaty z programowalnym oświetleniem. Hardware Regał jest osiatkowany właśnie z powodu kotów, bo w środku są rośliny dla nich toksyczne. Osiatkowane są boki oraz przód - drzwi, natomiast tył nie ma siatki, bo regał jest wpasowany idealnie we wnękę okienną. Główna konstrukcja regału jest z desek o przekroju 2x5 cm, półki oraz drzwi z desek o grubości 1cm. Siatka stalowa przybita gwoździami. Drzwi regału po zamknięciu trzymają się na magnesy, można dodatkowo zabezpieczyć przed otwarciem przekręcając kółka wkręcone pomiędzy skrzydła drzwi. Warto to robić, bo kot wspinający się po siatce (a robią to, owszem) mógłby pewnie otworzyć drzwi, nawet niecelowo. Hardware raz jeszcze Każda półka oświetlona jest taśmą LED Philips (2500lm na metr, światło zimne, nie pamiętam dokładnej temperatury, ale generalnie rośliny potrzebują zimnego i mocnego), zamontowaną w aluminiowej rynience zapewniającej odprowadzanie ciepła. Zasilane zasilaczem PHILIPS CertaDrive 100W, i diody zużywają większość z tych 100W. Równolegle z zasilaczem do LEDów włączony jest mały zasilacz 5V dla Raspberry Pi Zero W odpowiedzialnego za sterowanie oświetleniem. Pi steruje oświetleniem przez wygodny w użyciu moduł przekaźników. Akurat miałem dwukanałowy moduł, więc chciałem sterować osobno górną i dolną połową regału, ale okazało się, że brakuje mi pół metra przewodu... więc jest inaczej: jeden kanał to dolna i górna półka razem, drugi to dwie środkowe. Teoretycznie można ustawić na jednych półkach rośliny bardziej światłolubne, a na drugich mniej. Zasilacze oraz Raspberry Pi przymocowane są do nogi regału z tyłu, więc nie widać ich bez specjalnego zaglądania, i dobrze, bo wyglądają nieco bałaganiarsko. Do szyby przyklejony jest czujnik światła skalibrowany tak, że wykrywa tylko bezpośrednie słońce padające na okno. Dodatkowo wyprowadzony jest mały panel sterowania w postaci DIP switcha, którym można wymusić stan włączony albo wyłączony na każdym z kanałów, a także wyłączyć czujnik słońca. Software Raspberry Pi zaprogramowany jest w języku Ruby. Program jest naprawdę prosty, czyta plik konfiguracyjny gdzie zapisane są godziny włączenia i wyłączenia obu kanałów, sprawdza stan panelu sterowania oraz czujnika światła, i steruje odpowiednio oświetleniem. Żeby zmienić godziny pracy oświetlenia trzeba się zalogować przez SSH i zmienić plik konfiguracyjny. Robię to parę razy w roku, żeby uniknąć efektu witryny sklepu ogrodniczego, jak na zdjęciu poniżej, który powstaje gdy oświetlenie jest włączone po zachodzie słońca. Oczywiście mógłbym zamiast tego sprawdzać godzinę zachodu słońca w jakimś serwisie, albo obliczać ją, albo mieć drugi światłomierz do wykrywania zmierzchu, ale aktualne prowizoryczne rozwiązanie działa dobrze już od ponad roku, więc chyba tak już zostanie...
  10. Witam Serdecznie. Na tym worklog'u będę opisywał moje postępy prac z najnowszego pomysłu wykonania oświetlenia do modelu motoru KAWASAKI NINJA H2 CARBON. Pierwszy wpis będzie nieco dłuższy i na początku bardziej modelarski. Proszę jednak o cierpliwość ponieważ koniec końców dotrę również do części elektronicznej. Wszystko zaczęło się od tego iż postanowiłem wykonać taki oto model jak poniżej. Projekt od początku był "czysto modelarski" i nie planowałem dodawać nic z elektroniki, a ponieważ jestem zadowolony z efektów to pochwalę się nieco. Na początek wykonałem silnik. W następnej kolejności była rama. A na dzień dzisiejszy dotarłem do tylnego zawieszenia. Na tym etapie zaczęły się części gdzie występują już światła przednie i tylnie, a w szczególności kierunkowskazy. Tutaj właśnie wpadłem na pomysł aby wzbogacić mój model o elementy świecące. Dokładnie tutaj zaczyna się część o elektronice. Ponieważ jestem "totalnie zielony" z elektroniki to wiedziałem tylko, że potrzebuję diody i to jak najmniejszych aby się do tego modelu zmieściły w odpowiednie miejsca. Poszukałem więc nieco w sieci i kupiłem na początek zwykłe diody białe 3mm oraz żółte SMD 0805. Zabrałem się do łączenia tego w całość no i wyszło na to, iż brakuje mi sporo wiedzy i doświadczenia. Lutowanie takich mikroskopijnych diod okazało się nie lada wyzwaniem, w szczególności jeśli się nigdy nie miało do czynienia z takimi elementami. Coś tam w życiu zlutowałem, ale raczej w skali "makro" a nie takiej "mikro". Koniec końców udało się zlutować (spaliłem tylko 5 diod) i nawet świeci. Nauczony doświadczeniem poszukałem w sieci co mógłbym zrobić lepiej i tak trafiłem na forbot'a i jego kurs lutowania https://forbot.pl/blog/kurs-lutowania-wstep-spis-tresci-id12556. Tutaj należą się pierwsze podziękowania dla autorów. Liczę na to iż po kursie ilość zepsutych diod znacząco się zmniejszy 🙂 Jak mówi stare przysłowie im dalej w las tym więcej drzew, więc na tym etapie pojawiły się dwa problemy. 1. Te kierunkowskazy to powinny jednak migać, a nie cały czas się świecić. 2. Zwykła biała dioda 3mm "kradnie" mi prąd z bateryjek tak iż kierunkowskazy przestają świecić. To raczej nie powinno tak działać, a do tego nie mogę dawać w nieskończoność coraz większych baterii lub osobnych baterii dla różnych diod. Miejsca w modelu na "ukrycie" elektroniki jest bardzo mało, więc muszę to zrobić jak najbardziej oszczędnie, ale tak aby wszystko działało i jeszcze świeciło jak najdłużej. Zacząłem więc szukać w sieci dalej i tak trafiłem ponownie na forbot'a z kursami elektroniki dla początkujących https://forbot.pl/blog/kurs-elektroniki-dla-poczatkujacych-id5151 oraz https://forbot.pl/blog/kurs-elektroniki-ii-spis-tresci-praktyczne-projekty-id10746. Tutaj należą się drugie podziękowania dla autorów. Liczę na to iż po tych kursach będę umiał rozwiązać oba moje aktualne problemy, a pewnie znajdę sobie kolejne zanim ten projekt uda mi się zakończyć. Aktualnie jestem na etapie pierwszych lekcji elektroniki oraz lutowania. Wszystko jeszcze przede mną, ale mam nadzieję na szybkie postępy, którymi pochwalę się na tym worklog'u. Na razie to tyle. Dziękuję za uwagę i do zobaczenia.
  11. Od kiedy tylko ludzie zaczęli interesować się akwarystyką od tego momentu postanowili na każdym kroku ułatwiać sobie pracę. Powstawały coraz to nowsze urządzenia – napowietrzacze, filtry, oświetlenia i tym podobne. Także w tej dziedzinie pojawiły się urządzenia w pełni zautomatyzowane (sterowane za pomocą różnego rodzaju przełączników oraz czujników). Przykładem takiego rozwiązania był chociażby sterownik akwariowy “Skalar”. Jako że powstał on w czasach gdy o diodach mało kto słyszał a sterowanie PWM już chyba nikt postanowiłem stworzyć własny sterownik akwariowy Bella. Jest to kompletny sterownik oparty na Arduino Nano v3. Sterownik akwariowy Bella – lista materiałów do budowy Obudowa uniwersalna Z1W Panel przedni MN-Tech Panel tylny MN-Tech Płytka prototypowa Bella Compact 1.1 moduł pod driver PWM firmy Meanwell (5 kanał) – opcjonalny arduino nano wraz z programem sterownika akwariowego Bella zegar ds1307 wyświetlacz LCD 20×4 znaki na szynie I2C termometr DS18b20 wodoodporny na kablu – 1 szt drivery firmy Meanwell serii LDD (dowolny model) (max 5 szt) przekaźnik 1 kanałowy – 2 szt przekaźnik 4 kanałowy – 1 szt kable połączeniowe FF długości 20cm do podłączenia modułów (30 szt – liczone z zapasem) gniazdo na goldpin 3 pinowe – 8 szt gniazdo na goldpin 4 pinowe – 2 szt (do wyświetlacza) gniazdo na goldpin 5 pinowe – 1 szt (do klawiatury) gniazdo na goldpin 6 pinowe – 2 szt (przekaźnik 4 kanałowy) zworka 2 pinowa (używana w przypadku braku sondy pH) przycisk chwilowy – 4 szt (jako klawiatura) włącznik kołyskowy okrągły – 2 szt gniazdo montażowe płaskie (GS-035) – 6 szt gniazdo zasilające na kabel ósemka – 1 szt gniazdo + wtyk 3 pinowy mini CB (termometr) gniazdo + wtyk 2 pinowy mini CB do podłączenia zasilania driverów 2x gniazdo + 2x wtyk 4 pinowy CB na listwę led (każde na 2 kanały oświetlenia) lub 1 gniazdo CB 8 pinowe na 4 kanały gniazdo montażowe do zasilania arduino 5,5/2,1 gniazdo bezpiecznikowe – 1 szt śruby czarne M3 długość 12mm – około 30szt nakrętki M3 – około 60 sztuk Oświetlenie Najważniejszym założeniem sterownika akwariowego Bella było oczywiście sterowanie oświetleniem. Sterownik obsługuje 5 kanałów PWM. Na samej płytce jest miejsce na zamontowanie 5 driverów z firmy Meanwell (dowolnych od LDD-300L do LDD-1500H). 4 z nich znajdują się na płytce natomiast piąty można zamontować osobno na dodatkowej płytce. Napięcie zasilania driverów jest w zakresie od 12 do 48V. Na płytce zostały wyciągnięte piny pwm oraz masy do podłączenia dodatkowych driverów. Moc każdego kanału można ustawić dowolnie w granicy 0-100% (wartości 0-255 na wyświetlaczu). Wszystkie kanały włączają się jednocześnie i gaszą o tej samej godzinie (wyjątkiem są kanały 1 i 2, które w przypadku ustawienia oświetlenia nocnego gaszą się dopiero o północy. W przypadku kiedy moc któregoś z kanałów jest zmniejszona jego ściemnianie / rozjaśnianie działa tak samo długo lecz jest proporcjonalnie wolniejsze (skoki są mniejsze). Długości i zakresy które można ustawić w tym dziale zostaną opisane w ostatnim akapicie “Zakresy”. Termostat Kolejnym punktem jest zastosowanie wodoodpornego termometru DS18b20 i możliwość podłączenia do niego dwóch niezależnych urządzeń (np grzałki oraz chłodnicy czy też wentylatora). Jak w poprzednim punkcie zakresy zostały opisane na końcu. W przypadku awarii / odpięcia termometru temperatura na wyświetlaczu znika (zostaje zastąpiona przez znaki –. Dodatkowo w ramach zabezpieczenia w takim przypadku gniazda zarówno grzania jak i chłodzenia zostają odłączone od zasilania. W przypadku tej funkcjonalności mamy dostępne 2 zmienne. Pierwsza to temperatura (oznaczająca temperaturę dolną) poniżej której uruchomiona zostanie grzałka. Druga to histereza. Główną wartością jest temperatura – jest to deklarowana wartość dolna poniżej której uruchomiony zostanie przekaźnik odpowiadający za grzałkę. Na wyświetlaczu zmieni się opis z G-OFF na G- ON. Temperatura będzie rosła do momentu przekroczenia 1x histerezy w górę. W przypadku jeśli temperatura przekroczy wartość zadaną + 2x histerezę uruchomi się chłodzenie i będzie działać do momentu w którym włączyło się grzanie (T+H). Stycznik 1 oraz stycznik 2 Stycznik 1 może zostać ustawiony w 2 trybach – pierwszym z nich jest to tryb pracy do sterowania elektrozaworem do CO2 (sterowanie uruchamia się automatycznie po podłączeniu sondy pH). Drugim trybem jest uruchamianie się 1x dziennie na dowolny okres (od 1 minuty do 23 godzin i 59 minut). W przypadku gdy nie ma podpiętej sondy pH do sterownika należy zrobić mostek pomiędzy pinem A7 a pinem GND – program automatycznie zmienia działanie stycznika na tryb pracy 1x dziennie. Stycznik 2 działa tylko jako uruchamiany 1x dziennie (jak wyżej). Stycznik 3 oraz stycznik 4 Działają one automatycznie w zależności od pór dnia. Stycznik numer 3 uruchamia się w momencie rozpoczęcia świtu i wyłącza w momencie gdy kończy się zmrok. Stycznik numer 4 uruchamia się tylko w czasie trwania dnia. Sonda pH Program obsługuje sondy pH opisane w tym artykule. Podpinana jest ona do pinu A7. Za jej pomocą sterowany jest stycznik numer 1 do którego można podpiąć jak pisałem powyżej elektrozawór dozujący CO2. W momencie w którym nie mamy podpiętej sondy pH należy zewrzeć piny A7 oraz GND. Dzięki temu stycznik nr 1 przełącza się na działanie 1x dziennie. Wartości które możemy zmieniać to dolna granica pH oraz histereza. Po przekroczeniu górnej granicy uruchomiony zostaje stycznik (do którego można podłączyć elektrozawór dozujący CO2) i działa on do momentu obniżenia pH poniżej zadanej wartości. Oświetlenie awaryjne Pin analogowy A6 został przygotowany jako uruchamianie oświetlenia awaryjnego. W przypadku gdy pin zwarty jest do masy (za pomocą rezystora 10kOhm program działa w normalnym trybie. Gdy włącznik zostanie uruchomiony i zwarty do pinu 5V oświetlenie zacznie świecić na około 50% mocy (na tyle mocno żeby było widać lecz aby nie oślepiać). W tryb pracy awaryjnej zostaną uruchomione kanały 1 oraz 2. Do uruchomienia oświetlenia awaryjnego służy przycisk na boku obudowy (z przodu) po stronie wyświetlacza. Wyłącznik oświetlenia Istnieje także możliwość wyłączenia całkowicie napięcia podawanego na diody. Do tego celu służy przełącznik znajdujący się z boku obudowy (od strony wyświetlacza z tyłu). Dzięki temu możemy w sytuacji w której jest potrzeba odpięcia oświetlenia od sterownika odłączyć całkowicie zasilanie driverów. Wyświetlacz LCD Sterownik akwariowy Bella oferuje dwa tryby działania. Pierwszym z nich jest tryb wyświetlania informacji znajdujących się na sterowniku. Poniżej znajduje się właśnie taki układ. Na żółto zostały oznaczone pola odpowiednio od góry: Grzałka, Wentylator, Stycznik 1 (jeśli używamy sondy pH zmienia się jego nazwa z S na C – można podpiąć do niego elektrozawór CO2) oraz Stycznik S2. Styczniki S3 oraz S4 (ich godziny działania) wyświetlane są w menu rotacyjnym na dole ekranu. Kolejnym trybem w jakim pracuje ten sterownik akwariowy jest tryb menu. Aby go uruchomić należy jednocześnie przytrzymać przyciski + oraz – (góra i dół). W tym momencie układ wyświetlacza zmieni się całkowicie na prezentowany poniżej: Funkcje menu (nazwa, dostępne wartości oraz ich skoki) W trybie ustawień zmieniają się dwa dolne wiersze na wyświetlaczu. Na górnym jest informacja o aktualnie zmienianej funkcji oraz jej wartości. W dolnym rzędzie pokazany jest dostępny zakres w jakim może być on zmieniany. Dokładna struktura menu zakresy oraz skoki są dostępne w tabeli poniżej. Po uzyskaniu maksymalnej wartości (dla przykładu PWM1 – 255) jeśli nadal będzie włączony przycisk + wartości będą liczone dalej od najniższej. Podobnie dzieje się w przypadku uzyskania najniższej wartości i trzymania przycisku -. W tym przypadku wartość zmieni się na największą. Więcej informacji znajdziecie w filmie:
  12. Cześć, Jestem świeżo po zrobieniu kursów podstaw elektroniki + arduino i chciałbym zrobić swój pierwszy (dość prosty) projekt. W związku z tym chciałbym prosić o weryfikację poniżej opisanych założeń i pomysłów. Cel projektu: sterowanie podświetlaniem schodów paskami LED z możliwością płynnego ściemniania, gdzie każdy stopień jest sterowany niezależnie. Z częścią softwarową nie powinienem mieć problemu, więc zależy mi głównie na weryfikacji części hardwarowej. Sterownik (oparty na Arduino Uno rev3) ma się komunikować z domowym serwerem Home Assistant za pośrednictwem MQTT, skąd otrzyma informacje o wykrytym ruchu na górze lub na dole schodów (jeśli kogoś to interesuje, to czujki ruchu bezprzewodowe po zigbee, wykorzystane w Home Assistant też w innych celach). Do sterowania jest 17 niezależnych pasków LED, każdy o długości 1m. Parametry paska to 12V DC, 4,8W/m. Paski są już zamontowane i wpięte (oczywiście równolegle) do zasilacza 12V/120W. W tej chwili posiadam tylko zestawy do kursów, więc z tego co się nauczyłem 😉 i sam znalazłem muszę dokupić: Shield Ethernet (lub WiFi - jeszcze się waham, czy ciągnąć kabel) Shield dodający co najmniej 11 wyjść ze sprzętowym PWM, np. taki + zestaw złączy żeńskich (żeby łatwo wpiąć się do wyjść PWM z bazowego Arduino) Moduł z tranzystorem MOSFET i gotowymi złączami śrubowymi - 17 sztuk Trochę przewodów męsko-żeńskich Do tej pory poza wspomnianymi kursami przetestowałem na płytce stykowej (taki PoC), że jestem w stanie sterować ściemnieniem jednego odcinka paska za pomocą tranzystora MOSFET BS170 (dołączonego do zestawu szkoleniowego), jednak ten mały tranzystor szybko się mocno nagrzał. Daje mi to jednak nadzieję, że jestem w stanie to zrobić 🙂 Poza tym planuję zabrać się teraz za kurs lutowania, bo będzie mi to potrzebne do zlutowania shielda z punku 2. (i tak chciałem się tego nauczyć 😉) Pytania jakie mam na początek: Czy tak opisany zestaw będzie optymalny pod względem kosztów/jakości? W założeniach sterownik ma chodzić 24h/dobę (chociaż przez większość czasu oświetlenie będzie po prostu wyłączone). Czy mogę zasilać arduino z tego samego zasilacza co LEDy (12V)? Czy lepiej kupić osobny mniejszy zasilacz impulsowy (np. taki). W czym zamknąć cały sterownik? Są gotowe obudowy/puszki na takie zestawy? Całość nie musi być ani ładna, ani mała (będzie ukryta w szafie). Z góry dzięki za pomoc!
  13. No więc tak, posiadam ledy WS2812B i mam w arduino uno napisany program. Chciałbym sterować programami z poziomu telefonu z każdego punktu w domu. I tu się zaczyna problem, szukałem podobnych postów na tym forum, ale albo nie rozumiałem czegoś, albo nie dotyczyły tego o co mi chodzi. No chyba że jakieś ominąłem. Nie chciałbym, aby ten moduł tworzył osobną sieć, tylko aby połączył się z już istniejącą siecią wifi. Z góry dzięki
  14. Witam! Z racji tego że są Święta postanowiłem stworzyć elektroniczną choinkę. Nie jest to projekt lecz ozdoba która jak dla mnie wyszła bardzo fajnie. Zacząłem od zaprojektowania układu w programie EasyEDA, następnie w polu do tworzenie ścieżek narysowałem kształt choinki i według tego obramowania rozmieszczałem elementy. Następnie płytkę wyeksportowałem do pliku "gerber" i wrzuciłem do programu FlatCAM który przekonwertował ścieżki, otwory oraz obramowanie na ruchy frezarki CNC. Niestety nie mam filmiku z procesu obróbki płytki PCB. Tak wygląda gotowa płytka do sprawdzenia i przylutowania układów. Gdy sprawdziłem wszystkie ścieżki czy nie ma gdzieś jakiegoś zwarcia przystąpiłem do lutowania elementów. I sprawdzenia działania. Na samym końcu wydrukowałem podstawkę do choinki. Tutaj filmik z działania ozdoby. Na odwrocie płytki umieściłem potencjometr którym można zmieniać czas przełączania diod LED.
  15. Cóż - nie zawsze człowiek zajmuje się tym co chce i na czym się zna 😞 Dostałem "zlecenie" (od żony, czyli na wczoraj i bezpłatne) na reflektorek do teatru cieni do prowadzenia zajęć z dziećmi. Teoretycznie sprawa jest prosta: żadnej optyki (źródło światła musi być jak najmniejsze, praktycznie punktowe), zwykła dioda 3W, maskownica... aż się prosi wziąć po prostu jakąś chińską latarkę, wyjąć soczewkę i hajda! Sprawdzone, efekt dokładnie taki jak trzeba, z jednym wyjątkiem: to coś musi zmieniać kolor. I teraz czy dobrze myślę: jakaś dioda RGB czy RGBW (w TME widziałem takie po paręnaście zeta), jakiś radiatorek, maskownica, sterowanie PWM, jakiś MOSFET... No i tu jest problem. Urządzenie bezwzględnie musi być zasilane z akumulatora (myślę o jednym czy dwóch 18650) z możliwością podłączenia zewnętrznego zasilacza - czyli ukochane gotowce odpadają (wszystko co widziałem zasilane jest z 230V). Całe sterowanie z pilotem, guziczkami, gałeczkami i podobnymi bajerami to kwestia wygrzebania jakiegoś dyżurnego Pro Mini i podpięcie małego pilocika radiowego - czyli zajęcie na jeden zimowy dzień z przerwą na kawę. Arduino dałoby śliczny sygnał PWM... fajnie, tyle że w tym miejscu moja wiedza się kończy: mianowicie nie mam zielonego pojęcia, co ma być między Arduino i akumulatorem a diodą 😞 Rozwiązanie typu "rezystor w szereg z diodą" to takie straszliwie toporne, poza tym ten rezystor bardzo ładnie ogrzewałby całe pomieszczenie, a akumulatorki mają ograniczoną pojemność i trochę szkoda prądu. Szukałem trochę w sieci, ale nic konkretnego nie znalazłem. Ktoś coś pomoże? Wystarczy nakierowanie na coś podobnego (najchętniej w wersji dla leniwca, czyli gotowy moduł)... Aha, nie chciałbym stosować jakichś specjalistycznych scalaków za pół wypłaty (chociaż jeśli są jakieś niedrogie to czemu nie)...
  16. Pomysł zrodził się kilka miesięcy temu, gdy zbliżały się święta i trzeba było zastanowić się nad prezentami. Jako, że dziewczyny lubią malować paznokcie to postanowiłem obdarować moją dziewczynę lampą do paznokci. Ale jaki byłby ze mnie majsterkowicz, gdybym kupił gotową w sklepie? Przygotowanie Zabrałem się do pracy. Na początku zrobiłem research o lampach. Trzeba było odpowiedzieć sobie na kilka pytań: Jakie światło jest najlepsze do utwardzania lakieru? Jaka średnio moc maja podobne lampy? Jakie posiadają cechy charakterystyczne, funkcjonalności? Dowiedziałem się, ze moc 30-48W oraz światło UV* są najlepsze do utwardzania lakieru. Większość lamp posiada wyświetlacz, kilka przycisków oraz czujnik i odbiornik podczerwieni do wykrywania, czy ktoś włożył dłoń. Co do typu światła w lamie są podzielone opinie. Ogólnie rzecz biorąc na rynku można znaleźć 3 rodzaje lamp: ze świtałem UV, białym zimnym oraz hybrydy, czyli połączenie tych obu. Teraz pytanie który rodzaj jest najlepszy? Niestety nie da się tak prosto na to odpowiedzieć. Nie jestem ekspertem w tej dziedzinie, ale z tego co przeczytałem to UV (mówię tutaj o typie A [315–400 nm], czyli tym jeszcze widzialnym, które użyłem w moim projekcie i te które stosuje się na ogól w lampach UV) ogólnie utwardzi każdy lakier, ale zajmuje to trochę czasu. Natomiast LED o barwie "biały zimny" nie utwardzi już każdego lakieru tylko te przeznaczone do tego typu lamp. Ma też swoje plusy. Utwardzanie lakieru trwa szybciej oraz nie oślepia tak mocno jak UV. Co do szkodliwości nie będę tutaj nic pisał, bo nigdzie nie znalazłem jednoznacznej, fachowej opinii.. Poza wyglądem lampy już nic nadzwyczajnego nie mają. Można zadbać np.: o to, aby światło wewnątrz się dobrze rozpraszało. Naszkicowałem schemat blokowy lampy, wypisałem wymagania i wszystkie pomysły. Lista potrzebnych elementów, wraz z cenami: [25zł] zasilacz 12V o wydajności, co najmniej 1A [15zł] LED UV lub białe zimne [16zł] części elektroniczne: płyta główna, moduł wyświetlacza [15zł] wydruk 3D kilka śrubek (dokładne wymiary w sekcji o składaniu lampy) [2zł] przełącznik i złącze DC [7zł] 9 szt. radiatorów do LED Praca Zacząłem oczywiście od wykonania prototypu. Wykorzystałem MSB dla Atmega16 oraz mój moduł wyświetlacza siedmio-segmentowego, resztę elementów umieściłem na płytce stykowej. Elektronika Sercem układu jest Atmega16 i wybrałem ją nie przypadkowo. Potrzebowałem mikrokontroler z dużą ilością wyjść, aby móc podłączyć wyświetlacz LED oraz przyciski. Dało się oczywiście wykonać to na mikrokontrolerze o mniejszej liczbie wyprowadzeń. Przyciski można podłączyć pod jeden pin ADC, a wyświetlacz LED siedmioprocentowy przez konwerter na magistrale I2C, ale dysponowałem już gotowymi rozwiązaniami, które przekonały mnie do takiego rozwiązania. Nie wykorzystuje tutaj biblioteki Arduino z tego samego powodu co wyżej. Układ jest zasilany 12V, niestety zasilacz się nie zmieścił już w środku wiec trzeba doprowadzić zasilanie zewnętrznie. Wydajność zasilacza powinna wynosić, co najmniej 1A, gdyż same LED używają prawie tyle. Postanowiłem podzielić elektronikę na dwie części: płytę główną oraz części odpowiedzialna za interakcje z użytkownikiem, czyli wyświetlacz oraz przyciski. Postąpiłem tak z dwóch powodów. Pierwszy to zasada dziel i zwyciężaj, dzięki której oddzielając wyświetlacz oraz przyciski, płyta główna stała się mniej skomplikowała, co oznacza, że występuje mniejsze prawdopodobieństwo fakapu. Drugą przyczyną był problem ze zamieszczeniem całego układu w jednym miejscu w obudowie. Moduł wyświetlacza W tym module znajdują się jedynie przyciski, wyświetlacz siedmio-segmentowy LED oraz kilka rezystorów i gniazd połączeniowych. Zadaniem tego układu jest wyświetlanie czasu oraz informowanie mikrokontrolera o wciśniętym przycisku. Moduł jest na tyle prosty, że nie będę tutaj się rozpisywał. Dodam tylko tyle, że w przyszłości planuję przenieść całą część odpowiedzialną za sterowanie wyświetlaczem właśnie w to miejsce, więc wtedy będzie można napisać coś więcej. Schemat plytki PCB: Tak się prezentuje gotowy moduł: Płyta główna Jak już wspominałem, sercem układu jest Atmega16 i znajduję się ona na płycie głównej razem z elementami potrzebnymi do jej funkcjonowania. Umieściłem tutaj również stabilizator, który redukuje napięcie z 12V do 5V. Wszytko, co jest z niego zasilane nie zużywa na tyle dużo prądu, aby potrzeba było użycia radiatora. Dla pewności można LM7805 zastąpić jakimś innym, bardziej wydajnym układem np.: przetwornicą impulsową LM2576, która ma znacznie większy współczynnik sprawności. Umieściłem tutaj część układu sterującego wyświetlaczem siedmiosegmentowy, czyli ULN2803 wraz z rezystorami i trzema tranzystorami bipolarnymi (dokładny opis rozwiązania jest tutaj), ponieważ nie zmieścił się on na drugiej płytce. Sterowanie LED odbywa się poprzez tranzystor MOSFET. Początkowo chciałem każdy segment diod (3 LED połączone szeregowo) sterować osobnym tranzystorem, aby uniknąć przegrzania się pojedynczego, ale w trakcie realizacji projektu stwierdziłem, że nie ma to sensu. Zajmowało tylko wolne porty w mikrokontrolerze oraz komplikowało logikę sterowania (w oprogramowaniu), a MOSFET'y prawie w ogóle się nie grzały. Projekt 3D Od samego początku istotnym elementem tego projektu był projekt obudowy w 3D. O ile część elektroniczna i research był proste to tutaj poziom się komplikował. Zdecydowanie jest to jeden z najbardziej zaawansowanych modeli 3D, jaki tworzyłem, wiec nie jest pozbawiony kilku wad, ale za to jest sukcesywnie i powoli modernizowany, co widać po rosnącej w górę wersji projektu. Na początku lampa miała mieć kształt ćwiartki kuli z wydłużonym tyłem, ale okazało się to dość niepraktyczne i zbyt skomplikowane, wiec szybko zmieniłem koncepcje. Ostateczny kształt, jaki wybrałem to prostokąt z zaokrąglonymi krawędziami. Przed rozpoczęciem projektowania trzeba ustalić wymiary lampy wewnątrz oraz na zewnątrz. W środku musi mieścić się ręka, a zarazem lampa nie może być za duża, aby była poręczna. Pomiarami wzorowałem się głównie na gotowych rozwiązaniach,, z tym że naniosłem swoje poprawki, co do grubości ścianek oraz tyłu, niestety kosztem rozmiarów powierzchni w środku. Musiałem gdzieś zmieścić układ elektroniczny oraz LED'y, a, że całość się grzeje to również potrzebna jest przestrzeń, aby ciepło mogło być odprowadzane. Kolejnym etapem, było podzielenie całości na dwie części, aby był łatwy dostęp do "wnętrzności" lampy. W rozsądny sposób trzeba było poprowadzić linię cięcia dbając o to, aby dało się to wydrukować (czyli jak najmniej poziomych krawędzi) oraz potem łatwo zmontować w jedno. Trzeba jeszcze wykombinować, w jaki sposób łączyć te dwa elementy razem?. W głowie miałem dwa rozwiązania, śrubki albo zatrzaski. Wybrałem to pierwsze, gdyż projektowanie zatrzasków może być zbyt skomplikowane. W kilku miejscach umieściłem elementy, w które wkręca się śrubę/wkręt oraz dziury na dole. Jest jeszcze jedno miejsce, w którym te dwa elementy się łączą, ale rozwinę to w cześć montażu modułu wyświetlacza. Teraz pozostało już porozkładać elementy wewnątrz takie jak: LED'y, płyta główna, czujnik ruchu, moduł wyświetlacza z przyciskami, złącze zasilania oraz switch do włączania i wyłączania lampy. Płyta główna została umieszczona na ściance tylnej i przykręcona na dystansach do niej. Naprzeciwko niej znajduję się switch oraz gniazdo zasilania 12V. LED'y znajdują się oczywiście u góry lampy, ale ich rozstaw nie jest przypadkowy. Raz, że są rozłożone symetrycznie to dwa musiały zostać umieszczone w odpowiednich pozycjach, aby starczyło miejsca na moduł wyświetlacza. Jedno nie mogło być nad drugim, gdyż po przyklejeniu radiatorów na LED'y nie było już wystarczająco miejsca na umieszczenie nad nimi niczego. Na końcu została jak się okazało najtrudniejsza część, czyli montaż modułu wyświetlacza z przyciskami. Trzeba było poczekać, aż zostanie on zlutowany, aby można było dokonać dokładnych pomiarów, gdyż te teoretyczne miały za duży błąd. Poza rozmieszczeniem dziur na przyciski musiałem w odpowiednim miejscu i dokładnym wymiarze (z bardzo małym marginesem błędu) umieścić otwór na wyświetlacz. Dlaczego był potrzebny tak mały margines błędu? Ponieważ, jeśli wyświetlacz by był przesunięty o milimetr albo mniej w którąś stronę, to nie pokrywałyby się otwory na przyciski i nie dałoby się ich wciskać. Odstęp płytki od górnej części, również musiał być dokładnie obliczony, żeby przyciski nie wystawały zbyt dużo, ale zarazem nie chowały się w obudowie i wyświetlacz mieścił się idealnie w otworze nie wychodząc poza płaszczyznę zewnętrzną. W tym momencie wpadłem na pomysł, że można umieścić tutaj, dodatkowe mocowanie całości. Stworzyło to drobne problemy, ale koniec końców udało się to wykonać i całość trzyma się solidnie. Projekt obudowy można zobaczyć tutaj, a pliki stl dostępne są w repozytorium projektu. Poniżej zdjęcia wydruku: Kolor wydruku wewnętrznej części nie jest przypadkowy. Wybrałem biały, aby światło w środku dobrze się rozpraszało. Niestety efekt był na tyle dobry, że aż oślepiało, więc musiałem na samym spodzie przykleić czarną podkładkę. Mimo tego myślę, że warto zostać przy tym kolorze, ponieważ jeśli zmienimy rodzaj świtała z LED UV na zwykłe LED to może się okazać, że dzięki kolorowi białemu zredukujemy moc lampy, a co za tym idzie diody będą się mniej nagrzewać i zwiększą swoją żywotność. Montaż całości Krok po kroku jak całość zmontować + zdjęcia które zrobiłem. Zacznijmy od przygotowania potrzebnych narzędzi do montażu: Klej na gorąco - do montażu LED Klej termoprzewodzący - do montażu radiatorów dla LED 8 szt. małych śrub lub wkrętów 4 sztuki M3 o długości 12mm Wiertło 3.5mm do powiększenia dziur na płytce Jeśli już wszystko skompletowaliśmy to możemy zabrać się do składania. Zaczynamy od przymierzenia i wkręcenia układu z wyświetlaczem. Musimy ustawić go na miejscu, aby otwory się pokrywały. Składamy dwie części obudowy razem i wkręcamy śrubki M3. Ma to na celu wyrobienie otworów, aby montaż całości z zamontowanymi LED'ami i resztą podzespołów przebiegł bez problemu. Możemy również otwory nagwintować gwintownikiem M3. Po tym kroku przechodzimy do właściwego montażu. Pierwsze co robimy to lutujemy przewody do LED'ów i łączymy trzymając się mniej więcej tego schematu: Na końcu powinno prezentować się to mniej więcej tak: Teraz musimy przykleić radiatory do tylnych części LED'ów. Najpierw oczyszczamy całą powierzchnię z zanieczyszczeń. Możemy to zrobić zmywaczem do paznokci lub jakimś alkoholem (najlepiej izopropanolem). Sam przeszlifowałem jeszcze całość papierem ściernym gradacji od 1000 do 1500, ponieważ na moich radiatorach były małe ryski. !UWAGA! radiatory naklejamy na wszystkie diody, prócz nr 3, gdyż w tej wersji lampy zachodzi na nią moduł wyświetlacza. Kolejnym etapem, będzie przytwierdzenie do zewnętrznej obudowy przełącznika oraz gniazda zasilania. O ile switch trzyma się bez problemu, bo jest na zatrzaski, to ze złączem zasilania będzie więcej problemu. Sam użyłem techniki spawania plastiku do przymocowania go, ale można równie dobrze użyć mocnego kleju. Nastała chwila na podłączenie elektroniki. Zaczynamy od płyty głównej. Przymocowujemy ją do specjalnie dla niej zaprojektowanego elementu 3D i potem razem z tym wydrukiem na tył wewnętrznej części obudowy. Jeśli całość się dobrze trzyma to możemy wziąć się za podłączenie przewodów oraz moduł z wyświetlaczem. Całość powinna prezentować się jak na zdjęciach poniżej: W tym momencie proponuje wykonać test, czy wszystko działa poprawnie i lampa świeci. Jeśli wszystko pracuje jak trzeba to można zabrać się za skręcanie dwóch części razem. W tej wersji lampy nie jest to najprostsze, ponieważ trzeba dobrze wpasować moduł wyświetlacza z otworami do wkręcenia śruby, ale da się z tym uporać. Najważniejsze, aby złapać jeden otwór, wtedy już pójdzie z górki 😄 A teraz czas na efekt końcowy: Podsumowanie Całkowity kosz lampy wyniósł 80 zł. Wszystkie ceny są podane w nawiasach na liście zakupów u góry wpisu. Może nie jest to tanio, szczególnie że za niecałe dwa razy więcej dostaniemy taką lampę w sklepie, ale myślę, że jakość projektu i zabawa przy jego tworzeniu rekompensuje koszt lampy. Projekt uważam za udany, gdyż przeszedł kilka testów praktycznych i sprawuje się bardzo dobrze. LED'y nie nagrzewają się aż tak bardzo, aby nie można było ich dotknąć. Jedynym minusem jest oślepiające światło UV. Zdecydowanie następnym razem jak będę robił/ulepszał lampę zastosuje tutaj LED'y o kolorze biały-zimny. Pytania do wyjaśnienia: Jaka długość fali jest najlepsza do utwardzania lakierów hybrydowych? Jakie są różnice pomiędzy LED UV a LED białe zimne na tle utwardzania lakieru? (odpowiedź u góry wpisu) Plany na przyszłość: Przerobienie sterowania wyświetlaczem siedmio-segmentowym na I2C oraz redukcja ilości przewodów łączących oba moduły. Wiąże się z tym również przeniesienie elementów sterowania wyświetlaczem z płyty głównej na moduł. Zamienić fotokomórkę na odbiornik i nadajnik podczerwieni. Zastosować inserty gwintowane do montażu wyświetlacza Ulepszyć projekt wydruku 3D o wzmocnienia obudowy, ponieważ w niektórych miejscach się wgniata, gdyż nie ma podparcia Linki i źródła: https://www.24sklep.pl/content/29-led-uv-i-utwardzanie-zywic-klejow-farb-lakierow-uv https://www.yahoo.com/lifestyle/the-gel-manicure-low-down-uv-vs-led-106537862903.html https://practicalpolish.com/ledvsuvlampfornails
  17. Cześć, W zasadzie nie wiem czy napisać tutaj w zupełnie zielonych, czy w sprawdzaniu schematów, ale z racji, że to mój pierwszy projekt wykraczający poza zadania z podstawowego kursu elektroniki który chciałbym okraszyć sporą dawką pytań umieszczam go w tym miejscu. Jeżeli ktoś uważa że jest w złym to prośba o informację – usunę i utworzę w prawidłowym. Schemat: Tak więc mam plan zasilenia kilku diod dużej mocy (350mA) połączonych szeregowo i równolegle, tak aby móc wyłączać i przełączać poszczególne segmenty oraz sterować ich jasnością poprzez potencjometry. Przykład planowanej LED: Zakładając, że przy zasilaniu 12V na potencjometrach wpiętych bezpośrednio przed diodami może odkładać się duża moc, a te znoszące większą ilość watów są sporo droższe, postanowiłem użyć tranzystorów bipolarnych npn (hFE=100-250) i sterować prądem bazy. Aby zmniejszyć odrobinę zakres potencjometru, zdecydowałem się użyć stabilizatora napięcia 5V, którym po zastosowaniu oporników będzie zasilana baza (zakres 7mA-0.9mA). I tu pojawiają się pytania: Czy moje rozumowanie jest sensowne i zastosowanie tutaj stabilizatora jest poprawne? Ponadto tym samym stabilizatorem chcę zasilać dwa wentylatory – oba pobierają około 140mA. Jak to jest z tymi zasilaczami? Z tego co widzę są w sprzedaży specjalne do LEDów, ale czy taki jak w tym linku nie wystarczy? Jak właściwie przymocować podstawkę LED do radiatora? Można to zrobić na cynę czy dla lepszego transportu ciepła użyć jakieś pasty? Czy znacie dystrybutorów LEDów które byłyby podobnej mocy i montażu jak ta na screenie, a jednocześnie miały bardzo wąski zakres widma i dostępną pełna specyfikacje z wykresem długości fali oraz zachowaniem (czyt: spadek napięcia względem podanego natężenia)? Mi udało się znaleźć tylko dla wybranych kolorów (np. brak 420-430nm) albo dla SMD których dokumentacja montażu mnie przerasta. Dzięki.
  18. Ten projekt powstał już jakiś czas temu, gdzieś w połowie marca . Jednak ostatnio go nieco ulepszyłem i poprawiłem. Dlatego przyszedłem się pochwalić . Pierwsza wersja była zrobiona na Arduino Nano i mogłem sterować jednym paskiem led 12V za pomocą pilota na podczerwień i przekaźnika (tylko stan wysoki, stan niski) . Całość była zasilana z akumulatora 12V 7,2AH co było złym rozwiązaniem bo starczał tylko na tydzień. Nie zadowalał mnie taki sterownik, więc gdy tylko podszkoliłem się w wiedzy o tranzystorach powstała druga wersja w której mogłem już sterować PWM (a właściwie to dolutowałem tylko tranzystor i lekko przerobiłem program). Tamta wersja była nawet dobra ale jednak wykorzystywanie całego Arduino na taki projekt jest trochę bez sensu, no i jeszcze ten nieszczęsny akumulator... Zachowało się nawet jedno zdjęcie z tamtego czasu: Ale w tym artykule skupię się na 3 i prawdopodobnie nie ostatniej wersji tego sterownika. Płytka prezentuje się następująco: W tej wersji mamy do dyspozycji 2 kanały PWM na 12V każdy + przekaźnik (stan wysoki / stan niski) ale za to może włączać/wyłączać urządzenia zasilane napięciem do 250VAC czyli np. lampka biurkowa. Elementy na płytce co robią, po co są: Mikrokontroler ATmega328P - jest "mózgiem" całego sterownika, odbiera dane z odbiornika IR, steruje tranzystorami i przekaźnikiem. Zaprogramowałem Arduino Uno i najprościej w świecie wyjąłem ATmegę i wsadziłem na płytkę. Stabilizator LM317T - razem z rezystorami i kondensatorami (prawy górny róg płytki) tworzy obwód zasilający mikrokontroler napięciem 5.2V - akurat tak wyszło z dostępnych mi rezystorów. Tranzystory IRF540N - podnoszą napięcie z 5V do 12V i przy okazji przepuszczają sygnał PWM . kondensatory (obok tranzystorów) - filtrują napięcie z tranzystorów. Czyli co, to już nie jest PWM ? No nie, to już nie jest PWM. Ale mi w tym projekcie nie chodzi konkretnie o PWM, a o możliwość regulacji jasności ledów więc PWM może być "stłumiony" przez kondensatory. Dodałem je, ponieważ bez nich w poprzedniej wersji ledy lubiły sobie czasem mrugać, lekko przygasać .Było to trochę irytujące. przekaźnik - służy do zamykania obwodu np. gdy podepnę lampkę biurkową 230VAC to jego zadaniem jest tylko domknąć obwód gdy nacisnę przycisk na pilocie. odbiornik podczerwieni TSOP2236 - nie ma go już na płytce, ale są dla niego przygotowane goldpiny w prawym dolnym rogu . Służy on jak sama nazwa mówi do odbierania promieni podczerwonych, które wysyłam ze zwykłego pilota od telewizora po naciśnięciu jakiegoś przycisku. Zasilanie: Pewnej słonecznej niedzieli wybrałem się na targ, tam znalazłem zasilacz który idealnie pasuje do mojego projektu. Vout - 12VDC, 3.3A . Pochwalę się że udało mi się utargować całe 5 zł 😎. Możliwości sterownika : 3 kanały w tym 2 z możliwością regulacji jasności na 12VDC i jeden do 250VAC ale z zewnętrznego zasilania i brakiem możliwości regulowania jasności. jest jeszcze miejsce na płytce żeby dolutować kolejny kanał ale i tak by mi się nie przydał. Teoretycznie maksymalna moc na jeden kanał to około 500W, ale w praktyce nigdy nie kupie takiego potężnego zasilacza więc aktualnie maksymalna moc na kanał to około 36W - jeśli używam jednego na raz i 18W - jeśli używam 2 kanały na raz, ale można też z jednego kanału pobierać np. 30W a z drugiego 6 itp. . Na razie podpiąłem tylko 2-metrowy pasek led który pobiera 28.8W na maksymalnej jasności. Podsumowując, maksymalna moc zależy głównie od zasilacza. Jako obudowa służy mi kartonowe pudełko: Co poprawię i co chciałbym poprawić w kolejnej wersji? Na pewno znajdę jakiś inny sposób aby doprowadzić zasilanie do mikrokontrolera. Ten stabilizator trochę się grzeje, a nawet trochę za bardzo. Co za tym idzie? Głównie chodzi mi o straty energii. Może uda mi się skonstruować jakąś przetwornicę. Jeśli chodzi o grzejące się elementy to jest jeszcze jedna rzecz - mikrokontroler który się lekko grzeje. Nie jakoś bardzo, tylko robi się lekko ciepły. Wie ktoś może jaka jest tego przyczyna? Chodzi tu o podwyższone napięcie ?(5.20V) Czy może jest to normalne? Jeśli ktoś wie to prosiłbym o odpowiedź. Co chciałbym poprawić? Z okazji że jest to do tej pory jeden z najpraktyczniejszych i najprzydatniejszych moich projektów, chciałbym poprawić obudowę, która jak w każdym moim projekcie jest z kartonu . Są dwa problemy - nie mam w ogóle pomysłu ani materiałów i żadnego sprzętu. Na koniec pozdrawiam czytelników i życzę miłego dnia 🙂.
  19. Witam aktualnie razem z synem pracujemy nad lampką DIV (Led Cubes 4x4x4) Docelowo lampka ma mieć możliwość ustalenia do 10 różnych trybów wyświetlania, dodatkowo planujemy aby tryb wyświetlania był możliwy do zaprogramowania przez terminal Bluetooth z odpowiednią komendą (np. "set 1 0x0000x0660x0660x0000\n0x9009x0000x0000x9009\n") W tym celu przygotowałem stronę z wykorzystaniem obiektów Canvas JS, co pozwala na przygotowanie programu dla animacji (po klatkowej Cubs) i zabawę z lampką uprzyjemni. W załączniku ‘led_prog.zip’ kod strony do pobrania dla chętnych. Podczas projektu pojawił się problem z wyświetlaniem warstw diodów led, ze względu że diody w warstwie są podłączone do jednej masy, oczywiste jest że będzie problem z wyświetlaniem na różnych warstwach z różnym stanie Led np. W1 pali się W2 nie pali się. Problem rozwiązany został programowo , kolejne warstwy Led są wyświetlane w odstępie 2 milisekund dzięki czemu otrzymujemy złudzenie że cała kostka Led (klatka Led) jest aktywna w tym samym czasie. Dla rozjaśnienia poniżej kod programu. void loop() { aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; for (int i = 0; i < 4; i++) { DrawLayer(i); } if (roznicaCzasu >= AnimationRefresh) { zapamietanyCzas = aktualnyCzas; if (AnimationIndex<IndexK[AnimationSelect]) AnimationIndex++; else AnimationIndex=0; } } //rysujemy animacje dla odpowiedniej warstwy (i numer warstwy) void DrawLayer(int i) { unsigned int animation=ReadData(AnimationSelect,i); digitalWrite( LAYER_1, 0 ); digitalWrite( LAYER_2, 0 ); digitalWrite( LAYER_3, 0 ); digitalWrite( LAYER_4, 0 ); byte rows =ReadRows(animation,1); digitalWrite( LED_1, ReadLed(rows,1)); digitalWrite( LED_2, ReadLed(rows,2)); digitalWrite( LED_3, ReadLed(rows,3)); digitalWrite( LED_4, ReadLed(rows,4)); rows =ReadRows(animation,2); digitalWrite( LED_5, ReadLed(rows,1)); digitalWrite( LED_6, ReadLed(rows,2)); digitalWrite( LED_7, ReadLed(rows,3)); digitalWrite( LED_8, ReadLed(rows,4)); rows =ReadRows(animation,3); digitalWrite( LED_9, ReadLed(rows,1)); digitalWrite( LED_10, ReadLed(rows,2)); digitalWrite( LED_11, ReadLed(rows,3)); digitalWrite( LED_12, ReadLed(rows,4)); rows =ReadRows(animation,4); digitalWrite( LED_13, ReadLed(rows,1)); digitalWrite( LED_14, ReadLed(rows,2)); digitalWrite( LED_15, ReadLed(rows,3)); digitalWrite( LED_16, ReadLed(rows,4)); if (i==0) digitalWrite( LAYER_1, 255); else if (i==1) digitalWrite( LAYER_2, 255); else if (i==2) digitalWrite( LAYER_3, 255); else if (i==3) digitalWrite( LAYER_4, 255); delay(2); //wymagany w celu przedłurzenia czasu wyswietlania jednej warstwy 2 milisekundy } //PINY na ARDUINO #define LED_1 0 #define LED_2 1 #define LED_3 2 #define LED_4 3 #define LED_5 4 #define LED_6 5 #define LED_7 6 #define LED_8 7 #define LED_9 8 #define LED_10 9 #define LED_11 10 #define LED_12 11 #define LED_13 12 #define LED_14 13 #define LED_15 A4 #define LED_16 A5 //piny odwierzające kolejne warstwy animacji #define LAYER_1 A0 #define LAYER_2 A1 #define LAYER_3 A2 #define LAYER_4 A3 #include <stdlib.h> int PROGRAMSIZE = 10; //masymalny rozmiar animacji int PROGRAMMAX = 10; //masymalna liczba możliwych programuw do zaprogramowania //Bufor dla pamieci danych //jednka klataka zajmujew 2 bajty x 4 warstwy = 8 bajtów + 1 bajt index klatki = 9 bajtów unsigned int PROGRAM[10][4][10]; //900 bajtów unsigned IndexK[10]; int AnimationRefresh=1000; int AnimationSelect=0; //index wybranego programu int AnimationIndex=0; //index wybranej klatki w programie unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzas = 0; unsigned long roznicaCzasu = 0; void ClearLed() { digitalWrite( LED_1, LOW ); digitalWrite( LED_2, LOW ); digitalWrite( LED_3, LOW ); digitalWrite( LED_4, LOW ); digitalWrite( LED_5, LOW ); digitalWrite( LED_6, LOW ); digitalWrite( LED_7, LOW ); digitalWrite( LED_8, LOW ); digitalWrite( LED_9, LOW ); digitalWrite( LED_10, LOW ); digitalWrite( LED_11, LOW ); digitalWrite( LED_12, LOW ); digitalWrite( LED_13, LOW ); digitalWrite( LED_14, LOW ); digitalWrite( LED_15, LOW ); digitalWrite( LED_16, LOW ); } void setup() { pinMode( LED_1, OUTPUT ); digitalWrite( LED_1, HIGH ); pinMode( LED_2, OUTPUT ); digitalWrite( LED_2, HIGH ); pinMode( LED_3, OUTPUT ); digitalWrite( LED_3, HIGH ); pinMode( LED_4, OUTPUT ); digitalWrite( LED_4, HIGH ); pinMode( LED_5, OUTPUT ); digitalWrite( LED_5, HIGH ); pinMode( LED_6, OUTPUT ); digitalWrite( LED_6, HIGH ); pinMode( LED_7, OUTPUT ); digitalWrite( LED_7, HIGH ); pinMode( LED_8, OUTPUT ); digitalWrite( LED_8, HIGH ); pinMode( LED_9, OUTPUT ); digitalWrite( LED_9, HIGH ); pinMode( LED_10, OUTPUT ); digitalWrite( LED_10, HIGH ); pinMode( LED_11, OUTPUT ); digitalWrite( LED_11, HIGH ); pinMode( LED_12, OUTPUT ); digitalWrite( LED_12, HIGH ); pinMode( LED_13, OUTPUT ); digitalWrite( LED_13, HIGH ); pinMode( LED_14, OUTPUT ); digitalWrite( LED_14, HIGH ); pinMode( LED_15, OUTPUT ); digitalWrite( LED_15, HIGH ); pinMode( LED_16, OUTPUT ); digitalWrite( LED_16, HIGH ); pinMode( LAYER_1, OUTPUT ); digitalWrite( LAYER_1, LOW ); pinMode( LAYER_2, OUTPUT ); digitalWrite( LAYER_2, LOW ); pinMode( LAYER_3, OUTPUT ); digitalWrite( LAYER_3, LOW ); pinMode( LAYER_4, OUTPUT ); digitalWrite( LAYER_4, LOW ); ClearLed(); AnimationRefresh=1000; AnimationIndex=0; AnimationSelect=0; for (int io=0;io<PROGRAMMAX;io++) ClearProgram(io); InsertAnimation(AnimationSelect,"0xFFFFx0000xFFFFx0000\n0x0000xFFFFx0000xFFFF\n"); InsertAnimation(1,"0x0000x0660x0660x0000\n0x9009x0000x0000x9009\n"); InsertAnimation(2,"0x8421x8421x8421x8421\n0x0C30x0C30x0C30x0C30\n0x03C0x03C0x03C0x03C0\n0x1248x1248x1248x1248\n0x2244x2244x2244x2244\n0x4422x4422x4422x4422\n"); InsertAnimation(3,"0xFFFFxFFFFx0660x0660\n"); AnimationSelect=1; } void ClearProgram(int nr) { for (int i=0;i<PROGRAMSIZE;i++) { PROGRAM[nr][0][i]=0x0000; PROGRAM[nr][1][i]=0x0000; PROGRAM[nr][2][i]=0x0000; PROGRAM[nr][3][i]=0x0000; } } String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = { 0, -1 }; int maxIndex = data.length() - 1; for (int i = 0; i <= maxIndex && found <= index; i++) { if (data.charAt(i) == separator || i == maxIndex) { found++; strIndex[0] = strIndex[1] + 1; strIndex[1] = (i == maxIndex) ? i+1 : i; } } return found > index ? data.substring(strIndex[0], strIndex[1]) : ""; } unsigned int toLayer(String value) { char ssid_array[5]; value.toCharArray(ssid_array, 5); long decimal_answer = strtol(ssid_array, NULL, 16); return decimal_answer; } void InsertAnimation(int nr,String value) { unsigned long vauleWord=0; ClearProgram(nr); int indexFream=0; PROGRAM[AnimationSelect]; for (int index=0;index<PROGRAMSIZE;index++) { int indexLayr=1; String objFream = getValue(value,'\n',index); if (objFream=="") break; String objLayr = getValue(objFream,'0x',indexLayr); //1 vauleWord = toLayer(objLayr); PROGRAM[nr][0][index] = vauleWord; indexLayr++; objLayr = getValue(objFream,'0x',indexLayr); //2 vauleWord = toLayer(objLayr); PROGRAM[nr][1][index] = vauleWord; indexLayr++; objLayr = getValue(objFream,'0x',indexLayr); //3 vauleWord = toLayer(objLayr); PROGRAM[nr][2][index] = vauleWord; indexLayr++; objLayr = getValue(objFream,'0x',indexLayr); //4 vauleWord = toLayer(objLayr); PROGRAM[nr][3][index] = vauleWord; indexFream++; } IndexK[nr]=indexFream-1; } //pobieramy odpowiednia klatkę animacji //NR - NMERA AKTUANIE WYBRANEJ ANIMACJI //index - INDEKS OKRESLAJACY AKTUALNY NUMER WYSWIETLANEJ KLATKI unsigned int ReadData(int nr,int i) { unsigned int aut=0x0000; aut = PROGRAM[nr][i][AnimationIndex]; return aut; } //pobieramy dane dla odpowiedniej warstwy - wiersz led byte ReadRows(unsigned int dane,int nrL) { switch (nrL) { case 1: return (0xF000 & dane) >> 12; case 2: return (0x0F00 & dane) >> 8; case 3: return (0x00F0 & dane) >> 4; case 4: return (0x000F & dane) ; default: return 0x0; } } //pobermy dane dla odpowiedniego led w wierszu bool ReadLed(byte dane,int nrLed) { switch (nrLed) { case 4: return (0b0001 & dane)>0; case 3: return (0b0010 & dane)>0; case 2: return (0b0100 & dane)>0; case 1: return (0b1000 & dane)>0; default: return false; } } Aktualnie zastanawiam się co wykorzystać w celu zwiększenia ilości pionów dla Arduino , Chodzi o fakt że Ledy są zasilane bezpośrednio z pionów cyfrowych Arduino (+) i zależy mi aby moc Ledów nie uległy zmianie (aby świeciły równomiernie). Proszę o sugestię… led_prog.zip filmy.zip
  20. Witam, mam pewien problem na jednym z filmików na YT zostało pokazane sterowanie LEDami za pomocą poleceń z serial monitora. Chciałbym wykorzystać to rozwiązanie w swoim projekcie do sterowanie paskami LED lecz nawet po skopiowaniu kodu z filmu LEDy nie zapalają się. Chciałbym używać zmiennej typu string aby w kodzie było to ładnie widoczne i każdy rozumiał co się w nim dzieje, lecz tylko zmienna typu char zapala lub gasi LEDy. Proszę o pomoc w rozwiązaniu tego problemu bo nie rozumiem dlaczego kod na filmie działa z użyciem String a w moim identycznym przypadku już nie. Oto mój kod: int redLED=2; int greenLED=3; int blueLED=4; int yellowLED=5; String comm; void setup() { Serial.begin(9600); while(!Serial); pinMode(redLED,OUTPUT); pinMode(greenLED,OUTPUT); pinMode(blueLED,OUTPUT); pinMode(yellowLED,OUTPUT); } void loop() { if(Serial.available()){ comm=Serial.readString(); //RED LED if(comm=="red on"||comm=="RED ON"){ digitalWrite(redLED,HIGH); } if(comm=="red off"||comm=="RED OFF"){ digitalWrite(redLED,LOW); } //GREEN LED if(comm=="green on"||comm=="GREEN ON"){ digitalWrite(greenLED,HIGH); } if(comm=="green off"||comm=="GREEN OFF"){ digitalWrite(greenLED,LOW); } } }
  21. Witajcie. Piszę do Was z prośbą o pomoc. Otóż wymieniam w radiu podświetlenie i chciałbym podłączyć diody LED w dwóch sekcjach po cztery białe. Chciałbym, żeby nadal była możliwość ściemniania (wiem, że w przypadku diod LED nie będzie taki efekt jak w przypadku żarówek żarnikowych, ale i tak będzie przyjemnie wyglądać). Mam znaleziony + (12,5/14,2 V) oraz minus, który jest sterowany przez ściemniacz (pozycja 0 - napięcie 0,00V ,gdy zwiększe na maxa, na zacisku minusowym pojawia się napięcie max 9V). Chciałbym Was teraz się zapytać, jak to dobrze podłączyć, by uniknąć efektu żarzenia. Nie wiem, czy pomógłby tranzystor JFET, jeśli tak o jakich parametrach dobrać? A jeśli nie, jaki byłby lepszy sposób, aby to rozwiązać? Dziękuję za odpowiedzi.
  22. Wymagania Postanowiłem zbudować zegar. O, kolejny projekt zegara, jakich w necie jest setki lub tysiące? No tak właśnie pomyślałem, przecież wśród tysięcy projektów zegara na pewno znajdę odpowiedni dla siebie ale niestety, po kilku dniach szukania dałem sobie spokój, nie ma takiego jak ja chcę. Dlatego rozpisałem wymagania i podzieliłem na obowiązkowe oraz opcjonalne, aby jeszcze raz przemyśleć i poszukać lub zastanowić się nad własnym projektem. Wymagane obowiązkowe: zasilanie akumulatorowe (najlepiej li-ion typu 18650) z okresem działania co najmniej 2 miesiące, dobra widoczność w nocy - wymagane podświetlenie wraz z regulacją jasności świecenia aby w nocy nie rozświetlał połowy pokoju tylko delikatnie się jarzył. duże cyfry min. 4 cm dokładność +/- 1 min/rok. Wymagania opcjonalne: automatyczne przestawianie czasu na letni i zimowy, nie musi pokazywać czasu non stop, wystarczy szybkie włączenie w reakcji na czujnik ruchu. No i niestety żaden projekt który znalazłem nie spełniał wszystkich 4 punktów obowiązkowych. Najczęściej jak w projekcie były duże widoczne wyświetlacze LED to było wymagane zasilanie sieciowe bo nikt się nie przejmował poborem prądu. Pierwsza myśl była taka, że może nie da się tego pogodzić, więc z ciekawości zabrałem się za analizę i weryfikację wymagań. Czy da się technicznie zrobić co spełnia wymagania obowiązkowe? Projekt Wstępne wyliczenia pokazały, że 7 segmentowe wyświetlacze o wielkości 1,8 cala są widoczne w nocy przy prądzie ok. 0,02 mA na segment, całkiem nieźle. Jednak w drugą stronę przy świetle dziennym do wyraźnego widzenia godziny wymagany jest prąd około 5-10 mA na segment no to dużo gorzej. Jednak opierając się o te wyliczenia i dodając czujnik ruchu PIR oraz czujnik oświetlenia zaprojektowałem zegar który powinien spełnić moje wymagania. Centralny mikrokontroler to Atmega88PA, który większość czasu jest uśpiony i pobiera tylko kilkanaście µA. Jako dokładny zegar wykorzystałem gotowy moduł DS3231. Bałem się trochę o prąd pobierany przez czujnik PIR, jednak okazało się, że moduł SR-505 zadowala się tylko ok. 50 µA. Dodatkowo do kontroli ładowania i zabezpieczenia akumulatora użyłem modułu z TP4056. Budowa Po etapie analizy wstępnie mogłem narysować schemat, w sumie prawie standardowy zegar tylko z dwoma obwodami zasilania. Pierwszy obwód o napięciu ok. 3.3V zasila mikrokontroler i pozostałe moduły: zegar i czujnik PIR. Drugi obwód z przetwornicą 5V zasila drivery 74HCT541 i wyświetlacze LED. Do narysowania schematu i projektu PCB użyłem programu KiCad oraz FreeRouting. Oto schemat, zaprojektowana płytka PCB i wizualizacja 3D Niestety już po zleceniu wykonania płytki PCB, eksperymentując z Atmega88PA, doczytałem i sprawdziłem też w praktyce na płytce stykowej, że wykorzystując do sterowania jasnością LED licznik 2 zamiast licznika 0 można znacząco ograniczyć pobór prądu. Sposób polega na generowaniu za pomocą licznika 2 modulacji PWM w której pomiędzy okresami CPU jest uśpiony w trybie SLEEP_MODE_EXT_STANDBY. Dlatego już podczas składania zegara dolutowałem dwa dodatkowe przewody zamieniając piny PD3<->PD5 czyli funkcje OC0B z OC2B, które one pełnią, dzięki temu uzyskałem zmniejszenie poboru prądu podczas wyświetlania godziny. Dodatkowo jeszcze wejścia sterujące jednego z buforów 74HCT541 podłączyłem na stałe do masy co zwolniło jeden z pinów Atmega do ewentualnego wykorzystania w przyszłości. Jeszcze po testach modułów postanowiłem zasilanie modułu DS3231 podłączyć do wyjścia Atmega i włączać zasilanie tego modułu tylko na moment odczytania aktualnego czasu co dodatkowo zredukowało pobierany prąd. Docelowo po uruchomieniu wersji testowej inne zmiany, w porównaniu do pierwszej wersji schematu z której było projektowane PCB, jak na razie nie były wymagane. Będąc przewidujący wyprowadziłem wszystkie mające znaczenie piny mikrokontrolera na kilka portów umożliwiających dolutowanie w przyszłości złącz szpilkowych tzw. goldpiny. Dzięki wyprowadzeniom szpilkowym zaprojektowana płytka PCB może pełnić rolę modułu dużego wyświetlacza LED sterowanego np. z Arduino lub innego zewnętrznego sterownika zasilanego 2,8-5V. Zegar w trakcie lutowania. Uruchomienie Podzieliłem uruchomienie na dwa etapy. W pierwszym przetestowałem obwód 3.3V co pozwoliło znaleźć kilka błędów programowych które uniemożliwiały przejście w tryb SLEEP_MODE_PWR_DOWN. W drugim etapie podłączyłem obwód 5V na razie bez wyświetlaczy LED i tu małe zaskoczenie, same bufory 74HCT541 w stanie włączenie ale bez żadnego obciążenia pobierają prąd kilka mA. Szybki test na płytce stykowej to niestety potwierdził, więc to nie był błąd w programie czy w montażu. Widocznie ten "model tak ma". Zamiana na D74HC541C nie pomogła a wręcz pogorszyła sytuację. No trudno te kilka mA w stanie aktywnym jakoś odżałuję, na szczęście stan wybudzenia to może 1% czasu pracy. Ostatecznie udało się zmniejszyć w trakcie uśpienia zegara pobór prądu do około 80 µA co uważam za sukces całego projektu. Jak się zegar będzie zachowywał i co ile czasu wymagane będzie doładowanie akumulatora okaże się w praktyce. Zdjęcia zmontowanego i uruchomionego zegara. Podsumowanie Ostatecznie udało mi zegar uruchomić i spełnić moje wymagania. Zdjęcie zegara w docelowym miejscu, a właściwie dwóch zegarów bo z rozpędu wykonałem dwie sztuki. Teraz mam jeden używany jako zegar i drugi do testów, rozbudowy i eksperymentów. Rozbudowa w przyszłości Po pewnym okresie użytkowania pojawiły się pomysły na rozbudowę: Bezprzewodowa synchronizacja z dokładnym zewnętrznym zegarem - niestety pierwszego pomysłu aby synchronizować zegar z siecią GPS nie udało mi się zrealizować z powodu słabego sygnału satelitów dostępnego w docelowym miejscu gdzie zegar ma się znajdować. Dlatego zamiast GPS planuję dołożyć moduł Bluetooth Low Energy HM-10 oraz dopisać prostą aplikację na Androida która będzie przesyłąła aktualny czas do modułu. Zatrzymywanie filmu gestem - zegar powstał jako „dodatek” do TV i jako taki sprawdza się doskonale, szczególnie kiedy wieczorem oglądam film i mogę na bieżąco kontrolować godzinę bez odrywania wzroku od ekranu. Jednak zamarzyła mi się opcja włączania pauzy w TV jedynie poprzez zbliżenie ręki od zegara. Zakupiłem już w tym celu moduł APDS9960 i po pierwszych testach wygląda na spełniający wymagania, czas reakcji na zbliżenie ręki na ok. 10cm jest błyskawiczny. Planuję w reakcji na zbliżenie przez dołączoną diodę IR emitować sygnał pilota Play/Pause.
  23. Cześć, Mam spory problem z gotowym projektem, który chciałem odtworzyć. Dokładnie jest to urządzenie do malowania światłem LED Light painter. Projekt opiera się na rozwiązaniu Adafruit z Neopixel-ami, natomiast ma dodatkowo wyświetlacz lcd i guziki do sterowania plikami. No i tutaj zaczyna się komplikacja dla mnie. Jeśli chodzi o połączenia to wszystko zrobiłem dobrze, przetestowałem na innych prostych programach i teoretycznie powinno wszystko działać (led podpięty i działa, wyświetlacz lcd też, karta sd nie bo nawet nie wiem jak to przetestować). Zaznaczam, że jestem straszną pierdołą w tych sprawach, a projekt jest bardziej fotograficzny niż elektroniczny dlatego nieoceniona będzie Wasza pomoc. Po wgraniu szkicu z Arduino IDE nie dzieje się nic, zapala się tylko podświetlenie w lcd i to wszystko. Natomiast podczas kompilacji wyświetlają mi się błędy: C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:510:7: warning: extra tokens at end of #else directive #else if CONSISTENT ^ C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino: In function 'void getFileName(char*, uint8_t, uint8_t)': C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:610:64: warning: default argument given for parameter 3 of 'void getFileName(char*, uint8_t, uint8_t)' [-fpermissive] void getFileName(char* fileName, uint8_t index, uint8_t ext = 0) { ^ C:\Users\ThinkPad\Desktop\student\led\ArduinoUNO\Light-painter-master\Light-painter-master\Light_painter\Light_painter.ino:110:6: note: previous specification in 'void getFileName(char*, uint8_t, uint8_t)' here void getFileName(char* fileName, uint8_t index, uint8_t ext = 0); ^ Szkic używa 22240 bajtów (68%) pamięci programu. Maksimum to 32256 bajtów. Zmienne globalne używają 1420 bajtów (69%) pamięci dynamicznej, pozostawiając 628 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów. Ja tego niestety nie rozumiem i nie mam czasu zrozumieć, gdyż deadline mnie goni bardzo. Zadałem już pytanie do autora na githubie ale mam nadzieję, że ktoś z Was może wiedzieć o co chodzi. Będę bardzo wdzięczny.
  24. Witam serdecznie, Zapraszam do zakupu po bardzo atrakcyjnej cenie. https://allegro.pl/show_item.php?item=8612554517 Pozdrawiam.
  25. Witam Mam problem z paskiem led z diodami WS2812B i arduino uno. Pasek wyświetla błędne kolory, da przykładu kiedy chcę aby trzy diody zapaliły się na kolor czerwony to uzyskuję kolor czerwony niebieski oraz zielony. Dałem już rezystor na sygnał sterowania, ale nic to nie pomogło. Diody zasilałem zewnętrznym zasilaczem 5V i oczywiście GND spięte z GND arduino. Próbowałem też zmian w kodzie i dwóch różnych bibliotek ale cały czas mam ten sam problem.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.