Привет всем!кто может помочь мне решить проблему? есть две комнаты в которых нужно поставить по датчику присуцтвия что бы включался и выключался свет автоматом. Я нашел вот такую схему,ну она на один датчик и одну лампочку вот скетч на эту схему: Код (C++): //Тестировалось на Arduino IDE 1.0.1 //Время калибровки датчика (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 ledPin = 13; //вывод сигнального диода int relayPin = 4; //реле пин void setup() { pinMode(pirPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(relayPin, OUTPUT); //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW digitalWrite(relayPin, HIGH); delay(4000); digitalWrite(pirPin, LOW); //дадим датчику время на калибровку for(int i = 0; i < calibrationTime; i++) { //Во время калибровки будет мигать сигнальный диод i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW); delay(1000); } //По окончанию калибровки зажжем сигнальный диод digitalWrite(ledPin, HIGH); delay(50); } void loop() { //Если обнаружено движение if(digitalRead(pirPin) == HIGH) { //Если до этого момента еще не включили реле if(lockLow) { lockLow = false; //Включаем реле. //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH digitalWrite(relayPin, LOW); delay(50); } takeLowTime = true; } //Ели движения нет if(digitalRead(pirPin) == LOW) { //Если время окончания движения еще не записано if(takeLowTime) { lowIn = millis(); //Сохраним время окончания движения takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения } //Если время без движение превышает паузу => движение окончено if(!lockLow && millis() - lowIn > pause) { //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения lockLow = true; digitalWrite(relayPin, HIGH); delay(50); } } } как изменить скетч под мою затею?
разберитесь как работает данный скетч. Думаю не составит большего труда добавить туда датчик движения и рэле.
Смотрел только схемку и начало кода У вас на пине 2 ждется сигнал от датчика, на 4 выдается сигнал на реле включения света. Цепляете еще такие же датчик (например на пин 3) и реле с лампой (например на пин 5) и вносите не значительные изменения в код: Естественно надо будет где то хранить сигнал отсутствия движения для КАЖДОГО датчика. Ну и написать блок для новых пинов по аналогии
...и поэкспериментировать с максимальной длинной проводов к датчику, при которой эта схема стабильно работает.