Датчик направления движения.
- Войдите на сайт для отправки комментариев
Всем доброго дня.
Представляю вам вот такой эксперимент.
ИК датчик присутствия с определением направления движения объекта.
Устройство состоит из двух вот таких цифровых ИК датчиков (не дальномеров).
Дальность такого датчика не более десяти сантиметров, но для экспериментов пойдет.
Накидал вот такую программку.
001 | bool flag=0; |
002 | bool flag2=0; |
003 | bool state=0; |
004 | bool state2=0; |
005 |
006 | int val=0; |
007 |
008 | void setup () |
009 | { |
010 | Serial .begin(9600); |
011 | pinMode(A0,OUTPUT); |
012 | pinMode(A2,OUTPUT); |
013 | pinMode(A1,OUTPUT); |
014 | |
015 | } |
016 |
017 | void loop () |
018 |
019 | { |
020 | |
021 | |
022 | |
023 | if (!digitalRead(9)&&!flag) |
024 | { |
025 | delay(50); |
026 | |
027 | flag=1; |
028 | if (flag2==0) |
029 | { |
030 | state=1; |
031 | } |
032 | |
033 | } |
034 | |
035 | if (!digitalRead(12)&&!flag2) |
036 | { |
037 | delay(50); |
038 | |
039 | flag2=1; |
040 | if (flag==0) |
041 | { |
042 | state2=1; |
043 | } |
044 | |
045 | } |
046 | |
047 | |
048 | |
049 | |
050 | |
051 | |
052 | if (digitalRead(12)&&digitalRead(9)) |
053 | { |
054 | |
055 | if (!flag||!flag2) |
056 | { |
057 | state=0; |
058 | state2=0; |
059 | flag=0; |
060 | flag2=0; |
061 | } |
062 | |
063 | |
064 | if (flag&&state2) |
065 | { |
066 | val++; |
067 | digitalWrite(A0,HIGH); |
068 | digitalWrite(A2,LOW); |
069 | delay(100); |
070 | digitalWrite(A0,LOW); |
071 | digitalWrite(A2,LOW); |
072 | |
073 | |
074 | |
075 | flag=0; |
076 | flag2=0; |
077 | state2=0; |
078 | |
079 | } |
080 | |
081 | |
082 | if (flag2&&state) |
083 | { |
084 | val--; |
085 | digitalWrite(A2,HIGH); |
086 | digitalWrite(A0,LOW); |
087 | delay(100); |
088 | digitalWrite(A2,LOW); |
089 | digitalWrite(A0,LOW); |
090 | |
091 | |
092 | flag=0; |
093 | flag2=0; |
094 | state=0; |
095 | |
096 | } |
097 | } |
098 | if (val<=0) |
099 | { |
100 | digitalWrite(A1,LOW); |
101 | |
102 | } |
103 | |
104 | else |
105 | { |
106 | digitalWrite(A1,HIGH); |
107 | } |
108 | |
109 | |
110 | Serial .println(val); |
111 | } |
Алгоритм примерно такой. Когда на одном из датчиков появляется низкий уровень (датчики инверсные), переменной 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:
01
// предназначен для использования с ИК фотоприемниками HL536AA3P
02
// Внимание!!! не все современные ИК фотоприемники могут постоянно удерживать состояние LOW на выходе
03
//при непрерывном облучении ИК излучением с их несущей частотой, такие ИК ФП не подойдут.
04
05
#include <Arduino.h>
06
#include <TM1637Display.h>
07
#define CLK 3
08
#define DIO 2
09
TM1637Display display(CLK, DIO);
10
11
const
int
ledPin_1 = 4;
// ИК света-диод 1
12
13
const
int
ledPin_3 = 5;
// индикация сработки ик луча 1 orange
14
const
int
ledPin_4 = 6;
// индикация сработки ик луча 2 red
15
long
counts;
//количество людей в помещении
16
17
int
ledPin_6 = 7;
// реле пин
18
int
IN_IR_1 = 9;
// вход ИК фото-приемника 1
19
int
IN_IR_2 = 8;
// вход ИК фото-приемника 2
20
21
int
State;
//састоянии для алгоритма, определяющего направление движения
22
char
Send_serial;
// для однакратной отправки буквы в сериал порт
23
void
setup
() {
24
25
pinMode(ledPin_1, OUTPUT);
26
27
pinMode(IN_IR_1, INPUT);
28
pinMode(IN_IR_2, INPUT);
29
pinMode(ledPin_3, OUTPUT);
30
pinMode(ledPin_4, OUTPUT);
31
pinMode(ledPin_6, OUTPUT);
32
counts = 0;
33
Serial
.begin(9600);
34
Send_serial =
'b'
;
35
}
36
void
loop
() {
37
tone(ledPin_1, 36000);
//36кГц частота с каторой работает ИК фота - приемник по даташиту на HL536AA3P 36 кГц
38
39
if
(digitalRead(IN_IR_1) == LOW) {
// индикация работы ИК луча 1, если не пересечен то светадиод ledPin_3 светит, иначе не светит
40
digitalWrite(ledPin_3, HIGH);
41
}
else
{
42
digitalWrite(ledPin_3, LOW);
43
}
44
45
if
(digitalRead(IN_IR_2) == LOW) {
// индикация работы ИК луча 2, если не пересечен то светадиод ledPin_4 светит, иначе не светит
46
digitalWrite(ledPin_4, HIGH);
47
}
else
{
48
digitalWrite(ledPin_4, LOW);
49
}
50
//////////////Алгоритм опредиляющий направление движения/////////////
51
52
if
(digitalRead(IN_IR_1) == LOW && digitalRead(IN_IR_2) == LOW) State = 0;
53
54
if
(digitalRead(IN_IR_1) == HIGH && digitalRead(IN_IR_2) == LOW && State == 0) State = 1;
55
if
(digitalRead(IN_IR_2) == HIGH && digitalRead(IN_IR_1) == LOW && State == 1) State = 2;
//1 человек вошел
56
57
58
if
(digitalRead(IN_IR_2) == HIGH && digitalRead(IN_IR_1) == LOW && State == 0) State = 4;
59
if
(digitalRead(IN_IR_1) == HIGH && digitalRead(IN_IR_2) == LOW && State == 4) State = 5;
// 1 человек вышел
60
61
62
if
(State == 2) {
63
counts = counts +1;
64
65
State = 0;
66
}
67
68
if
(State == 5) {
69
counts = counts -1;
70
71
State = 0;
72
}
73
74
if
(counts > 0){
75
digitalWrite(ledPin_6, HIGH);
76
if
(Send_serial ==
'b'
){
77
Serial
.println(
'a'
);
//для отправки wi fi модулю, команда на включения
78
Send_serial =
'a'
;
79
}
80
}
81
if
(counts <= 0) {
82
digitalWrite(ledPin_6, LOW);
83
if
(Send_serial ==
'a'
){
84
Serial
.println(
'b'
);
//для отправки wi fi модулю, команда на выключения
85
Send_serial =
'b'
;
86
}
87
}
88
if
(counts < 0) counts = 0;
//обнуляем отрицательные значения количества
89
90
91
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
92
display.setBrightness(0x0f);
93
94
display.showNumberDec(counts,
false
, 4, 0);
//выводим колличество человек на дисплэй.
95
//Serial.print("counts: ");
96
//Serial.println(counts);
97
}
для версии с wi fi ДУ сектчь для самого модуля esp8266 esp-01:
01
#include <Arduino.h>
02
03
#include <ESP8266WiFi.h>
04
#include <ESP8266WiFiMulti.h>
05
06
#include <ESP8266HTTPClient.h>
07
08
#define USE_SERIAL Serial
09
10
ESP8266WiFiMulti WiFiMulti;
11
int
incomingByte = 0;
12
void
setup
() {
13
14
USE_SERIAL.begin(9600);
15
USE_SERIAL.println(
'1'
);
16
USE_SERIAL.println(
'2'
);
17
USE_SERIAL.println(
'3'
);
18
WiFiMulti.addAP(
"ваш ssid роутера"
,
"пароль от роутера"
);
19
20
21
}
22
23
void
loop
() {
24
if
((WiFiMulti.run() == WL_CONNECTED)) {
25
USE_SERIAL.println(
"WIFi_connected"
);
26
HTTPClient http;
27
if
(
Serial
.available() > 0) incomingByte =
Serial
.read();
28
if
(incomingByte ==
'a'
){
29
USE_SERIAL.println(
'a'
);
30
http.begin(
"<a href="
http:
//192.168.0.128:2010/?PIN8=on" rel="nofollow">http://192.168.0.128:2010/?PIN8=on</a>"); //HTTP прямая ссылка на включение нагрузки arduino pin web server
31
}
32
if
(incomingByte ==
'b'
){
33
USE_SERIAL.println(
'b'
);
34
http.begin(
"<a href="
http:
//192.168.0.128:2010/?PIN8=off" rel="nofollow">http://192.168.0.128:2010/?PIN8=off</a>"); //HTTP прямая ссылка на выключение нагрузки arduino pin web server
35
}
36
int
httpCode = http.GET();
37
if
(httpCode > 0) {
38
// HTTP header has been send and Server response header has been handled
39
USE_SERIAL.printf(
"[HTTP] GET... code: %d\n"
, httpCode);
40
41
// file found at server
42
if
(httpCode == HTTP_CODE_OK) {
43
String payload = http.getString();
44
USE_SERIAL.println(payload);
45
}
46
}
else
{
47
USE_SERIAL.printf(
"[HTTP] GET... failed, error: %s\n"
, http.errorToString(httpCode).c_str());
48
}
49
http.end();
50
}
51
delay(100);
52
}
Еще раз настоятельно уверяю - не все ИК фотоприемники подайдут т.к. не все могут удерживать непреривно на выходе низкий уровень, при непреривном облучении ИК излучением с несущей частотой. У некоторых фотоприемников есть ограничение не только по несущей частоте но и по частоте передачи данных, она должна быть в определенном деапозоне например от 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 работать может?
Может даже одновременно и точкой доступа и клиентом работать.
Можете пожалуйста розьяснить как это собрать. И что для этого нужно заранее спасибо