Детектор скорости движущегося автомобиля на Ардуино

Необходимые компоненты

Аппаратное обеспечение

  1. FTDI плата (также для программирования Arduino Pro Mini можно использовать плату Arduino UNO).
  2. Повышающий конвертер с 3V до 5V (DC-DC) с выходом для USB зарядки.
  3. Небольшой кусок магнита.
  4. Перфорированная плата (Perf Board).
  5. Соединительные колодки (папа и мама).
  6. Набор для пайки.
  7. Небольшая закрытая коробка чтобы разместить в ней наше устройство

Программное обеспечение

Arduino IDE
Processing IDE с android ADK (только если вы самостоятельно хотите разрабатывать мобильное приложение для этого проекта)
Windows/Mac PC
Мобильный телефон (смартфон) на Android

Расчет скорости и ее отображение на аналоговом спидометре

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

В этом проекте мы будем использовать прерывание самого высокого приоритета для определения числа оборотов вентилятора в минуту (rpm — revolutions per minute). Мы будем применять это прерывание в нарастающем режиме. То есть всегда когда выход датчика будет изменять свое состояние с LOW на High будет вызываться на выполнение функция RPMCount(). А поскольку в проекте мы использовали двухлопастной вентилятор это значит что данная функция будет вызываться 4 раза за один оборот.

Когда мы определим время одного оборота мы можем рассчитать по ниже приведенной формуле число оборотов в минуту (RPM). В этой формуле 1000/time позволит определить нам число оборотов в секунду (RPS — revolution per second), а умножив полученное значение на 60 мы получим число оборотов в минуту.

Arduino

rpm = (60/2)*(1000/(millis() — time))*REV/bladesInFan;

1 rpm=(602)*(1000(millis()-time))*REVbladesInFan;

После расчета числа оборотов в минуту (RPM) скорость можно определить по следующей формуле:

Arduino

Speed = rpm * (2 * Pi * radius) / 1000

1 Speed=rpm*(2*Pi*radius)1000

Поскольку число пи нам известно (Pi = 3.14), а радиус в нашем случае составляет величину 4.7 дюйма, то сначала конвертируем радиус из дюймов в метры:

Arduino

radius = ((radius * 2.54)/100.0) meters
Speed= rpm * 60.0 * (2.0 * 3.14 * radius)/ 1000.0) // в километрах в час

1
2

radius=((radius*2.54)100.0)meters

Speed=rpm*60.0*(2.0*3.14*radius)1000.0)// в километрах в час

В представленной формуле мы умножаем rpm на 60 чтобы конвертировать rpm в rph (revolution per hour – число оборотов в час) и делим на 1000 чтобы преобразовать м/ч (метров в час) в км/ч.

После получения скорости в км/ч мы можем непосредственно показать ее на экране ЖК дисплея в цифровой форме, однако чтобы показать ее в аналоговой форме нам необходимо произвести дополнительные преобразования, в частности, мы должны определить число шагов, которое должен сделать наш шаговый двигатель.

В нашем проекте мы используем 4-проводный биполярный шаговый двигатель, который совершает 200 шагов за один оборот, то есть за один шаг он поворачивается на 1.8 градуса.

К примеру, нам необходимо показать скорость 280 км/ч на спидометре – для этого шаговый двигатель должен повернуться на 280 градусов. То есть максимальная скорость у нас будет равна maxSpeed = 280, а максимальное число шагов (maxSteps) будет равно:

Arduino

maxSteps = 280/1.8 = 155 steps

1 maxSteps=2801.8=155steps

Для преобразования скорости в число шагов мы будем использовать функцию Arduino под названием map:

Arduino

Steps = map(speed,0,maxSpeed,0,maxSteps);

1 Steps=map(speed,,maxSpeed,,maxSteps);

Итого, получим:

Arduino

steps=map(speed,0,280,0,155);

1 steps=map(speed,,280,,155);

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

Arduino

currSteps=Steps
steps= currSteps-preSteps
preSteps=currSteps

1
2
3

currSteps=Steps

steps=currSteps-preSteps

preSteps=currSteps

где currSteps – текущее число шагов, полученное в результате предыдущего вычисления скорости, а preSteps – последнее выполненное число шагов.

Ниши применения

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

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

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

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

Программирование

В начале кода заголовочный файл объявляется с именем «LiquidCrystal.h», который используется для ЖК-дисплея. В следующей строке контакты LCD указаны в функции «LiquidCrystal lcd (4,5,6,7,8,9)». Здесь цифра в скобках показывает контакты Arduino, которые подключены к LCD.

#include<LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

В строках 4 и 5 sensor1 и sensor2 объявлены как целые числа (integer) – это выводы Arduino, которые подключены к ИК-датчикам.

int sensor1 = 2;
int sensor2 = 3;

После этого объявляются 4 целых числа с именем Time1, Time2, Time и flag. Где «Time1» – это измеренное время, когда «sensor1» активирован, а «Time2» – это измеренное время, когда «sensor2» активирован. Time – это разница между «Time1» и «Time2», которая эквивалентна времени, в течении которого автомобиль проезжал между «sensor1» и «sensor2» или «sensor2» и «sensor1».

int Time1;
int Time2;
int Time;
int flag = 0;

Затем мы объявляем целочисленную константу distance, которая является расстоянием между датчиками IR1 и IR2 в сантиметрах. Для примера я взял расстояние равным 30 см. Вы, конечно же, можете поменять на свое значение (лучше до 5 метров).

int distance = 30;

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

float Speed;

При запуске «void setup ()» срабатывают 2 функции обработки внешних прерываний “attachInterrupt(0,fun1,RISING)” и “attachInterrupt(1,fun2,FALLING)”. Например, “attachInterrupt(0,fun1,RISING”, означает, что когда IR2 обнаружит падающую волну (int.0), то прерывание запустит функцию fun1.

ЖК-дисплей запускается с помощью функции «lcd.begin (16,2)». А очищается с помощью функции «lcd.clear ()». Сообщение на экране «SPEED MEASURMENT» печатается на с помощью функции «lcd.print».

void setup() {
attachInterrupt(0,fun1,RISING);
attachInterrupt(1,fun2,FALLING);

lcd.begin(16,2);
lcd.clear();
lcd.print(«SPEED MEASURMENT»);
}

void fun1() запускается, когда активирован «interrupt0 (int.0)». В этой функции текущее время измеряется с помощью «Time1 = millis ()».

Функция void fun2(), это тоже самое, что и «void fun1 ()», но запускается она, когда активируется «interrupt1 (int.1)».

void fun1()
{
Time1 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}

Популярные статьи  (Электрически) квалифицированное лицо: кто это, определение

void fun2()
{
Time2 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}

В «void loop ()», время Time измеряется с помощью «Time1» и «Time2». «Time» должно быть положительным, поэтому дополнительно используется «if else». Но этот цикл выполняется, когда flag=0, поэтому используется условие «if». Если «Time1» и «Time2» равны, «Speed» будет нулевым.

В строке 47 проверяется if (Speed == 0). Если это условие верно, то на ЖК-дисплее печатается «… .OK….», что указывает на то, что система готова к использованию.

Строки 51 и ниже отвечают за отображение на ЖК-дисплее скорости движущегося объекта, после того, как «Time1» и «Time2» станут равными нулю.

void loop() {
if (flag == 0){
if (Time1 > Time2) {Time = Time1 — Time2; Speed = (distance*1000)/Time;}
else if (Time2 > Time1) {Time = Time2 — Time1; Speed = (distance*1000)/Time;}
else {Speed = 0;}
}

if (Speed == 0) {
lcd.setCursor(0, 1);
lcd.print(«…….OK…….»);
}
else {
lcd.setCursor(2, 1);
lcd.print(Speed);
lcd.print(» cm/sec»);
delay(10500);
Time1 = 0;
Time2 = 0;
}
}

Полный скетч проекта:

Детектор скорости движущегося объекта на Ардуино

Возможность применения Arduino в автомобиле для его улучшения

Самый распространенный проект на Ардуино для автомобиля – установка в машине ЖК-дисплея с особыми функциями и показателями.

Когда Ардуино-дисплей в авто находится в движении, отображаются: процент нагрузки двигателя, напряжение батареи, температура в салоне и температура охлаждающей жидкости двигателя (есть несколько других статистических данных о транспортном средстве, которые могут отображаться, если нужны). Помимо дисплея и микроконтроллера, понадобятся различные датчики для создания этого Аrduino проекта для автомобиля.

Если Аrduino для автомобиля совместим с IDE Teensy 3.6, то читается анимированный растровый образ машины и резервные датчики. Каждый из четырех датчиков на своем месте, так же, как и анимационная картинка автомобиляоторая меняет цвет, исходя из того, насколько близко объект находится к машине (только зеленый означает <5 футов, зеленый и желтый означает <2,6 фута и зеленый, желтый, а красный означает <1 фут).

Детектор скорости движущегося автомобиля на Ардуино

Этот Ардуино проект для авто очень сложный, потому что резервные датчики взаимодействуют с приемопередатчиком, а затем отображают информацию на маленький ЖК-дисплей.

Проприетарный протокол связи не является типичным, как например, I2C, UART, CAN, USB и так далее. Свойства протокола могут различаться в каждом случае, в зависимости от поставщика.

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

Биты под номерами 0-5 не несут никакой существенной информации и не кодируются.иты 6-8 соответствуют датчикам с названиями A, B, C или D. Необходимо загрузить эскиз в IDE Arduino, который считывает датчики и выводит данные через последовательную консоль.

Для следующего Ардуино проекта в автомобиле можно использовать бесплатное программное обеспечение для редактирования фотографий под названием GIMP для обрезки и изменения размера изображения машины с верхнего вида. Затем необходимо экспортировать изображение в виде 24-битного растрового изображения с именем «car.bmp», которое составляет 110 пикселей на 250 пикселей. После загружаем все на карту microSD и помещаем эту карту в микроконтроллер Teensy 3.6.

Основными причинами, по которым нужно использовать Teensy 3.6 вместо UNO, остается скорость, с которой Teensy может читать SD-карту и отображать изображение с помощью драйвера дисплея RA8875. При использовании UNO процесс займет около 8 секунд, в то время как с Teensy 3.6 займет 1,8 секунды.

Для дальнейшего конструирования проекта с Аrduino для автомобиля потребуется сделать трехмерную печать верхней и нижней крышки ЖК-дисплея для его защиты. В машине необходимо предварительно просверлить отверстия для датчиков.

Спидометр для велосипеда своими руками на Arduino

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

Материалы и инструменты для изготовления: — микроконтроллер Arduino;— магнитный выключатель (геркон);— резистор (10 кОм, 1/4 ватта);— провод;— батарея на 9В;— LCD дисплей;— макетная плата для распайки;— два переключателя.

Еще понадобится фанера, винты, некоторое количество инструмента. Ну и само собой программное обеспечение Arduino IDE.

Шаг первый. Электрическая схема спидометраВсего в схеме используется три переключателя. Один переключатель управляет питанием 9В. Второй переключатель отвечает за работу LCD экрана, с помощью него его можно включать или выключать. Ну и наконец, магнитный выключатель геркон, он замыкает цепь в том случае, если колесо делает один полный оборот. В проекте используется LCD монитор фирмы Parallax, он подключается к плате с помощью трех пинов. На один пин подается 5В, второй подключается к земле, ну а третий выход является цифровым, он отмечен цифрой 1.Резисторы на 10 кОм играют в системе роль защиты, чтобы не произошло перегрузки. Нельзя подключать землю и плюс 5В к Arduino напрямую.

1023. Если система не работает, будет отображаться 0.

После установки дисплей можно проверить. Если все сделано правильно, то на экране появится надпись «Hello World». Вполне возможно, что с первого раза это не получится и придется заново «перезалить» скетч.

Шаг пятый. Подсветка спидометраТеперь нужно подсоединить тумблер подсветки. Это делается так, как указано на картинках. Нужно не забыть соединить резистор на 10 кОм с зелеными и черными проводами. Далее эти провода подключаются к одному контакту выключателя, а ко второму подключается красный провод. Красный провод является питанием, он подключается к Arduino 5V. Зеленый провод подключается к D2, а другая сторона резистора к земле.

Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!

*Заполняя форму вы соглашаетесь на обработку персональных данных

Принцип работы ультразвукового датчика HC-SR04

Ультразвуковой датчик HC-SR04 используется для измерения расстояний в диапазоне 2-400 см с точностью 3 мм. Датчик состоит из ультразвукового передатчика, ультразвукового приемника и схемы управления.

Ультразвуковой датчик HC-SR04 обеспечивает на своем выходе сигнал, пропорциональный дистанции до препятствия. Датчик генерирует звуковые колебания в ультразвуковом диапазоне (после получения управляющего импульса) и после этого ждет когда они вернутся к нему (эхо), отразившись от какого-нибудь препятствия. Затем, основываясь на скорости звука (340 м/с) и времени, необходимом для того чтобы эхо достигло источника (нашего датчика), датчик обеспечивает на своем выходе сигнал, пропорциональный расстоянию до препятствия.

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

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

После этого расстояние до препятствия можно рассчитать по следующей формуле:

Distance= (Time x Speed of Sound in Air (343 m/s))/2

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

Для изготовления робота в этом проекте были использованы компоненты, которые достаточно легко приобрести. Для изготовления шасси робота можно использовать детскую игрушку или можно купить уже готовые шасси робота на AliExpress.

Необходимые детали и узлы

Прежде чем приступить к сборке квадрокоптера своими руками, необходимо обзавестись всеми необходимыми деталями. Мозгом нашей самоделки станет полетный контроллер Arduino Uno. Его возможностей более чем достаточно для того, чтобы управлять беспилотником.

Популярные статьи  Типы и применение шинопроводов - многообразие решений для эффективной и надежной передачи данных и энергии

Детектор скорости движущегося автомобиля на Ардуино

Помимо микроконтроллера, нам понадобятся:

  • Аккумулятор (лучше несколько) на 3.7В
  • Плата MPU-6050 (на ней установлены гироскоп и акселерометр)
  • Транзистор ULN2003A
  • Коллекторные двигатели с полым ротором 0820
  • Провода

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

Зато невозможно обойтись без гироскопа и акселерометра. Гироскоп необходим для того, чтобы квадрокоптер мог удерживать заданное направление движения, тогда как акселерометр используется для измерения ускорения. Без этих устройств управлять коптером было бы гораздо сложнее (если вообще возможно), так как именно они предоставляют данные для сигнала, регулирующего скорость вращения винтов.

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

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

Подключение датчика движения к Ардуино не представляет особой сложности. На датчик надо подать питание (обычно 5 В, но могут быть и другие варианты), а также присоединить выход сенсора к цифровому входу Ардуино. Схема подключения проста, ее можно наглядно рассмотреть на рисунке:

Детектор скорости движущегося автомобиля на Ардуино

Контактная группа датчика состоит из трех электродов. Два из них подают питание с Ардуино на датчик, а третий передает сигнал с его выхода на управляющее устройство. Земля (на рисунке это черный провод) подключается к контакту GND группы «power» микрокомпьютера. Рядом с ним находится контакт питания +5 V, к которому надо подключить соответствующий контакт датчика (красный провод на рисунке). Выход, или сигнальный (желтый) провод присоединяют к контакту 2 группы «digital» (так показано на рисунке, но фактически можно подключиться к любому цифровому контакту на плате Ардуино).

Способ подключения ИК датчиков к Ардуино один и тот же, он не меняется при введении другого скетча. Есть разные модели микропроцессоров, отличающиеся от Arduino Uno некоторыми параметрами (количество слотов, размер памяти и тому подобное). Выбор модели зависит от сложности будущих задач и от степени подготовки пользователя.

Детектор скорости движущегося автомобиля на Ардуино

Исходный код программы

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

Детектор скорости движущегося автомобиля на Ардуино Детектор скорости движущегося автомобиля на Ардуино

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

То есть с помощью созданного устройства вы не только сможете измерять скорость вашего транспортного средства, но и одновременно с этим заряжать от него ваш мобильный телефон.

Далее представлен полный код программы для Arduino.

Arduino

#include <SoftwareSerial.h> // подключаем библиотеку последовательной связи
SoftwareSerial Cycle_BT(11, 12); // RX, TX
int ledpin=13; // контакт D13 для подключения светодиода
int BluetoothData; // данные, получаемые от компьютера
float radius_of_wheel = 0.33; // измерьте радиус колеса вашего транспортного средства и введите его здесь
volatile byte rotation; // variale for interrupt fun must be volatile
float timetaken,rpm,dtime;
int v;
unsigned long pevtime;

void setup()
{
Cycle_BT.begin(9600); // старт Bluetooth соединения со скоростью 9600 бод/с
//pinMode(ledpin,OUTPUT); //LED pin aoutput for debugging
attachInterrupt(0, magnet_detect, RISING); // второй контакт arduino будет использоваться для прерывания (interrupt) и magnet_detect будет вызываться при каждом прерывании
rotation = rpm = pevtime = 0; // все переменные устанавливаем в 0
}

void loop()
{
/*устанавливаем в 0 если транспортное средство остановилось */
if(millis()-dtime>1500) //магнит не найден в течение 1500ms
{
rpm= v = 0; // устанавливаем rpm и скорость в 0
Cycle_BT.write(v);
dtime=millis();
}
v = radius_of_wheel * rpm * 0.37699; //0.33 – радиус колеса в метрах
}

void magnet_detect() // вызывается всегда когда обнаруживается магнит
{
rotation++;
dtime=millis();
if(rotation>=2)
{
timetaken = millis()-pevtime; // время в миллисекундах для двух оборотов
rpm=(1000/timetaken)*60; //вычисляем rpm
pevtime = millis();
rotation=0;
Cycle_BT.write(v);
//Cycle_BT.println(«Magnet detected….»); //enable while testing the hardware
}
}

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

#include <SoftwareSerial.h> // подключаем библиотеку последовательной связи

SoftwareSerialCycle_BT(11,12);// RX, TX

intledpin=13;// контакт D13 для подключения светодиода

intBluetoothData;// данные, получаемые от компьютера

floatradius_of_wheel=0.33;// измерьте радиус колеса вашего транспортного средства и введите его здесь

volatilebyterotation;// variale for interrupt fun must be volatile

floattimetaken,rpm,dtime;

intv;

unsignedlongpevtime;

voidsetup()

{

Cycle_BT.begin(9600);// старт Bluetooth соединения со скоростью 9600 бод/с

//pinMode(ledpin,OUTPUT); //LED pin aoutput for debugging

attachInterrupt(,magnet_detect,RISING);// второй контакт arduino будет использоваться для прерывания (interrupt) и magnet_detect будет вызываться при каждом прерывании

rotation=rpm=pevtime=;// все переменные устанавливаем в 0

}

voidloop()

{

/*устанавливаем в 0 если транспортное средство остановилось */

if(millis()-dtime>1500)//магнит не найден в течение 1500ms

{

rpm=v=;// устанавливаем rpm и скорость в 0

Cycle_BT.write(v);

dtime=millis();

}

v=radius_of_wheel*rpm*0.37699;//0.33 – радиус колеса в метрах

}

voidmagnet_detect()// вызывается всегда когда обнаруживается магнит

{

rotation++;

dtime=millis();

if(rotation>=2)

{

timetaken=millis()-pevtime;// время в миллисекундах для двух оборотов

rpm=(1000timetaken)*60;//вычисляем rpm

pevtime=millis();

rotation=;

Cycle_BT.write(v);

//Cycle_BT.println(«Magnet detected….»); //enable while testing the hardware

}

}

Скетч

Последовательность совершения операций для ультразвукового дальномера HC-SR04:

  • На 10 мс устанавливаем High на пине TRIG сенсора, который подключается к Ардуино.
  • Замеряем время длительности высокого сигнала на ноге с ECHO и присваиваем его T. Оно равно времени прохождения УЗ между отправкой и возвратом, но не более 38 мс.
  • Считаем, что, если эхо вернулось за время более 25 мс, — расстояние слишком велико для точности — заканчиваем.
  • Вычисляем дальность разделив время пополам и перемножив его на скорость распространения волны в стабильной воздушной среде. Формула: t/2×340.
  • Приводим результат в читабельный вид и отправляем на монитор порта, для последующего отображения его на дисплее пользователя.

Слегка модернизировав приведенный скетч, можно создать сонар для использования в быту. Речь идет об уже рассказанных сферах — парктроник, «глазах» роботов, определителя препятствий для слабовидящих, или высотомере дрона. Естественно с коррекцией последней паузы кода в сторону ее уменьшения.

Если применяется схема с соединением по одному пину на Arduino, используется следующий скетч (модификация предыдущего):

Существует отдельная библиотека работы с ультразвуковым датчиком. Называется она «NewPing» и распространяется через сайт https://playground.arduino.cc/Code/NewPing/

Код работы с ней:

Основное преимущество модуля в совместимости с различными ультразвуковыми дальномерами, без изменения исходного кода скетчей. Он управляет Paralax Ping, Dyp-ME007, SRF06, SRF05, SR04. С ними всеми взаимодействие может проходить в режиме двух пинов или по одному. Достаточно в строке инициализации указать его и для ECHO и в случае TRIG. Единственным исключением будет ультразвуковой датчик SRF06. Его конструкция не допускает подключение через совмещение контактов.

Детектор скорости движущегося автомобиля на Ардуино

Подключение сенсорного шилда к Arduino Uno

Драйвер двигателя

Используйте простой сенсорный шилд для Arduino Uno, чтобы подключить все датчики и провода моторного привода. Наша модель — Arduino Sensor Shield V5.

Провод от автомобильного привода, который необходимо подключить к цифровым контактам на шилде:

  • ENA на D5
  • IN1 на D2
  • IN2 на D8
  • ENB на D3
  • IN3 на D11
  • IN4 на D10

Линейные датчики

Линейный датчик является цифровым, но мы можем использовать аналоговые входы Arduino Uno для считывания цифровых сигналов. Мы подключаем вывод GND датчика к выводу GND на экране, вывод VCC датчика к выводу VCC на шилде 5V.

Популярные статьи  Как правильно выбрать лампу - полезные советы и рекомендации для освещения вашего дома

Сигналы линейных датчиков мы подключаем к аналоговым контактам на шилде:

  • Линейный датчик (слева) на A3
  • Линейный датчик (в центре) на А4
  • Линейный датчик (справа) на A5

Детектор скорости движущегося автомобиля на Ардуино

Инфракрасные датчики

Аналоговые инфракрасные датчики расстояния Sharp мы подключаем аналогичным образом

Обратите внимание, что в этом случае средний провод датчиков Sharp (черный) — это GND, левый провод (красный) — это VCC, а правый провод (желтый) — это выходной сигнал

Мы подключаем вывод GND датчика к выводу GND на шилде, вывод VCC датчика к выводу VCC на шилде 5V.

Сигналы инфракрасных датчиков мы подключаем к аналоговым контактам шилда:

  • Датчик слева на A0
  • Датчик справа на А1

Детектор скорости движущегося автомобиля на Ардуино

Ультразвуковой датчик и сервопривод

Ультразвуковой датчик подключается к следующим контактам:

  • подсоедините вывод GND датчика к выводу GND на шилде,
  • вывод VCC датчика к выводу VCC на шилде 5V.

Другие контакты мы подключаем к цифровым входам шилда.

  • Штырь к D7
  • Эхо-штырь к D4

Сервопривод подключается к следующим контактам:

  • подключите провод заземления (черный или коричневый) сервопривода к выводу заземления на шилде.
  • если сервопривод совместим с 7,4 В, подключите провод VCC (красный или оранжевый) к крайнему левому разъему + 12 В 3-контактного разъема на драйвере L298N. Если сервопривод несовместим, подключите провод VCC сервопривода к выводу VCC на шилде сервопривода.

Сигнальный провод (желтый, белый или оранжевый) подключите к цифровому выводу D9.

Детектор скорости движущегося автомобиля на Ардуино

Поздравляем! Ваш робот готов!

Детектор скорости движущегося автомобиля на Ардуино

Вы можете подключить черный разъем к Arduino, чтобы включить его.

Детектор скорости движущегося автомобиля на Ардуино

Подключите аккумулятор с помощью Т-образного разъема (или любого другого). Включите двигатели с помощью этого переключателя.

Детектор скорости движущегося автомобиля на Ардуино

Шаг 3: Программирование Arduino для считывания данных с анемометра

Алгоритм кода для осуществления работы анемометра:

#include <mp3TF.h>
 
mp3TF mp3tf = mp3TF ();
unsigned int speed;
unsigned char prev_speed;
unsigned int speed_change_counter = 0;
boolean speed_changed = false;
 
void setup()
{
    mp3tf.init(&Serial);
    Serial.begin(9600);
}
 
unsigned int measureSpeed()
{
    return analogRead(A0);
}
 
void saySpeed()
{
    unsigned char pseudospeed = speed/40;
 
    if(pseudospeed == 0)
        mp3tf.stop();
    else if(pseudospeed > 6)
        mp3tf.play(7);
    else
        mp3tf.play(pseudospeed);
}
 
void loop()
{
    speed = measureSpeed();
 
    if (abs(speed-prev_speed) > 40 && speed/40 != prev_speed/40) {
        speed_change_counter = 0;
        speed_changed = true;
 
        prev_speed = speed;
    }
    else {
        if(speed_changed) {
            if(++speed_change_counter == 10) {
                speed_changed = false;
 
                saySpeed();
            }
        }
    }
 
    delay(100);
}

Комплектующие

Для нашего транспорта понадобится приличное количество деталей. Полный список вы можете найти ниже.

  • Драйвер мотора L298N
  • Sharp GP2Y0A21YK0F Аналоговый датчик расстояния 10-80 см
  • Ультразвуковой датчик — HC-SR04 (универсальный)
  • Датчик TCRT5000 (цифровой выход)
  • Мотор DAGU DC 1:48 (вы можете использовать 2 или 4 мотора)
  • Arduino UNO
  • Сенсорный экран V5
  • Робот RoboRover M1

Вам не нужно покупать перечисленные выше аппаратные компоненты, если вы будете использовать шасси RoboRover M1. Это шасси имеет все необходимые компоненты:

  • 2 инфракрасных датчика расстояния Sharp A21,
  • 3 линейных датчика TCRT5000,
  • 1 ультразвуковой датчик расстояния HC-SR04.

А драйвером двигателя является L298N с 4 двигателями (2 двигателя с каждой стороны, соединенные параллельно). Робот поворачивается как танк, меняя скорость вращения правого и левого колес.

И, конечно, из программного обеспечения нам нужна Arduino IDE для работы с нашим кодом.

Необходимые компоненты

Драйвер мотора L293D

Детектор скорости движущегося автомобиля на Ардуино

L293D представляет собой микросхему драйвера мотора (motor driver), имеющую в своем составе 2 канала для управления двумя двигателями. Микросхема L293D имеет две транзисторные пары Дарлингтона для усиления и раздельного управления мощностью двигателей, подключаемых к ее выходам.

Инфракрасный модуль

Детектор скорости движущегося автомобиля на Ардуино

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

Также в схему добавлен регулятор напряжения на 5 В, а питание устройства осуществляется от батарейки 9 В.

Считывание показаний датчиков с помощью Arduino

Легкость, с которой Arduino может получить значения с датчиков, является одной из особенностей, которая делает эти платы такими полезными.

Датчики – это устройства, которые преобразуют физические величины, например, яркость света или температуру, в электрическую величину. Например, термопара выдает напряжение, пропорциональное её температуре. Существует множество различных датчиков:

  • датчик освещенности;
  • датчик движения;
  • датчик температуры;
  • датчик магнитного поля;
  • датчик силы тяжести;
  • датчик влажности;
  • датчик вибрации;
  • датчик давления;
  • датчик электрических полей;
  • звуковой датчик;
  • датчик положения.

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

Эксперимент 1: датчик расстояния

В этом эксперименте мы будем использовать датчик расстояния Sharp GP2Y0A21YK для управления яркостью светодиода.

Детектор скорости движущегося автомобиля на Ардуино

Необходимые комплектующие

  • 1 x Arduino Mega2560;
  • 1 x макетная плата;
  • 1 x светодиод;
  • 5 x перемычка;
  • 1 x резистор 470 Ом;
  • 1 X датчик расстояния Sharp GP2Y0A21YK.

Схема соединений

Датчик расстояния Sharp может обнаруживать объекты на расстояниях от 10 до 80 см. Он излучает импульс инфракрасного света, а затем определяет угол, на котором отражается этот свет. Чем дальше объект, тем ниже выходное напряжение. Если датчик не принимает отраженный свет, то напряжение на его выходе составит 0 В. Если объект находится на расстоянии 10 см или ближе, выходное напряжение будет равно 5 В (в этом эксперименте мы подаем на датчик напряжение питания 5 В).

Выход датчика подключается к аналоговому входу Arduino. Аналого-цифровой преобразователь (ADC) Arduino затем преобразует это напряжение в значение от 0 до 1023. Затем это значение преобразуется в значение от 0 до 255, и это число используется для установки коэффициента заполнения сигнала на широтно-модулированном (ШИМ) выходе, который управляет яркостью светодиода. В результате, чем ближе объект к датчику расстояния, тем ярче светит светодиод.

Эксперимент 2: датчик температуры

В этом эксперименте Arduino будет измерять температуру с помощью микросхемы датчика LM35. LM35 – это низковольтная микросхема, которая требует питания постоянным напряжением от +4 до +20 вольт. Это идеально, потому что мы можем подключить датчик к выводу +5V на плате Arduino. LM35 имеет всего 3 вывода: два для питания и один для аналогового выхода. Выходной вывод представляет собой аналоговый выход, напряжение на котором линейно пропорционально температуре в градусах Цельсия. Выходной сигнал находится в диапазоне от 0 до 1,5 вольта. Выходное напряжение 9 В соответствует температуре 0°C, и при каждом повышении температуры на один градус оно увеличивается на 10 мВ. Чтобы преобразовать выходное напряжение в температуру, вам необходимо просто разделить выходное напряжение в мВ на 10. Например, если выходное напряжение равно 315 мВ (0,315 В), температура равна 31,5°C.

Необходимые комплектующие

  • 1 x датчик температуры LM35;
  • 2 x светодиод;
  • 1 x коробок спичек;
  • 2 X резистор 470 Ом;
  • 1 x Arduino Mega2560;
  • 1 x макетная плата;
  • 10 x перемычка.

Схема соединений

Выходной вывод LM35 (вывод 2) подключен к выводу A0 Arduino. Код использует функцию analogRead() для преобразования выходного напряжения в число между 0 и 1023. Умножение этого числа на 0.48828125 преобразует его в градусы Цельсия, которые и отображаются в мониторе последовательного порта.

Заключение

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

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

Рейтинг
( Пока оценок нет )