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.
.
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.
Płytka mocy
Do sterowania paskiem LED najlepiej nadaje sie tranzystor MOSFET
Poniższy schemat przedstawia sterowanie jednym kanałem
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.
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.
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.
//********************************************
// 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