Модуль фоторезистора+датчик движения.
- Войдите на сайт для отправки комментариев
Сб, 28/05/2016 - 01:06
Всем привет.
Прошу помощи у опытных людей.
Хочу сделать что-то типо ночника. Надо что бы он орентировался по модулю фоторезистора когда сталов темно, а потом по датчику движения включал реле. Или в обратной последовательности, сначала определял наличие движения, а потом проверял насколько темно для того что бы включить реле на котором будет лампочка.
По раздельности скейтчи работают, но вот как их соединить не как не могу додуматься. Все датчики цифровые.
Прошу помочь начинающему.
приведите свои наработки в читаемый вид и покажите сообществу - тогда есть надежда на помощь.
купить датчик движения 502й и впаять в него фоторезистор...
Всем привет.
Прошу помощи у опытных людей.
Хочу сделать что-то типо ночника. Надо что бы он орентировался по модулю фоторезистора когда сталов темно, а потом по датчику движения включал реле. Или в обратной последовательности, сначала определял наличие движения, а потом проверял насколько темно для того что бы включить реле на котором будет лампочка.
По раздельности скейтчи работают, но вот как их соединить не как не могу додуматься. Все датчики цифровые.
Прошу помочь начинающему.
Я , как начинающий, спешу похвастать, Я Такое тока что сделал! работает. Жена правда ругается, что он срабатывает, когда она ворочается. А мне прикольно.
У меня датчиков больше, лишнее режь не спеша. И избавься от Delay, я это сделал, но позже этой версии :)
Любой мой транзистор - это ваше реле, только digitalWrite используйте.
И мне особенно нравится как выглядит у меня Loop. Oсобенно, когда заменил delay на millis
/* Подключены устройства - Arduino Nano v3 - LCD 20x4 i2c - RTC DS1307 i2c Подключены датчики - DHT 11 температура и влажность - LN35 температура - PIR движения - Photo фоторезистор + 10 kOm Ну и еще - КТ 973 (2 шт) , резистор 2.2kOm, диод на обратный ток, на линии 12В - КТ 972 (2 шт) резистор 10kOm,на линии 12В - Спикер с конденсатором на 10 mf */ //подключаем библиотеки #include <Wire.h> #include <RTClib.h> #include "DHT.h" #include <LiquidCrystal_I2C.h> //назначаем пины // ВХОДЫ #define DHTPIN A0 // Датчик Температуры и влажности int tempPin = A1; // Датчик Температуры LN 35 int photoPin = A2; // Датчик освещенности - фоторезистор? плюс на выход REF (1.1в) int pirPin = A3; // Датчик движения //ВЫХОДЫ int spkPin = 6; // Спикер int lednightPin = 9; // Транзистор включающий Ночник int ledtablePin = 10; // Транзистор включающий Стол int fanPin = 11; // Транзистор включающий Кулер // Объявляем что можем RTC_DS1307 RTC; // Часы LiquidCrystal_I2C lcd(0x27,20,4); // адрес LCD #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // D 22 (AM2302) DHT dht(DHTPIN, DHTTYPE, 6); // И переменные float tempC; //для датчика температуры LN35 int reading; //для датчика температуры LN35 int t; // для DHT int h; // для DHT int Light; // Для фоторезистора int LightR; long unsigned int lowIn; // для датчика движения long unsigned int pause = 5000; // для датчика движения boolean lockLow = true; // для датчика движения boolean takeLowTime; // для датчика движения int FAN_pwm = 100; // Значение от 0...255 (0 - 5в) /////******************************************************************************* void setup() { Serial.begin(9600); Wire.begin(); dht.begin(); /// Starting DHT RTC.begin(); //RTC.adjust(DateTime(__DATE__, __TIME__)); // установка времени на часах по времени компьютера // Запускаем приветствие на LCD lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(0, 1); lcd.print(" P R I V E T "); lcd.setCursor(0, 2); lcd.print(" SWEET HOME"); delay (1000); lcd.clear(); // Режимы входов-выходов, включаем подтягивающие резисторы, где надо // устанавливаем начальные значения вкл/выкл pinMode(pirPin, INPUT); digitalWrite(pirPin, LOW); //было в примере pinMode (tempPin, INPUT); // digitalWrite (tempPin, HIGH); /// если включаю - перестает меняться значение на датчике, 1023 pinMode(photoPin, INPUT); // digitalWrite(photoPin,LOW); pinMode (spkPin, OUTPUT); pinMode (lednightPin, OUTPUT); // digitalWrite(lednightPin, HIGH); // тут KT972, закрыт при HIGH pinMode (ledtablePin, OUTPUT); // digitalWrite(ledtablePin, HIGH); // тут KT972, закрыт при HIGH pinMode (fanPin, OUTPUT); // digitalWrite(fanPin, LOW); // тут KT973, закрыт при LOW // пикнем любым способом, tone проще tone (spkPin, 700, 100); //noTone (SPK_pin); // отключает сигнал, если нет длительности //analogWrite (SPK_pin, 10); delay(500); analogWrite (SPK_pin, 0); } //////// Ц И К Л ///////////////////////////////// void loop() { READ_DATA(); LCDPRN (); PIR_start(); // FAN_start(); TABLE_start (); delay(500); } ////Подпрограммы **************************************************************** ////////????????????????????????????????????????????????????????????????///////// void READ_DATA (){ // delay(250); analogReference(INTERNAL); reading = analogRead(tempPin); //// чтение показаний датчика LN35 //tempC = (reading/1024.0)*5000/10; // для расчета с опорным напряжением по дефолту (5в) tempC = reading/9.31; // для расчета с опорным напряжением INTERNAL (1.1в) h = dht.readHumidity(); // Чтение DHT 11 t = dht.readTemperature(); // delay(250); // вроде как рекомендуют паузу между чтением аналоговых выходов ? analogReference(DEFAULT); Light = analogRead(photoPin); // Чтение фоторезистора LightR = Light; } /////////////////////////////////////// void PIR_start(){ if(digitalRead(pirPin) == HIGH && Light > 500){ analogWrite(lednightPin, 180); //the led visualizes the sensors output pin state } if(digitalRead(pirPin) == LOW){ analogWrite(lednightPin, 255); // digitalWrite(lednightPin, HIGH); } } /////////////////////////////////////// void TABLE_start (){ if (Light < 500){ // digitalWrite (ledtablePin, HIGH); analogWrite (ledtablePin, 255); } else if (Light > 500){ analogWrite (ledtablePin, 150); } if (Light > 700) { analogWrite (ledtablePin, 50); } } ///////////////////////////////////////////////////////////////////////// void LCDPRN (){ DateTime now = RTC.now(); lcd.setCursor(0,0); lcd.print(now.day(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(11, 0); lcd.print(' '); if (now.hour() <10) { lcd.print(' '); } lcd.print(now.hour(), DEC); lcd.print(':'); lcd.setCursor(15, 0); if (now.minute() <10) { lcd.print('0'); } lcd.print(now.minute(), DEC); lcd.print(':'); lcd.setCursor(18, 0); if (now.second() <10) { lcd.print('0'); } lcd.print(now.second(), DEC); lcd.setCursor(0, 1); lcd.print("TEMP:"); if (t>=0&t<10) lcd.print(' '); if (t<0&t>-10) lcd.print(' '); lcd.print(t); lcd.print("C HUMID:"); lcd.print(h); lcd.print("% "); lcd.setCursor(0, 3); lcd.print("L "); lcd.setCursor(2, 3); lcd.print(LightR); lcd.setCursor(7, 3); lcd.print(" SHELF "); lcd.setCursor(14, 3); lcd.print(tempC); //lcd.print(reading); } ///////////////////////////////////////////////////////////////// void FAN_start(){ if (tempC <=25 ){ FAN_pwm = 0; analogWrite (fanPin, FAN_pwm); // digitalWrite (fanPin, LOW); // lcd.setCursor(16, 3); // lcd.print(" -"); } if (tempC > 25 ){ FAN_pwm = 150; analogWrite (fanPin, FAN_pwm); // lcd.setCursor(16, 3); // lcd.print(" *"); } if (tempC > 28 ){ FAN_pwm = 200; // lcd.setCursor(16, 3); // lcd.print("**"); analogWrite (fanPin, FAN_pwm); } if (tempC >34 ){ FAN_pwm = 255; // lcd.setCursor(16, 3); // lcd.print("**"); analogWrite (fanPin, FAN_pwm); tone (spkPin, 2000, 500); } }