Датчик направления движения.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

 

Всем доброго дня.

Представляю вам вот такой эксперимент. 

ИК датчик присутствия с определением направления движения объекта.

Устройство состоит из двух вот таких цифровых ИК датчиков (не дальномеров).

Дальность такого датчика не более десяти сантиметров, но для экспериментов пойдет.

 

Накидал вот такую программку. 

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 изменилось должны сработать оба датчика. Программа игнорирует срабатывание только одного датчика и сбрасывает переменные в ноль.

Вобщем срабатывают оба датчика , программа выясняет какой из них раньше и исключает срабатывание одного датчика.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Вот видео эксперимента http://video.mail.ru/mail/heruvim219/5/30.html .

А вот тот же эксперимент , но с более "Дальнобойными" датчиками http://video.mail.ru/mail/heruvim219/5/33.html .

Sherzod
Offline
Зарегистрирован: 17.04.2016

Здравствуйте!

Хочу реализовать подсчет кол-во вошедших и вышедших людей из комнаты с ИК светодиодными датчиками. Подойдет ли для этого вот такой ИК светодиод: http://arduino-kit.ru/catalog/id/modul-ik-svetodioda

Слышал еще про TSOP. Что лучше для этой цели?

krepton85
Offline
Зарегистрирован: 02.02.2016

Всем привет, я наконецто реализовал этот проект, вот тут смотрите: https://youtu.be/vbfXED8Dfuk

dmitron1036
Offline
Зарегистрирован: 10.01.2016

скетчи давай

krepton85
Offline
Зарегистрирован: 02.02.2016

Так под видео есть же сцылки. :)

dmitron1036
Offline
Зарегистрирован: 10.01.2016

есть правила раздела "проекты".

Там есть требование выкладывать текст скетча сюда.

Что нам обсуждать? где нам обсуждать? на ютюбе?

Что я узнал из конкретно этой темы? если ничего - давайте её удалим.

krepton85
Offline
Зарегистрирован: 02.02.2016

Ок. Позже выложу.

Araris
Araris аватар
Offline
Зарегистрирован: 09.11.2012

dmitron1036 пишет:

есть правила раздела "проекты".

Там есть требование выкладывать текст скетча сюда.

Что нам обсуждать? где нам обсуждать? на ютюбе?

Что я узнал из конкретно этой темы? если ничего - давайте её удалим.

dmitron1036, поделитесь ссылочкой пожалуйста, всегда хотел почитать правила раздела "проекты". Особенно интересно найти в них "требование выкладывать текст скетча сюда".

krepton85
Offline
Зарегистрирован: 02.02.2016

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 кГц, это значит такой фотоприемник не подайдет, он на выход может только в импульсном режиме выводить информацию. Если вы все же собрали устройство с неподходящими Ик ФП то света-диоды индикации работы датчиков не будут светится, при облучении ИК ФП.

Схемма : 

 

dmitron1036
Offline
Зарегистрирован: 10.01.2016

esp8266 esp-01 в wi-fi сетях с кодированием (WPA2) работает?

антенку внешнюю подключить можно?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

dmitron1036 пишет:

esp8266 esp-01 в wi-fi сетях с кодированием (WPA2) работает?

ESP8266 работает с WEP, WPA, WPA2, WPA+WPA2

dmitron1036 пишет:

антенку внешнюю подключить можно?

К esp-01 нет. Антеннки цепляются к esp-02, esp-05, esp-07 у которых есть разъем IPX для внешней антенны.

dmitron1036
Offline
Зарегистрирован: 10.01.2016

как точка доступа esp8266 работать может?

krepton85
Offline
Зарегистрирован: 02.02.2016

dmitron1036 пишет:

как точка доступа esp8266 работать может?


Да. А вообще зависит многое от прошивки, но точку доступа на любой поддерживает. На оригинальной AT прошивке например можно создать только tcp/ udb сервер/клиент, не подлерживает http протакол, а если ардуинить прямо в модуль то тут много интересных протаколов / сервисов.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

dmitron1036 пишет:

как точка доступа esp8266 работать может?

Может даже одновременно и точкой доступа и клиентом работать.

Craftman
Offline
Зарегистрирован: 14.03.2018

Можете пожалуйста розьяснить как это собрать. И  что для этого нужно заранее спасибо