Модуль фоторезистора+датчик движения.

Mortu
Offline
Зарегистрирован: 28.05.2016

Всем привет.

Прошу помощи у опытных людей.

Хочу сделать что-то типо ночника. Надо что бы он орентировался по модулю фоторезистора когда сталов темно, а потом по датчику движения включал реле. Или в обратной последовательности, сначала определял наличие движения, а потом проверял насколько темно для того что бы включить реле на котором будет лампочка.

По раздельности скейтчи работают, но вот как их соединить не как не могу додуматься. Все датчики цифровые.

Прошу помочь начинающему. 

vvadim
Offline
Зарегистрирован: 23.05.2012

приведите свои наработки в читаемый вид и покажите сообществу - тогда есть надежда на помощь.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

купить датчик движения 502й и впаять в него фоторезистор...

popUP
Offline
Зарегистрирован: 09.10.2014

Mortu пишет:

Всем привет.

Прошу помощи у опытных людей.

Хочу сделать что-то типо ночника. Надо что бы он орентировался по модулю фоторезистора когда сталов темно, а потом по датчику движения включал реле. Или в обратной последовательности, сначала определял наличие движения, а потом проверял насколько темно для того что бы включить реле на котором будет лампочка.

По раздельности скейтчи работают, но вот как их соединить не как не могу додуматься. Все датчики цифровые.

Прошу помочь начинающему. 

Я , как начинающий, спешу похвастать, Я Такое тока что сделал! работает. Жена правда ругается, что он срабатывает, когда она ворочается. А мне прикольно.

У меня датчиков больше, лишнее режь не спеша. И избавься от 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);
  } 
}