возможно управление датчиком
- Войдите на сайт для отправки комментариев
Сб, 24/05/2014 - 22:20
Здравствуйте. Собираю скажем так "Умную комнату" соеденил два скетча. В одном из них включается лампочка при обнаружении движения через 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);
}
И еще вопрос. Возможно ли подключить Arduino Mega 2560 к планшету с OTG? Планирую собрать небольшую программу через App Inventor
Так вот вопросы. Возможно ли отключать PIR датчик программным путем? Если нет, то как можно управлять светом в ручном режиме и через датчик движения?
А зачем его отключать? Его можно просто не опрашивать
Так вот вопросы. Возможно ли отключать PIR датчик программным путем? Если нет, то как можно управлять светом в ручном режиме и через датчик движения?
А зачем его отключать? Его можно просто не опрашивать
Подскажите пожалуйста, как это можно сделать?
Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика
Подскажите пожалуйста, как это можно сделать?
Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика
Ну, можно как-то так:
// если ручное управление не используется, то directControl установлен в false if (!directControl) //Если обнаружено движение if(digitalRead(pirPin) == HIGH) { // bla-bla codeА вообще - надо расписать сценарий, как где что происходит - и по нему и писать программу (т.е. сценарий раскладывается на блок-схему, а по ней и пишется программа)
Подскажите пожалуйста, как это можно сделать?
Тоесть мне нужно, чтобы я в любой момент смог отключить опрос датчика и в любой момент включить опрос датчика
Ну, можно как-то так:
// если ручное управление не используется, то directControl установлен в false if (!directControl) //Если обнаружено движение if(digitalRead(pirPin) == HIGH) { // bla-bla codeОбъясните пожалуйста поподробнее, а тоя новичок, только начал разбираться.
А это - для самостоятельной работы, разобраться как и что