Инфракрасный барьер — представляет из себя датчик, который состоит из инфракрасного источника света и инфракрасного приемника. При появлении на пути луча препятствия устройство генерирует сигнал, который можно обработать в соответствии с ситуацией.
Такой барьер можно применить, например, для подсчета чего — либо; для предупреждения о появлении какого — либо предмета в контролируемой области.
Устройство я разрабатывал на базе arduino nano v3. Мне понадобились
- Arduino nano v3
- Модуль реле
- Фотодиод
- Фототранзистор
- Обычные светодиоды и резисторы
- Понижающий преобразователь для работы схемы от 24 вольт
Я использовал промышленные светодиод и транзистор, защищенные от влаги и пыли. Но можно использовать и обычные, например, из chipdip.ru
Макет устройства
Итак, сердцем устройства является Arduino nano v3(его китайский клон). К нему подключены IR светодиод(в красном корпусе), IR фототранзистор в желтом, пара индикаторных светодиодов и модуль реле. Логику работы вы сможете посмотреть в видеоролике.
Далее прилагаю проект в easyeda.com, в котором данное устройство представлено в виде конечной печатной платы:
Изначально я предполагал, что для питания схемы от 24 вольт мне будет достаточно более мощного стабилизатора напряжения на 5 вольт. Я заменил родной AMS1117-5.0 на более мощный L78M05ABDT-TR.
Эта замена была напрасной, и в процессе работы этот стабилизатор тоже сильно грелся. Поэтому для работы схемы добавил понижающий преобразователь на входе питания.
Вот несколько фотографий устройства
Скетч для устройства
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
int count; // количество замеров для обнаружения отсутствия сигналов.
int threshold;// порог срабатывания
int informCount; //глобальная переменная для счетчика замеров.
int val;
void setup() {
// put your setup code here, to run once:
// TCCR1B = TCCR1B & 0b11111000 | 0x01;
Serial.begin(9600); // Задаем скорость обмена com-порта 9600
pinMode(10, OUTPUT);//infrared transistor
pinMode(A5, INPUT);//signal
pinMode(9, OUTPUT);//infrared diode
pinMode(8, OUTPUT);//relay
pinMode(3, OUTPUT);//power diode
pinMode(4, OUTPUT);//signal diode
count = 600;
threshold = 920;
informCount = 0;
digitalWrite(3, HIGH);
digitalWrite(10,HIGH);
}
void loop() {
informCount++;
digitalWrite(9,HIGH);
//delayMicroseconds(20);
val = analogRead(A5);
digitalWrite(9,LOW);
delay(5);
if (informCount==50)
{
Serial.print(«Signal = «);
Serial.print(val);
Serial.print(«\n»);
informCount = 0;
}
if (val<threshold) //есть сигнал
{
digitalWrite(8,HIGH);
digitalWrite(4, HIGH);
}
else //сигнал пропадает
{
for (int i=0;i<count;i++) // делаем дополнительные замеры
{
informCount++;
digitalWrite(9,HIGH);
//delayMicroseconds(100);
val = analogRead(A5);
digitalWrite(9,LOW);
delay(5);
if (informCount==50)
{
Serial.print(«Signal = «);
Serial.print(val);
Serial.print(«\n»);
informCount = 0;
}
if (val<threshold) //сигнал появился
{
digitalWrite(8,HIGH);
digitalWrite(4, HIGH);
break;
}
}
if (val>=threshold) //нет сигнала
{
digitalWrite(8,LOW);
digitalWrite(4, LOW);
//delay(10);//ждем 7 секунд
}
}
}
|