Датчик направления движения.
- Войдите на сайт для отправки комментариев
Всем доброго дня.
Представляю вам вот такой эксперимент.
ИК датчик присутствия с определением направления движения объекта.
Устройство состоит из двух вот таких цифровых ИК датчиков (не дальномеров).
Дальность такого датчика не более десяти сантиметров, но для экспериментов пойдет.

Накидал вот такую программку.
bool flag=0;
bool flag2=0;
bool state=0;
bool state2=0;
int val=0;
void setup()
{
Serial.begin(9600);
pinMode(A0,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A1,OUTPUT);
}
void loop()
{
if(!digitalRead(9)&&!flag)
{
delay(50);
flag=1;
if(flag2==0)
{
state=1;
}
}
if(!digitalRead(12)&&!flag2)
{
delay(50);
flag2=1;
if(flag==0)
{
state2=1;
}
}
if(digitalRead(12)&&digitalRead(9))
{
if(!flag||!flag2)
{
state=0;
state2=0;
flag=0;
flag2=0;
}
if(flag&&state2)
{
val++;
digitalWrite(A0,HIGH);
digitalWrite(A2,LOW);
delay(100);
digitalWrite(A0,LOW);
digitalWrite(A2,LOW);
flag=0;
flag2=0;
state2=0;
}
if(flag2&&state)
{
val--;
digitalWrite(A2,HIGH);
digitalWrite(A0,LOW);
delay(100);
digitalWrite(A2,LOW);
digitalWrite(A0,LOW);
flag=0;
flag2=0;
state=0;
}
}
if(val<=0)
{
digitalWrite(A1,LOW);
}
else
{
digitalWrite(A1,HIGH);
}
Serial.println(val);
}
Алгоритм примерно такой. Когда на одном из датчиков появляется низкий уровень (датчики инверсные), переменной flag присваивается значение 1 . В то же время переменной state присваивается значение 1 .
Тем самым программа блокирует изменение второй переменной flag.
Когда сигнала на датчиках нет , но есть изменения в значениях state и state2 , программа совершает Определенные действия. В данном случае мигает светодиодами (когда значение val>0 включает средний светодиод), прибавляет/отнимает еденицу к переменной val и выводит ее значение на монитор.
Для того чтобы значение val изменилось должны сработать оба датчика. Программа игнорирует срабатывание только одного датчика и сбрасывает переменные в ноль.
Вобщем срабатывают оба датчика , программа выясняет какой из них раньше и исключает срабатывание одного датчика.
Вот видео эксперимента http://video.mail.ru/mail/heruvim219/5/30.html .
А вот тот же эксперимент , но с более "Дальнобойными" датчиками http://video.mail.ru/mail/heruvim219/5/33.html .
Здравствуйте!
Хочу реализовать подсчет кол-во вошедших и вышедших людей из комнаты с ИК светодиодными датчиками. Подойдет ли для этого вот такой ИК светодиод: http://arduino-kit.ru/catalog/id/modul-ik-svetodioda
Слышал еще про TSOP. Что лучше для этой цели?
Всем привет, я наконецто реализовал этот проект, вот тут смотрите: https://youtu.be/vbfXED8Dfuk
скетчи давай
Так под видео есть же сцылки. :)
есть правила раздела "проекты".
Там есть требование выкладывать текст скетча сюда.
Что нам обсуждать? где нам обсуждать? на ютюбе?
Что я узнал из конкретно этой темы? если ничего - давайте её удалим.
Ок. Позже выложу.
есть правила раздела "проекты".
Там есть требование выкладывать текст скетча сюда.
Что нам обсуждать? где нам обсуждать? на ютюбе?
Что я узнал из конкретно этой темы? если ничего - давайте её удалим.
dmitron1036, поделитесь ссылочкой пожалуйста, всегда хотел почитать правила раздела "проекты". Особенно интересно найти в них "требование выкладывать текст скетча сюда".
скетчи давай
Вот для arduino pro mini:
// предназначен для использования с ИК фотоприемниками HL536AA3P // Внимание!!! не все современные ИК фотоприемники могут постоянно удерживать состояние LOW на выходе //при непрерывном облучении ИК излучением с их несущей частотой, такие ИК ФП не подойдут. #include <Arduino.h> #include <TM1637Display.h> #define CLK 3 #define DIO 2 TM1637Display display(CLK, DIO); const int ledPin_1 = 4; // ИК света-диод 1 const int ledPin_3 = 5;// индикация сработки ик луча 1 orange const int ledPin_4 = 6;// индикация сработки ик луча 2 red long counts; //количество людей в помещении int ledPin_6 = 7; // реле пин int IN_IR_1 = 9; // вход ИК фото-приемника 1 int IN_IR_2 = 8; // вход ИК фото-приемника 2 int State; //састоянии для алгоритма, определяющего направление движения char Send_serial; // для однакратной отправки буквы в сериал порт void setup() { pinMode(ledPin_1, OUTPUT); pinMode(IN_IR_1, INPUT); pinMode(IN_IR_2, INPUT); pinMode(ledPin_3, OUTPUT); pinMode(ledPin_4, OUTPUT); pinMode(ledPin_6, OUTPUT); counts = 0; Serial.begin(9600); Send_serial = 'b'; } void loop() { tone(ledPin_1, 36000); //36кГц частота с каторой работает ИК фота - приемник по даташиту на HL536AA3P 36 кГц if(digitalRead(IN_IR_1) == LOW) { // индикация работы ИК луча 1, если не пересечен то светадиод ledPin_3 светит, иначе не светит digitalWrite(ledPin_3, HIGH); }else{ digitalWrite(ledPin_3, LOW); } if(digitalRead(IN_IR_2) == LOW) { // индикация работы ИК луча 2, если не пересечен то светадиод ledPin_4 светит, иначе не светит digitalWrite(ledPin_4, HIGH); }else{ digitalWrite(ledPin_4, LOW); } //////////////Алгоритм опредиляющий направление движения///////////// if(digitalRead(IN_IR_1) == LOW && digitalRead(IN_IR_2) == LOW) State = 0; if(digitalRead(IN_IR_1) == HIGH && digitalRead(IN_IR_2) == LOW && State == 0) State = 1; if(digitalRead(IN_IR_2) == HIGH && digitalRead(IN_IR_1) == LOW && State == 1) State = 2; //1 человек вошел if(digitalRead(IN_IR_2) == HIGH && digitalRead(IN_IR_1) == LOW && State == 0) State = 4; if(digitalRead(IN_IR_1) == HIGH && digitalRead(IN_IR_2) == LOW && State == 4) State = 5; // 1 человек вышел if (State == 2) { counts = counts +1; State = 0; } if (State == 5) { counts = counts -1; State = 0; } if(counts > 0){ digitalWrite(ledPin_6, HIGH); if(Send_serial == 'b'){ Serial.println('a');//для отправки wi fi модулю, команда на включения Send_serial = 'a'; } } if(counts <= 0) { digitalWrite(ledPin_6, LOW); if(Send_serial == 'a'){ Serial.println('b');//для отправки wi fi модулю, команда на выключения Send_serial = 'b'; } } if(counts < 0) counts = 0; //обнуляем отрицательные значения количества uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; display.setBrightness(0x0f); display.showNumberDec(counts, false, 4, 0); //выводим колличество человек на дисплэй. //Serial.print("counts: "); //Serial.println(counts); }для версии с wi fi ДУ сектчь для самого модуля esp8266 esp-01:
#include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; int incomingByte = 0; void setup() { USE_SERIAL.begin(9600); USE_SERIAL.println('1'); USE_SERIAL.println('2'); USE_SERIAL.println('3'); WiFiMulti.addAP("ваш ssid роутера", "пароль от роутера"); } void loop() { if((WiFiMulti.run() == WL_CONNECTED)) { USE_SERIAL.println("WIFi_connected"); HTTPClient http; if(Serial.available() > 0) incomingByte = Serial.read(); if(incomingByte == 'a'){ USE_SERIAL.println('a'); http.begin("http://192.168.0.128:2010/?PIN8=on"); //HTTP прямая ссылка на включение нагрузки arduino pin web server } if(incomingByte == 'b'){ USE_SERIAL.println('b'); http.begin("http://192.168.0.128:2010/?PIN8=off"); //HTTP прямая ссылка на выключение нагрузки arduino pin web server } int httpCode = http.GET(); if(httpCode > 0) { // HTTP header has been send and Server response header has been handled USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); USE_SERIAL.println(payload); } } else { USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } delay(100); }Еще раз настоятельно уверяю - не все ИК фотоприемники подайдут т.к. не все могут удерживать непреривно на выходе низкий уровень, при непреривном облучении ИК излучением с несущей частотой. У некоторых фотоприемников есть ограничение не только по несущей частоте но и по частоте передачи данных, она должна быть в определенном деапозоне например от 1 до 3 кГц, это значит такой фотоприемник не подайдет, он на выход может только в импульсном режиме выводить информацию. Если вы все же собрали устройство с неподходящими Ик ФП то света-диоды индикации работы датчиков не будут светится, при облучении ИК ФП.
Схемма :
esp8266 esp-01 в wi-fi сетях с кодированием (WPA2) работает?
антенку внешнюю подключить можно?
esp8266 esp-01 в wi-fi сетях с кодированием (WPA2) работает?
ESP8266 работает с WEP, WPA, WPA2, WPA+WPA2
антенку внешнюю подключить можно?
К esp-01 нет. Антеннки цепляются к esp-02, esp-05, esp-07 у которых есть разъем IPX для внешней антенны.
как точка доступа esp8266 работать может?
как точка доступа esp8266 работать может?
Да. А вообще зависит многое от прошивки, но точку доступа на любой поддерживает. На оригинальной AT прошивке например можно создать только tcp/ udb сервер/клиент, не подлерживает http протакол, а если ардуинить прямо в модуль то тут много интересных протаколов / сервисов.
как точка доступа esp8266 работать может?
Может даже одновременно и точкой доступа и клиентом работать.
Можете пожалуйста розьяснить как это собрать. И что для этого нужно заранее спасибо