возможно управление датчиком

alexanderkrayduba
Offline
Зарегистрирован: 24.05.2014

Здравствуйте. Собираю скажем так "Умную комнату" соеденил  два скетча. В одном из них включается лампочка при обнаружении движения через PIR датчик. Во втором идет определение и вывод температуры на экран монитора, с датчиками ds18b20. Хочу добавить функцию ручного управления светом(тоесть не от датчика), осуществлять хочу это с помощью блютуз., как все это сделать я примерно представляю, но необходимо отключать PIR датчик. Так вот вопросы. Возможно ли отключать PIR датчик программным путем? Если нет, то как можно управлять светом в ручном режиме и через датчик движения?

Вот код.

#include <OneWire.h>
#include <DallasTemperature.h>
 
#define ONE_WIRE_BUS 10

/////////////////
// Термодатчики//
/////////////////
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
DeviceAddress Thermometer1 = { 
  0x28, 0x90, 0x97, 0x66, 0x05, 0x00, 0x00, 0xE5 };  // адрес датчика DS18B20 280054B604000092
DeviceAddress Thermometer2 = { 
  0x28, 0xE3, 0x10, 0x66, 0x05, 0x00, 0x00, 0xBE };

///////////////////////
//Инфракрасный датчик//
///////////////////////
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;       

//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;        

//Пауза, после которой движение считается оконченным
long unsigned int pause = 5000; 

//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime; 

int pirPin = 2;    //вывод подключения PIR датчика
int relayPin = 4;  //реле пин

 
void setup()
{
  pinMode(pirPin, INPUT);
  pinMode(relayPin, OUTPUT);
  
  //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
  digitalWrite(relayPin, LOW);
  delay(4000);
  digitalWrite(pirPin, LOW);

  //дадим датчику время на калибровку
  for(int i = 0; i < calibrationTime; i++)
  
  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
 
  Serial.begin(9600);
}
 
 void printTemperature(DeviceAddress deviceAddress)
  {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
  }
  
void loop()
{
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  {
    //Если до этого момента еще не включили реле
    if(lockLow)
    {
      lockLow = false;      
      //Включаем реле.
      //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
      digitalWrite(relayPin, HIGH);
      delay(50);
    }        
    takeLowTime = true;
  }

  //Ели движения нет
  if(digitalRead(pirPin) == LOW)
  {      
    //Если время окончания движения еще не записано
    if(takeLowTime)
    {
      lowIn = millis();          //Сохраним время окончания движения
      takeLowTime = false;       //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено
    if(!lockLow && millis() - lowIn > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
      lockLow = true;                
      digitalWrite(relayPin, LOW);
      delay(50);
    }
  }
  
  sensors.requestTemperatures();
  Serial.print("Sensor1  ");
  printTemperature(Thermometer1);
 
  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);
}

 

alexanderkrayduba
Offline
Зарегистрирован: 24.05.2014

И еще вопрос. Возможно ли подключить Arduino Mega 2560 к планшету с OTG? Планирую собрать небольшую программу через App Inventor 

vdk
Offline
Зарегистрирован: 14.04.2013

alexanderkrayduba пишет:

 Так вот вопросы. Возможно ли отключать PIR датчик программным путем? Если нет, то как можно управлять светом в ручном режиме и через датчик движения?

А зачем его отключать? Его можно просто не опрашивать

alexanderkrayduba
Offline
Зарегистрирован: 24.05.2014

vdk пишет:

alexanderkrayduba пишет:

 Так вот вопросы. Возможно ли отключать PIR датчик программным путем? Если нет, то как можно управлять светом в ручном режиме и через датчик движения?

А зачем его отключать? Его можно просто не опрашивать

 

Подскажите пожалуйста, как это можно сделать?

Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика

vdk
Offline
Зарегистрирован: 14.04.2013

alexanderkrayduba пишет:

Подскажите пожалуйста, как это можно сделать?

Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика

Ну, можно как-то так:

// если ручное управление не используется, то directControl установлен в false
if (!directControl)
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  { // bla-bla code

 

vdk
Offline
Зарегистрирован: 14.04.2013

А вообще - надо расписать сценарий, как где что происходит - и по нему и писать программу (т.е. сценарий раскладывается на блок-схему, а по ней и пишется программа)

 

alexanderkrayduba
Offline
Зарегистрирован: 24.05.2014

vdk пишет:

alexanderkrayduba пишет:

Подскажите пожалуйста, как это можно сделать?

Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика

Ну, можно как-то так:

// если ручное управление не используется, то directControl установлен в false
if (!directControl)
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  { // bla-bla code

 

Объясните пожалуйста поподробнее, а тоя новичок, только начал разбираться.

vdk
Offline
Зарегистрирован: 14.04.2013

А это - для самостоятельной работы, разобраться как и что