Фоторезистор плюс PIR
- Войдите на сайт для отправки комментариев
Здраствуйте. Пытаюсь собрать датчик движения на Arduino Nano, фоторезистор, PIR HC-SR501 и реле для ардуино.
Цель сделать что бы реле включалось только когда темно, в сети нашел скетчи примеры для работы с реле, PIR и фоторезистор и все это как смог объеденил воедино. Впринципе получился работоспособный скетч, но работает не много не так как хотелось бы. Сейчас он работает так: Считывает показания с PIR и если есть движение, то проверяется темно ли и если темно то включается реле, но если станет светло реле тут же отключается. И так может бесконечно пока идет сигнал движения с датчика движения.
А вот как переделать что бы сначало проверялось темно ли, а потом в зависимости от показаний PIR включалось реле, не могу...
Хотелось бы что бы когда темно реле включалось от показаний PIR и если станет светло не отключалось пока идет сигнал с датчика движения.
int ledPin = 13; // инициализируем пин для светодиода int ldr = 0; // фоторезистора int inputPin = 2; // инициализируем пин для получения сигнала от пироэлектрического датчика движения int relePin = 4; int pirState = LOW; // начинаем работу программы, предполагая, что движения нет int releState = LOW; int val = 0; // переменная для чтения состояния пина void setup() { pinMode(ledPin, OUTPUT); // объявляем светодиод в качестве OUTPUT pinMode(inputPin, INPUT); // объявляем датчик в качестве INPUT pinMode(relePin, OUTPUT); Serial.begin(9600); } void loop(){ val = digitalRead(inputPin) ; // считываем значение с датчика if (val == HIGH && (analogRead(ldr) < 300)) { // проверяем, соответствует ли считанное значение HIGH digitalWrite(ledPin, HIGH); // включаем светодиод digitalWrite(relePin, LOW); delay (1000); if (pirState == LOW) { // мы только что включили Serial.println("Motion detected!"); // мы выводим на серийный монитор изменение, а не состояние pirState = HIGH; } } else { digitalWrite(ledPin, LOW); // выключаем светодиод digitalWrite(relePin, HIGH); if (pirState == HIGH){ // мы только что его выключили Serial.println("Motion ended!"); // мы выводим на серийный монитор изменение, а не состояние pirState = LOW; } } }
В программировании полный ноль((
Спасибо всем.
Хотелось бы что бы когда темно реле включалось от показаний PIR и если станет светло не отключалось пока идет сигнал с датчика движения.
Сами поняли чего написали ? я нет, растолкуйте.
Здраствуйте. Пытаюсь собрать датчик движения на Arduino Nano, фоторезистор, PIR HC-SR501 и реле для ардуино.
Пытался понять, что делает твое устройство, но не понял.
Я делал похожее устройство, которе сейчас исправно работает, вот ссылка http://arduino.ru/forum/programmirovanie/khochu-posmotret-vo-chto-prevratyat-moi-kod-professionaly.
Код я потом дописывал по советам бывалых, но на работоспособность еще не проверял. Прилагаю измененный код:
Все, что связано с экраном можешь спокойно удалять, просто моя плата или ее хозяин не умеет с монитором порта общаться.
Есть одна бага (я так изначально не задумывал), которую я считаю фичей: если у тебя начинает гаснуть лента, но датчик движения в это время сработал, то она снова набирает яркость. Знаю как это устранить, но мне так больше нравится.
реле воткнешь в нужную часть кода.
Я имею ввиду следующие. Когда при показаниях фоторезистора темно реле включалось от показаний датчика движения, сигнал движения идет например 15 секунд и если в этом промежуток времени станет светло надо что бы реле не отключалась.
Определил - темно+сработка датчика. Следующее определение темно-светло после выключения света.
Или - запрещено определять темно-светло пока включен свет.
Так вот как это в коде написать я не могу додуматься
digitalRead (pinSvet); вставляем в if и смотрим, надо проверять на темно-светло или нет.
Задача совершенно элементарная: у нас два внешних условия:
- движение / нет движения,
- светло / темно.
И одно внутреннее состояние:
- свет горит / не горит.
Очевидно, что изменение внутреннего состояния нужно синхронмизировать с изменением внешнего, а для этого его нужно хранить в переменной.
Очевидно, что есть 4-х внешних комбинации:
1. движение, светло.
2. движение, темно.
3. нет движения, светло.
4. нет движения, темно.
это дает 12 возможных переходов (расписывать лень).
остается лишь посадить на нужные переходы нужные варианты реакции, а остальные игнорировать.
Все это пишется в одну строчку. Точнее, в две: одну на включение и одну на выключение.
Задача действительно элементарная - впаять фоторезистор в предназначенное для него место в SR-501. После этого он(PIR-сенсор) будет выдавать сигнал об обнаружении движения только в темноте. У меня таким образом работает ночная подсветка на Tiny13 и светодиодах.
Я не спорю что элементарная, но для меня это сложно, можете сказать какую строчку добавить что бы что бы включение и выключение реле работало только когда темно.
Я так понимаю надо перед строкой 23 добавить строчку которая бы проверяла темно ли или нет, и если темно то выполняла строки ниже, светло пропускала
Тут нужно не добавлять строчку, а переписывать все с нуля.
Мне кажется, в этом и есть Ваша проблема: Вы сами не знаете, что Вам нужно.
По логике, как Вы описали, оно в принципе никогда не сможет выключиться, т.к. при включенном свете никогда не будет темно.
Ну да проще унизить автора чем, какая цель тогда этого форума. мне надо что бы ночью ардуино включало свет когда движение есть, а когда день не реагировало. Спасибо всем за помощь.
Есть свет - обесточили датчик движения, нет - запитали. И ардуины не нужно.
Насколько знаю, на самой плате датчика движения есть места, где не установленны радиодетали, что бы учитывать наличие освещения. И снова ардуина не нужна.
"
// начинаем работу программы, предполагая, что движения нет" -
//
начинайте работу программы выяснив, если ли свет. И только убедившись, что его нет, идти дальше . Думаю будет попроще.1
Ардуино нужно что бы реле включать, на прямую от датчика не работает
Поправьте грамматику постом выше, читается весело.
Кто напрямую от датчика не работает?
Почитайте о назначении вывода 9 в микросхеме этого датчика.
Кто напрямую от датчика не работает?
Реле для ардуино не работает на прямую от датчика PIR.
А в ардуино можно разделить void loop на две части? Что бы когда первая часть была "верна" выполнялась вторая часть.
Для этого можно применить оператор IF.
Не уверен, что нельзя заставить реле для ардуины, работать не от ардуины.
А в ардуино можно разделить void loop на две части? Что бы когда первая часть была "верна" выполнялась вторая часть.
УПС, а функции уже отменили?
Я не знаю языка совсем, есть статьи по функциям хорошие?
добавил if (analogRead (ldr)<300) перед всем, да вроде бы как надо, темно появилось движение реле включилось и пока идет сигнал с датчика движения не тухнет, но когда сигнал с PIR пропал потухнет только когда станет темно. А если реле будет вкл свет, то получается никогда он не потухнет
Прожиточный минимум здесь
Значит меняйте логику работы. Ищите движение и после его обнаружения проверяйте наличие света. Или датчик света выносите подальше от лампы, что бы не засвечивался.
А язык, хотя бы примитивно, изучить придётся. Как же иначе ардуиной командовать?
Изучайте, задача не кажется сложной.
у меня в шапке как раз такая логика как Вы написали, но в даном случае если становится светло реле сразу отклчается. И в итоге будет свет включился фоторезистор засветился, свет выключился стало темно и опять свет вкл и так пока идет сигнал с PIR
Кстати. Если включили свет, то можно и не заниматься проверкой его величины, пока свет включен. Вот когда погасите лампу, лишь когда начинайте снова проверять уровень освещённости.
А разве свет включают не на какой то промежуток времени (дойти до двери)?
Вот именно это я и хочу узнать как сделать) функцией воспользоваться нужно какой либо?
Длительность сигнала с RIP можно регулировать (подстроечным резистором). Сделайте сигнал коротким, а время свечения продолжительнее.
"Какую либо" функцию Вы напишите сами, когда освоите, хотя бы, пять...семь операторов.
Не научившись ходить, бегать не научишься.
данной базы хватит? http://arduino.ru/Reference
данной базы хватит? http://arduino.ru/Reference
Этого достаточно для тех, кто умеет программировать, но этого совершенно недостаточно, чтобы научиться программировать.
Поищите как: http://boteon.com/upload/files/b89a840d561f471188d443b8e68b308b.pdf
http://boteon.com/upload/files/9656deb6c0b61d212f3a19909c2cc029.pdf
Спасибо
Попробовал исправить Ваш код. Проверяйте:
Реле для ардуино не работает на прямую от датчика PIR.
Неправда, работает.
Свою мечту я осуществил как смог, да может тупо, не красиво, не правильно, но как смог так и сделал и работает так как я и хотел.
Вот что у меня получилось.
Спасибо всем кто помог идиоту т.е. мне)
И подскажите пожалуйста как прятать под спойлер)
Когда вставляете код, вкладка "дополнительно", "свернуть".