
Техника
Python и ардуино. Проблема с передачей уведомления на почту
Всем привет. Проблема такая: есть Arduino uno и датчик движения Pir. Я их соединил, залил скетч в ардуино и запрограммировал в Python прогу. Цель - при движении датчик должен среагировать, передать данные на ардуино, а ардуинно через пк интернет должно отправить уведомление мне на gmail почту, что якобы датчик среагировал. Только вот 2 нюанса - во первых чтобы мне глянуть монитор порта в ардуино, мне нужно закрыть cmd, а во вторых вот на скрине, при отправке команды начиная c python С: / ...мне показывают мой адрес и приходит уведомление что датчик сработал, хотя мимо него движения не было. И отправляет данные один раз, а когда проходишь мимо датчика больше вообще ничего не отправляет. Подскажите в чем проблема в проге записанной в Python или в скетче ардуино, по просьбе скетч и прогу могу предоставить. Выручайте плиз


Когда в зоне чувствительности датчика появится объект, Arduino передаст сигнал с помощью серийного протокола связи через USB порт. При этом возникает небольшая проблема. Если делать все "в лоб", Arduino будет генерировать кучу email'ов. В программе эта проблема решена следующим образом: если промежуток времени между сигналами слишком короткий, микроконтроллер генерирует другое сообщение и письмо не будет отправляться.
int pirPin = 7;
int minSecsBetweenEmails = 60; // 1 минута
long lastSend = -minSecsBetweenEmails * 1000l;
void setup()
{
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop()
{
long now = millis();
if (digitalRead(pirPin) == HIGH)
{
if (now > (lastSend + minSecsBetweenEmails * 1000l))
{
Serial.println("MOVEMENT");
lastSend = now;
}
else
{
Serial.println("Too soon");
}
}
delay(500);
}
Переменную “minSecsBetweenEmails” вы можете смело менять в соответствии с вашими потребностями. Тут она выставлена на 60 секунд, то есть email 'ы будут отправляться не чаще чем раз в 60 секунд.
Для отслеживания времени, когда был отправлен предыдущий email, используется переменная “lastSend”. Она инициализируется как отрицательное число, равное количеству миллисекунд, указанных в переменной “minSecsBetweenEmails” со знаком минус. Благодаря этому ПИР датчик движения может отрабатывать сразу после запуска скетча, без задержки в 1 минуту.
Внутри цикла используется функция “millis()”. Благодаря ее использованию мы получаем значение времени, которое прошло с момента запуска Arduino. Полученное значение сравнивается со временем с момента последней передачи сигнала. Если это значение больше установленных нами 60 секунд, отсылается сообщение “MOVEMENT”. В любом другом случае, даже при наличии движения, будет отправляться сообщение “Too soon”.
Перед тем как приступить к программированию на Python, можете провести проверку вашей системы. Для этого подключите Arduino и загрузите серийный монитор.
int pirPin = 7;
int minSecsBetweenEmails = 60; // 1 минута
long lastSend = -minSecsBetweenEmails * 1000l;
void setup()
{
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop()
{
long now = millis();
if (digitalRead(pirPin) == HIGH)
{
if (now > (lastSend + minSecsBetweenEmails * 1000l))
{
Serial.println("MOVEMENT");
lastSend = now;
}
else
{
Serial.println("Too soon");
}
}
delay(500);
}
Переменную “minSecsBetweenEmails” вы можете смело менять в соответствии с вашими потребностями. Тут она выставлена на 60 секунд, то есть email 'ы будут отправляться не чаще чем раз в 60 секунд.
Для отслеживания времени, когда был отправлен предыдущий email, используется переменная “lastSend”. Она инициализируется как отрицательное число, равное количеству миллисекунд, указанных в переменной “minSecsBetweenEmails” со знаком минус. Благодаря этому ПИР датчик движения может отрабатывать сразу после запуска скетча, без задержки в 1 минуту.
Внутри цикла используется функция “millis()”. Благодаря ее использованию мы получаем значение времени, которое прошло с момента запуска Arduino. Полученное значение сравнивается со временем с момента последней передачи сигнала. Если это значение больше установленных нами 60 секунд, отсылается сообщение “MOVEMENT”. В любом другом случае, даже при наличии движения, будет отправляться сообщение “Too soon”.
Перед тем как приступить к программированию на Python, можете провести проверку вашей системы. Для этого подключите Arduino и загрузите серийный монитор.
Алексей Чуйков
Разобрался, суть вообще была в том что в скетче питона подпрограммы не были отступлены, следовательно отправка уведомления была произведена лишь раз!
Похожие вопросы
- А почему Ардуино ужасно популярно, а обычные ATmega микроконтроллеры - нет? Ардуино стоит 2500, а AtMega 150 рублей.
- Ардуино, шаговые двигатели
- Вендинговый аппарат на ардуино
- ПОМОГИТЕ ПОЖАЛУЙСТА начинаю программирование ардуино
- Деление float возвращает только 2 знака после запятой ардуино.
- Можно ли на Ардуино собрать действительно что-то дельное для дома? (внутр продолжение)
- Вопрос по ардуино
- Ардуино: можно ли подавать 12 вольт на пин прерывания ардуино нано или нужно строго 5 вольт?
- Помощь с ардуино!
- в квадрокоптерах используется Ардуино или потобные микроконтроллеры?