ARDUINO - Moje projekty
wykonywania .


Oscyloskop - tyle co uda się wycisnąć z Arduino UNO

Tutaj nie starałem się być oryginalny, dostosowałem aplikację do innej płytki wyświetlacza

Płytka wyświetalcza i klawiszy - wybrałem Shield LCD12864 firmy DFRobot

Wejście pomiarowe - zakres 0 - 5V DC

Schemat

Aplikacja

Parametry - szału nie ma 100 kHz, tyle realnie udało mi się wycisnąć z UNO

.... .... ....


Oświetlenie schodów paskami LED

Koncepcja - podświetlanie schodów paskami LED uruchamianymi dwoma czujnikami ruchu.

Zmiana kierunku światłą w zależności od zadziałania czujnika, regulacja intensywności świecenia (funkcja PWM)

Nie znalazłem w necie gotowca który mogłem zaadoptować do własnych potrzeb więc postanowiłem zaprojektować wszystko od nowa.

Każdy z 4-ch kanałów będzie sterował czterema paskami LED tzn. co czwartym schodkiem.


Mało miejsca !

Pomysł podświetlenia schodów powstał już po wykonaniu schodów i nie było miejsca na wstawienie czegoś większego niż puszka instalacyjna.

Udało się pomieścić płytkę sterującą w jednej puszce, a zasilacz w drugiej.

Puszka instalacyjna


.

Paski LED

Wybrałem typowe paski o ciepłej barwie i zasilane napięciem 12VDC oraz pokryte silikonem ze względu na możliwość dostania się wydy podczas mycia schodów.


Zasilanie - Dużo mocy kontra miniaturowe wymiary.

Projekt zakładał zamontowanie wszystkiego w standardowym otworze na puszkę instalacyjną w ścianie, taki zasilacz znalazłem.

Te 15 Wat wystarczyło z lekkim zapasem do zasilenia 16-tu pasków LED o długości po 80 centymetrów każdy.

Po zastosowaniu sterowania PWM mocą świecenia i ustawieniu potencjometru na 30% jasności uzyskałem oczekiwany efekt.

Światło nie raziło w oczy, a schody były dobrze widoczne przy słabym oświetleniu.

Zasilacz 10V


Płytka mocy

Do sterowania paskiem LED najlepiej nadaje sie tranzystor MOSFET

Poniższy schemat przedstawia sterowanie jednym kanałem

Zasilacz 10V


Arduino Nano

Do tego projektu spokojnie wystarczy Arduino Nano, małe wymiary i odpowiednia ilość wejść/wyjść.

Z braku czasu nie bawiłem się w wykonanie dedykowanej płytki PCB, użyłem uniwersalnej.

Może to i nie wygląda estetycznie, ale działa już parę lat.

Płytka Nano i Mosfety


Schemat

Rysunek przedstawia połączenia wykonane na płytce prototypowej.

Dwa czujniki ruchu PIR, każdy z nich uruchamia sekwencje świecenia w inną stronę.

Potencjometr 10k przeznaczony do regulacji jasności świecenia, w wersji końcowej dodałem drugi PR do zmiany szybkości wędrowania światła.

Schemat prototypowy

Schemat wielokreskowy


Aplikacja

Poniżej kod programu przetestowany działający, oczywiście po optymalizacji wygląda trochę zgrabniej.

Po dodaniu pętli FOR oraz parę komend IF kod będzie o ponad połowę krótszy, ale dla początkujących osób mniej czytelny niż ten poniżej.

Arduino Code

//******************************************** // Sterowanie oświetleniem LED schodów // 4 x pasek LED 12V (16 schodów) // regulacja PWM pin 3,5,6,9 // wejście sensor to czujki PIR1 lub PIR2 wyzwalają odpowiedni kierunek świecenia // // POT1 do regulacji natężenia świecenia // POT2 do regulacji szybkości zmian światła // POT3 do regulacji czułości progu przełaczania swiatła // Jarcyk.net 2018 // //******************************************** int sensor1 = 2; // czujnik1 to pin 2 int sensor2 = 7; // czujnik2 to pin 7 int LED1 =3; // LED 1 to pin 3 int LED2 =5; // LED 2 to pin 5 int LED3 =6; // LED 3 to pin 6 int LED4 =9; // LED 4 to pin 9 int delayLED = 500; byte setPWM = 5; // od 0 do 255 czyli 0-100% bool dark = false; // jest ciemno int dark_set = 450; // próg przełączenia na ciemno gdy powyżej wartosci int dark_act = 0; // aktualna wartość oswietlenia void setup() { Serial.begin(9600); // wejścia sterujace pinMode(sensor1, INPUT); // czytanie sygnału HIGH pinMode(sensor2, INPUT); // czytanie sygnału HIGH // wyjscia analogWrite(LED1,setPWM); analogWrite(LED2,setPWM); analogWrite(LED3,setPWM); analogWrite(LED4,setPWM); } void loop() // petla programu { int PR1 = analogRead(A0); // wejście analogowe od 0-1023 int PR2 = analogRead(A1); // ustawianie czasu przełączania 0-1023 ms int PR3 = analogRead(A2); // ustawienie progu jasno/ciemno delayLED = (PR2 + 100); // czas większy niż 100ms int i; dark_act = PR3; // wykrywanie ciemno-jasno if (dark_set > dark_act) { dark = true; } else { dark = false; } if (digitalRead(sensor1) == HIGH and dark ) // sterowanie od czujnika 2 { Serial.print("C1, setPWM: "); Serial.println(setPWM); Serial.print("Delay LED [ms]: "); Serial.println(delayLED); Serial.print("Oswietlenie: "); Serial.println(PR3); analogWrite(LED1,0); // wyłacz PWM na LED1 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED4,0); // wyłacz PWM na LED4 analogWrite(LED3,0); // wyłacz PWM na LED3 analogWrite(LED2,setPWM); // załacz PWM na LED2 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED2,(setPWM/2)); // zmniejsz 50% PWM na LED2 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED3,(setPWM/2)); // załacz 50% PWM na LED3 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED2,0); // wyłacz PWM na LED2 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED3,setPWM); // załacz 100% PWM na LED3 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED3,(setPWM/2)); // zmniejsz 50% PWM na LED3 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED4,(setPWM/2)); // załacz 50% PWM na LED4 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED3,0); // wyłacz PWM na LED3 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED4,setPWM); // załacz na 100% PWM na LED4 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED4,(setPWM/2)); // zmniejsz 50% PWM na LED4 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED1,(setPWM/2)); // załacz 50% PWM na LED1 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED4,0); // wyłacz PWM na LED4 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED1,setPWM); // załacz PWM na LED1 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED1,(setPWM/2)); // zmniejsz 50% PWM na LED1 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 analogWrite(LED2,(setPWM/2)); // załacz 50% PWM na LED2 delay(delayLED/3); // czas do przejścia następnego kroku 1/3 } if (((digitalRead(sensor1) == LOW)and(digitalRead(sensor2)== LOW))or dark) // czujniki wylaczone to wygas LEDy { analogWrite(LED1,0); // wyłacz PWM na LED1 analogWrite(LED2,0); // wyłacz PWM na LED2 analogWrite(LED3,0); // wyłacz PWM na LED3 analogWrite(LED4,0); // wyłacz PWM na LED4 } if ((digitalRead(sensor2) == HIGH )and(digitalRead(sensor1) == LOW) and dark) // sterowanie od czujnika 2 { Serial.print("C2, setPWM: "); Serial.println(setPWM); Serial.print("Delay LED [ms]: "); Serial.println(delayLED); Serial.print("Oswietlenie: "); Serial.println(PR3); analogWrite(LED4,0); // wyłacz PWM na LED4 analogWrite(LED1,0); // wyłacz PWM na LED1 analogWrite(LED2,0); // wyłacz PWM na LED2 analogWrite(LED3,setPWM); // załacz PWM na LED3 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED3,0); // wyłacz PWM na LED3 analogWrite(LED2,setPWM); // załacz PWM na LED2 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED2,0); // wyłacz PWM na LED2 analogWrite(LED1,setPWM); // załacz PWM na LED1 delay(delayLED); // czas do przejścia następnego kroku analogWrite(LED1,0); // wyłacz PWM na LED1 analogWrite(LED4,setPWM); // załacz PWM na LED4 delay(delayLED); // czas do przejścia następnego kroku } if ((digitalRead(sensor1) == LOW)and(digitalRead(sensor2)== LOW)) // czujniki wylaczone to wygas LEDy { analogWrite(LED1,0); // wyłacz PWM na LED1 analogWrite(LED2,0); // wyłacz PWM na LED2 analogWrite(LED3,0); // wyłacz PWM na LED3 analogWrite(LED4,0); // wyłacz PWM na LED4 } }


Wykonanie

... link do filmiku ....



2018 ®


Zasilacz labolatoryjny własnego pomysłu: 3-30V DC/ 1A; zasilanie lutownicy 24AC; dodatkowe napięcia 5 i 12 VDC

Obudowa

Najważniejszy to transformator

Dodatkowe funkcje

Schemat .... .... ....


Serwer czasu rzeczywistego oparty na odbiorniku GPS do zastosowań domowych, shield ....

koncepcja