Мини модуль TCRT5000 для определения есть ли рядом объект

Исходный код программы (скетча)

Arduino

float error_correction = 3.5; //мы будем добавлять это корректировочное значение к показаниям
int Range_sensitivity = 200; //уменьшите это значение чтобы увеличить диапазон работы термометра
#include <Wire.h> //библиотека для протокола I2C
#include «MLX90615.h»
MLX90615 mlx = MLX90615();
void setup()
{
Serial.begin(9600);
delay(100);
while (! Serial);
pinMode(2,OUTPUT);
mlx.begin();
}
int Noise;
int Signal;
int Noise_P_Signal;
boolean trigger = true;
float temperature;
float pvs_temperature;
void loop()
{
digitalWrite(2,HIGH); // включаем инфракрасный светодиод
delayMicroseconds(500); // время, в течение которого инфракрасный светодиод будет находиться во включенном состоянии
Noise_P_Signal=analogRead(A7); // считываем значение с контакта A0 => noise+signal (шум + сигнал)
digitalWrite(2,LOW); // выключаем инфракрасный светодиод
delayMicroseconds(500); // время, в течение которого инфракрасный светодиод будет находиться в выключенном состоянии
Noise=analogRead(A7); // считываем значение с контакта A0 => noise only (только шум)
Signal = Noise — Noise_P_Signal;
//Serial.print(«Noise + Signal = «); Serial.println(Noise_P_Signal);
//Serial.print(«Noise =»); Serial.println(Noise);
//Serial.print («—> Signal =»); Serial.println (Signal);
//temperature = (mlx.get_object_temp()) + error_correction;
//Serial.println(temperature,1);
//delay(100);
if (Signal>Range_sensitivity && Noise >500) // уменьшаем сигнал чтобы увеличить диапазон
{
if (trigger == true)
Serial.println(«start»);
digitalWrite(2,LOW); //выключаем инфракрасный датчик чтобы предотвратить помехи
for (int i=1; i<=3; i++)
{
temperature = (mlx.get_object_temp()) + error_correction;
Serial.println(temperature,1);
delay(150);
}
trigger = false;
}
else
{
delay(100);
trigger = true;
digitalWrite(13,LOW);
Serial.println(«position_error»);
}
}

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

floaterror_correction=3.5;//мы будем добавлять это корректировочное значение к показаниям

intRange_sensitivity=200;//уменьшите это значение чтобы увеличить диапазон работы термометра

#include <Wire.h> //библиотека для протокола I2C
#include «MLX90615.h»

MLX90615mlx=MLX90615();

voidsetup()

{

Serial.begin(9600);

delay(100);

while(!Serial);

pinMode(2,OUTPUT);

mlx.begin();

}

intNoise;

intSignal;

intNoise_P_Signal;

booleantrigger=true;

floattemperature;

floatpvs_temperature;

voidloop()

{

digitalWrite(2,HIGH);// включаем инфракрасный светодиод

delayMicroseconds(500);// время, в течение которого инфракрасный светодиод будет находиться во включенном состоянии

Noise_P_Signal=analogRead(A7);// считываем значение с контакта A0 => noise+signal (шум + сигнал)

digitalWrite(2,LOW);// выключаем инфракрасный светодиод

delayMicroseconds(500);// время, в течение которого инфракрасный светодиод будет находиться в выключенном состоянии

Noise=analogRead(A7);// считываем значение с контакта A0 => noise only (только шум)

Signal=Noise-Noise_P_Signal;

//Serial.print(«Noise + Signal = «); Serial.println(Noise_P_Signal);
//Serial.print(«Noise =»); Serial.println(Noise);
//Serial.print («—> Signal =»); Serial.println (Signal);
//temperature = (mlx.get_object_temp()) + error_correction;
//Serial.println(temperature,1);
//delay(100);

if(Signal>Range_sensitivity&&Noise>500)// уменьшаем сигнал чтобы увеличить диапазон

{

if(trigger==true)

Serial.println(«start»);

digitalWrite(2,LOW);//выключаем инфракрасный датчик чтобы предотвратить помехи

for(inti=1;i<=3;i++)

{

temperature=(mlx.get_object_temp())+error_correction;

Serial.println(temperature,1);

delay(150);

}

trigger=false;

}
else
{

delay(100);

trigger=true;

digitalWrite(13,LOW);

Serial.println(«position_error»);

}
}

Как это работает

На борту модуля расположено восемь датчиков линии. Кроме чёрного и белого цвета, каждый сенсор способен распознать 4096 оттенков серого. Благодаря такой чувствительности робот лучше определяет границу перехода от линии к фону и быстрее реагирует на повороты.

Сенсоры линии подключены к отдельному 32-разрядному микроконтроллеру STM32F030F4P6 с вычислительным ядром ARM Cortex M0. Контроллер считывает данные с восьми датчиков линии и передаёт их управляющей платформе по интерфейсу I²C/TWI. Адрес модуля по умолчанию 0x42 , но его можно изменить, если захотите подключить несколько модулей.

Интенсивность излучения и чувствительность фотоприёмников можно программно регулировать.

Примеры работы для Arduino

Подключение датчика

К платформе Arduino сенсорный модуль удобнее подключать через плату расширения: например, через Troyka Shield.

При помощи трёхпроводных шлейфов подключите модуль к питанию V и G и к пинам шины I²C — SDA и SCL .

Популярные статьи  Коробочка из бумаги своими руками: полезное умение

Мини модуль TCRT5000 для определения есть ли рядом объект

Получение данных с датчиков линии

Для запуска примеров скачайте и установите библиотеку Octoliner.

Попробуем получить значения с датчиков сборки и вывести полученные значения на монитор serial-порта. Для этого создадим объект для работы с датчиком, выставим чувствительность фотоприёмников и настроим яркость свечения инфракрасных светодиодов.

Поиск линии

Теперь научим датчики определять нахождение линии. Будем использовать диапазон от –1 до 1:

Для плавной езды по линии рекомендуем использовать сборку датчиков совместно с ПИД-регулятором.

Датчик линии аналого-цифровой TCRT5000

Датчик линии используется в робототехнических системах для определения местоположения шасси относительно черной линии разметки.

Принцип работы

Датчик линии работает по принципу отраженного оптического сигнала. На плате датчика установлена оптопара, состоящая из инфракрасных светодиода и фотодиода. Когда датчик включен, светодиод излучает свет, а фотодиод улавливает отраженный луч света, в зависимости от интенсивности приходящего излучения микросхема выдает различные значения.

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

Технические характеристики модуля

Напряжение питания: 3-5 ВПотребляемый ток: 30 мАРекомендуемое расстояние до измеряемого объекта: 3-20 ммГабариты: 46 х 12 мм

Подключение

Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

1. Питание +5V (VСC)2. Цифровой выход (DO)3. Аналоговый выход (AO)4. Земля (GND)

Датчик имеет как цифровой, так и аналоговый выходы. Порог срабатывания цифрового выхода можно настроить с помощью установленного на плате переменного резистора.

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.

Мини модуль TCRT5000 для определения есть ли рядом объект

Далее необходимо загрузить в микроконтроллер программу для обработки полученных с датчика данных.

1. Для начала получим данные и отобразим их в монитор порта.

Пример 1.

Мы видим, что если датчик поднести к черной границе, то аналоговые значения будут стремиться к цифре 1023, при этом цифровое значение будет равно нулю. Если датчик поднести к белой границе, то аналоговое значение будет стремиться к нулю, при этом цифровое будет равно единице.

Аналоговый канал работает в большом диапазоне и его можно настроить на то, чтобы датчик различал оттенки серого. Несмотря на то, что цифровой канал выдает только «0» и «1», его тоже можно настроить на распознавание оттенков. Для настройки чувствительности датчика используется переменный резистор, установленный на плате датчика. Теперь рассмотрим как управлять светодиодом по аналоговому и цифровому каналам.

2. Подключение по аналоговому каналу. Загрузим в микроконтроллер следующий скетч.

Пример 2

В итоге на белой границе светодиод загорается, а на черной затухает.

3. Подключение цифрового датчика.Цифровой датчик линии на выходе дает 1 или 0. Если 1 — белый цвет, если 0 — черный или пустота.Загрузим в микроконтроллер следующий скетч.

Схема проекта

Схема бесконтактного термометра на основе платы Arduino и смартфона представлена на следующем рисунке.

Мини модуль TCRT5000 для определения есть ли рядом объект

Как видите, схема достаточно проста – нам в ней нужно всего лишь подключить датчики MLX90615 и TCRT5000 к плате Arduino Nano.

Датчики MLX90615 и TCRT500 работают от питающих напряжений 3.3V и 5V соответственно, поэтому мы без проблем сможем запитать их от платы Arduino. Контакты интерфейса I2C платы Arduino A4 (SDA) и A5 (SCL) используются для взаимодействия с датчиком MLX90615. Обычно датчик TCRT5000 используется вместе с операционным усилителем в режиме компаратора, но в нашей схеме инфракрасный датчик должен быть невосприимчив к солнечному свету. Поэтому мы подключили инфракрасный диод (IR diode) к цифровому контакту платы Arduino, а фотодиод – к ее аналоговому контакту. Таким образом мы сможем измерять значение с выхода фотодиода в режиме нормального функционирования и после приема сигнала с инфракрасного диода, разница между этими двумя значениями будет помогать нам в борьбе с шумом. Более подробно это будет рассмотрено в разделе про объяснение кода программы.

Популярные статьи  Ключница-подвеска своими руками

Мини модуль TCRT5000 для определения есть ли рядом объект

Вы можете собрать устройство на печатной плате, но мы в целях убыстрения процесса спаяли компоненты проекта на перфорированной плате. А в дальнейшем мы напечатали корпус устройства на 3D принтере исходя из размеров нашей перфорированной платы.

Мини модуль TCRT5000 для определения есть ли рядом объект

Почему TCRT5000 и Arduino Nano?

Инфракрасный датчик TCRT5000 в нашем проекте будет использоваться для определения позиции (точки измерения температуры) и обеспечения автоматического считывания значений температуры. С помощью него нам не будет нужно производить никаких «танцев с бубном» в Android приложении и работа с ним значительно упростится. Также дополнительным достоинством использования данного датчика в нашем проекте является то, что с его помощью значения температуры будут считываться только тогда, когда человек находится на «правильном» расстоянии от нашего термометра, поэтому нам не нужно будет беспокоиться о ложных считываниях.

Причина, по которой в данном проекте мы будем использовать плату Arduino Nano, заключается в том, что у данной платы есть встроенный USB интерфейс – а он нам крайне важен для обеспечения взаимодействия между платой и смартфоном.

Пример использования с Arduino

Проверим датчик в действии с платформами Arduino. На выходе сенсора цифровой сигнал.
Для быстрого и удобного подключения используйте Troyka Shield.

Код программы

digital-line-sensor.ino
// пин датчика линии
#define SENSOR_LINE_PIN A0
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
}
 
void loop() {
  // считываем значение с датчика
  bool signal = digitalRead(SENSOR_LINE_PIN);
  if ( !signal ) {
    // если сигнал ноль
    // выдаем предупреждение
    Serial.println("Warning! Out of table!");
  } else {
    // если сигнал единица
    Serial.println("OK! Above table!");
  }
 
  delay(100);
}

После загрузки скетча — откройте монитор Serial-порта. Проведите датчиком сначала над столом, а потом за краем стола. При выходе за край стола на мониторе должно возникнуть предупреждение.

Элементы платы

Мини модуль TCRT5000 для определения есть ли рядом объект

Troyka-контакты

Датчик подключается к управляющей электронике по трём проводам.

  • Питание (V) — красный провод. На него должно подаваться напряжение 5 В (или 3,3 В).
  • Земля (G) — чёрный провод. Должен быть соединён с землёй микроконтроллера.
  • Сигнальный (S) — жёлтый провод. Подключается к цифровому входу микроконтроллера. Через него датчик передает микроконтроллеру бинарное значение, ноль или единицу.

Оптопара TCRT5000

Оптопара TCRT5000 — это собранные в одном корпусе светоиод (синий на рисунке) и фототранзистор n-p-n типа (чёрный на рисунке). Светодиод излучает в инфракрасном диапазоне на длине волны 950 нм. Свет отражается от поверхности и попадает на фототранзистор.
Мини модуль TCRT5000 для определения есть ли рядом объект

Нужно иметь ввиду, что показания датчика также зависят от расстояния до поверхности. Когда датчик слишком низко, перегородка между диодом и фототранзистором оптопары мешает транзистору принимать отраженный свет. Когда датчик слишком высоко, отраженный свет рассеивается и не доходит до датчика. В обоих случаях датчик выдаст 0.

Инвертор

На борту цифрового датчика расположен инвертирующий триггер Шмитта. При низком напряжении на фототранзисторе — на выходе датчика единица, при высоком — ноль.

Переменный резистор

Переменный резистор позволяет настраивать датчик линии на различные оттенки серого. Если повернуть ручку резистора до упора против часовой стрелки (максимальное сопротивление), то датчик будет выдавать логический ноль над поверхностью светлого оттенка серого. Если повернуть ручку до упора по часовой стрелке (минимальное сопротивление) то датчик будет реагировать только на самые тёмные оттенки. Варьируя сопротивление, вы можете настроить датчик на нужный вам оттенок.

Сигнальный светодиод

Сигнальный светодиод загорается, когда датчик находится над светлой (по его мнению) поверхностью. Наличие диода позволяет более точно откалибровать датчик. Оттенок серого, над которым он загорается в зависимости от настройки можно считать реперной точкой.

Популярные статьи  Быстрозажимные тиски своими руками

Тестирование работы термометра

После того как аппаратная часть проекта будет готова, загрузите код программы в плату Arduino. После этого откройте окно монитора последовательной связи (serial monitor) и вы увидите что в нем будет печататься ошибка определения положения (position error). Если вы поднесете термометр достаточно близко к своей руке, вы увидите что в этом окне начнут выводиться измеренные значения температуры. Если у вас есть под рукой сертифицированный термометр, то вы можете откалибровать работу нашего самодельного термометра с его помощью изменяя значение корректировочного значения в программе (error correction value).

Мини модуль TCRT5000 для определения есть ли рядом объект

После этого используйте соединитель OTG типа чтобы подключить термометр к своему смартфону. Мы протестировали его работу со смартфонами с разъемами Type-C и micro USB – в обоих случаях проблем не возникло. Только проверьте в своем смартфоне правильность настроек при подключении к нему устройств с помощью OTG. Некоторые смартфоны «спрашивают» об этом при подключении устройств, а некоторые – нет.

Мини модуль TCRT5000 для определения есть ли рядом объект

После выполнения всех необходимых подключений установите приложение Easy Scan (ссылка на его скачивание приведена выше в статье) и запустите его. Поместите получившуюся конструкцию напротив человека, температуру которого необходимо измерить, и если все работает нормально, вы должны увидеть на экране приложения измеренное значение температуры.

Мини модуль TCRT5000 для определения есть ли рядом объект

В приложении можно будет установить границу температуры, при превышении которой необходимо будет также делать фотографию лица с повышенной температурой. Все собранные сведения можно будет просмотреть в приложении в удобном виде, также они могут быть «расшарены» в Excel формате для других лиц. Более подробно работу с нашим самодельным термометром вы можете посмотреть на видео, приведенном в конце статьи.

Как уменьшить стоимость бесконтактного термометра?

При ближайшем рассмотрении нам для изготовления бесконтактного термометра понадобятся инфракрасный датчик температуры, микроконтроллер, дисплей, драйвер дисплея и батарейка. Одним из самых дорогих устройств в этом списке будет бесконтактный инфракрасный датчик температуры. К сожалению, выбор среди доступных на рынке подобных датчиков невелик и придется выбирать между MLX90614 и MLX90615. Существенно сэкономить в этом плане можно с помощью аналогового датчика температуры (если вы умеете уверенно с ними работать), но общая схема термометра в этом случае немного усложнится и вам придется терпеть некоторые «муки», связанные с калибровкой подобного устройства. Но здесь выбор за вами. Мы же для нашего проекта решили использовать датчик MLX90615 от компании Melexis.

Когда датчик температуры выбран, нам осталось определиться с микроконтроллером, дисплеем и батареей. С целью удешевления проекта нашего термометра мы решили использовать в его составе смартфон потому что смартфоны сейчас уже не являются новинкой – они есть у большинства активного населения. Поэтому мы написали приложение на Android под названием “Easy Scan” (его можно скачать далее в статье), которое будет взаимодействовать с нашим термометром и выполнять ряд операций – вести лог данных температуры и захватывать изображения. С помощью данного подхода мы не только сможем просто хранить необходимые нам данные, но также мы сможем их передавать по электронной почте, по WhatsApp и т.п.

Поэтому теперь для нашего проекта бесконтактного термометра понадобятся лишь следующие компоненты:

Оцените статью
Денис Серебряков
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Мини модуль TCRT5000 для определения есть ли рядом объект
Садовые поделки своими руками: легкие мастер-классы из шин, труб, цемента, подручных средств