Ja zrobiłem podświetlanie schodów z taśm LED. Do sterownika doprowadzone napięcie 12V na potrzeby LED, a do zasilenia Arduino użyłem przetwornicy WP1584 3A. Kupiłem ją kiedyś do zjechania napięciem z 5V do 3,3V na potrzeby zasilenia ESP8266, ale nie szło ustawić stabilnego napięcia 3,3V z 5V. Z ustawieniem 5V z 12V nie ma problemu.
Ocena wątku:
Listwa LED z czujnikiem ruchu PIR HC-SR505 do kredensu w kuchni.
|
13-02-2017, 19:47
(13-02-2017, 09:12)zamber napisał(a): Ja zrobiłem podświetlanie schodów z taśm LED. Do sterownika doprowadzone napięcie 12V na potrzeby LED, a do zasilenia Arduino użyłem przetwornicy WP1584 3A. Kupiłem ją kiedyś do zjechania napięciem z 5V do 3,3V na potrzeby zasilenia ESP8266, ale nie szło ustawić stabilnego napięcia 3,3V z 5V. Z ustawieniem 5V z 12V nie ma problemu.Co do przetwornicy to mam zamontowaną w urządzeniu do którego podpinam dowolny zasilacz i ustawiam napięcie wyjściowe jakie akurat potrzebuje .Szukam przykładu zastosowania fotodiody lub fotorezystora jako włącznika zamiast przycisku. Chce zrobić tak że jak fotorezystor da odczyt 50 to żeby się urządzenie załączyło a jak będzie powyżej 50 to wyłączyło.Mam pytanie jak tu zamieścić schemat? Wczoraj próbowałem i nic z tego.Chce dopisać do programu coś takiego:
1.Że jeżeli fotorezystor poda wynik =<50 to podaje sygnał na pin 2
2.Jeżeli fotorezystor poda wynik >50 to nie podaje sygnał na pin 2
Jak to napisać?
#define fotorezystor 0
fotorezystor x=0
if x=<50 i co dalej?
16-02-2017, 23:35
Poniżej kod na najprostszy program z wykorzystaniem fotorezystora, zapalający diodę na Arduino (pin 13).
Fotorezystor podłączasz do pinu A0 (przez dzielnik napięciowy), zadana wartość to 200.
Ja dołożyłem fotorezystor do sterownika schodowego, żeby nie załączał się w dzień, szczególnie że koło dolnego czujnika często się przechodzi i niepotrzebnie się załączał.
Czujka podpięta do A0, poniżej dołożony drugi warunek.
if (digitalRead(A0) == HIGH and (odczyt < 100)) //sterownik uruchomi światło jak wykryje ruch i jednocześnie będzie ciemno
Fotorezystor podłączasz do pinu A0 (przez dzielnik napięciowy), zadana wartość to 200.
Kod:
void setup() {
Serial.begin(9600);
while(!Serial);
pinMode(A0, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
int odczyt = analogRead(A0);
if(odczyt < 200)
digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
Serial.println(odczyt);
delay(1000);
}
Ja dołożyłem fotorezystor do sterownika schodowego, żeby nie załączał się w dzień, szczególnie że koło dolnego czujnika często się przechodzi i niepotrzebnie się załączał.
Czujka podpięta do A0, poniżej dołożony drugi warunek.
if (digitalRead(A0) == HIGH and (odczyt < 100)) //sterownik uruchomi światło jak wykryje ruch i jednocześnie będzie ciemno
17-02-2017, 12:36
(16-02-2017, 23:35)zamber napisał(a): Poniżej kod na najprostszy program z wykorzystaniem fotorezystora, zapalający diodę na Arduino (pin 13).
Fotorezystor podłączasz do pinu A0 (przez dzielnik napięciowy), zadana wartość to 200.
Kod:void setup() {
Serial.begin(9600);
while(!Serial);
pinMode(A0, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
int odczyt = analogRead(A0);
if(odczyt < 200)
digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
Serial.println(odczyt);
delay(1000);
}
Ja dołożyłem fotorezystor do sterownika schodowego, żeby nie załączał się w dzień, szczególnie że koło dolnego czujnika często się przechodzi i niepotrzebnie się załączał.
Czujka podpięta do A0, poniżej dołożony drugi warunek.
if (digitalRead(A0) == HIGH and (odczyt < 100)) //sterownik uruchomi światło jak wykryje ruch i jednocześnie będzie ciemno
Kod:
#include <Bounce2.h>
#define PRZYCISK 2
#define SWIATLO 3
#define PRZEKAZNIK 4
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
Bounce bouncer = Bounce(PRZYCISK, 25);
boolean uzbrojony = false;
unsigned long przycisk_czas, uzbrojenie_czas;
void setup() {
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
pinMode(PRZEKAZNIK, OUTPUT);
}
void zmiana()
{
digitalWrite(SWIATLO, LOW);
uzbrojenie_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
uzbrojony = !uzbrojony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}
void loop() {
bouncer.update();
int value = bouncer.read();
digitalWrite(LED0, uzbrojony);
if (value == HIGH)
attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);
if(digitalRead(PIR)==HIGH){
digitalWrite(PRZEKAZNIK, HIGH);
if (uzbrojony && uzbrojenie_czas < millis())
digitalWrite(SWIATLO, HIGH);
}
else
digitalWrite(SWIATLO, LOW);
}
17-02-2017, 14:34
Dobrze, gdybyś wkleił schemat i pełen kod programu, bo dziwię się, że nie działa Ci przekaźnik. No chyba,że próbujesz go wysterować sygnałem bezpośrednio z PIR'a, a wtedy nie ma prawa działać.
(17-02-2017, 14:34)zamber napisał(a): Dobrze, gdybyś wkleił schemat i pełen kod programu, bo dziwię się, że nie działa Ci przekaźnik. No chyba,że próbujesz go wysterować sygnałem bezpośrednio z PIR'a, a wtedy nie ma prawa działać.
To pełny kod programu. Na razie nie montowałem fotorezystora. Przekaźnik jest podłączony pod digital 4 Arduino Uno.
Kod:
#include <Bounce2.h>
#define FOTOREZYSTOR A0
#define PRZEKAZNIK 4
#define SWIATLO 3
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
Bounce bouncer = Bounce(FOTOREZYSTOR, 25);
boolean uzbrojony = false;
unsigned long fotorezystor_czas, uzbrojenie_czas;
void setup() {
Serial.begin(9600);
while(!Serial);
pinMode(A0, INPUT);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(SWIATLO, LOW);
pinMode(PIR, INPUT);
pinMode(FOTOREZYSTOR, INPUT_PULLUP);
}
void zmiana()
{
digitalWrite(SWIATLO, LOW);
uzbrojenie_czas = millis() + CZAS_SWIECENIA;
fotorezystor_czas = millis() + 1000;
uzbrojony = !uzbrojony;
detachInterrupt(digitalPinToInterrupt(FOTOREZYSTOR));
}
void loop() {
int odczyt = analogRead(A0);
if(odczyt <= 400)
digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
Serial.println(odczyt);
delay 500);
bouncer.update();
int value = bouncer.read();
digitalWrite(LED0, uzbrojony);
if (value == HIGH)
attachInterrupt(digitalPinToInterrupt(FOTOREZYSTOR), zmiana, FALLING);
if(digitalRead(PIR)==HIGH){
digitalWrite(SWIATLO, HIGH);
if(digitalRead(PRZEKAZNIK)==HIGH){
digitalWrite(PRZEKAZNIK, HIGH);
if (uzbrojony && uzbrojenie_czas < millis())
digitalWrite(SWIATLO, HIGH);
}
else
digitalWrite(SWIATLO, LOW);
}
}
Przeglądający: 1 gości