Спидометр с использованием Arduino и приложения на Android:

В этой статье мы рассмотрим создание спидометра на основе платы Arduino, способного измерять скорость движения велосипеда или любого другого транспортного средства и передавать значение этой скорости с помощью технологии Bluetooth на Android приложение на смартфоне. Приложение на Android мы разработали с использованием программной среды Processing. Устройство питается от литиевой батарейки (аккумулятора) 18650, поэтому легко устанавливается и транспортируется на любом движущемся средстве. Также в качестве бонуса в данное мобильное приложение мы добавили функцию зарядки мобильного телефона. Поэтому данное устройство также можно использовать как внешний аккумулятор (power bank) для вашего мобильного телефона во время движения транспортного средства поскольку 18650 имеет высокую плотность заряда и его можно легко заряжать и разряжать.

Внешний вид спидометра на основе платы Arduino

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

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

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

Плата Arduino Pro Mini (5V 16MHz)
FTDI плата (также для программирования Arduino Pro Mini можно использовать плату Arduino UNO)
Повышающий конвертер с 3V до 5V (DC-DC) с выходом для USB зарядки
Модуль литиевой батареи (аккумулятора) TP4056
Bluetooth модуль (HC-05/HC-06)
Датчик Холла (Hall effect sensor) US1881/04E
Литиевая батарея (аккумулятор) 18650
Небольшой кусок магнита
Перфорированная плата (Perf Board)
Соединительные колодки (папа и мама)
Набор для пайки
Небольшая закрытая коробка чтобы разместить в ней наше устройство

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

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

Принцип измерения скорости с использованием датчика Холла и платы Arduino

Измерять скорость движущегося транспортного средства с помощью платы Arduino можно различными способами, однако использование датчика Холла является самым простым и экономным способом сделать это. Датчик Холла – это устройство, способное определять полярность магнита. Если один из концов магнита поместить рядом с датчиком Холла, то датчик изменит свое состояние. Существует много различных исполнений этого датчика, но при его покупке помните о том, что для нашего проекта нужен цифровой датчик Холла.

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

Каждый раз, когда рядом с датчиком Холла будет обнаруживаться магнит будет генерироваться прерывание в плате Arduino. В нашем проекте мы будем использовать непрерывный таймер на основе функции millis() и вычислять время необходимое для совершения колесом двух полных оборотов (для минимизации ошибки) с помощью следующей формулы:

Timetaken = millis() – pevtime;

Поскольку мы теперь знаем это время мы можем рассчитать число оборотов в минуту (rpm, rotations/revolutions per minute) по следующей формуле:

rpm = (1000/timetaken) * 60;

где 1000/timetaken – это число оборотов в секунду (rps, Revolutions per second), мы его умножаем на 60 чтобы конвертировать число оборотов в секунду в число оборотов в минуту (rpm).

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

v= radius_of_wheel * rpm * 0.37699;

После расчета скорости Arduino передает ее значение к нам на смартфон при помощи Bluetooth модуля.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема спидометра на основе платы Arduino

Как можно видеть, схема состоит из двух частей – основная плата, которая содержит все основные компоненты, и дополнительная плата, которая содержит датчик Холла и резистор и монтируется рядом с колесом. Сначала давайте изучим основную плату.

Последовательность сборки главной платы спидометра на основе Arduino

Вид основной платы спидометра с подключенными соединительными проводами

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

Параметр Значение (на одну ячейку)
Under Voltage cut-off 2.4V
Over voltage Cut-off 4.2V
Ток заряда 1A
Защита от превышения напряжения и смены полярности
Микросхемы TP4056 (charger IC) и DW01 Protection IC
Светодиодные индикаторы красный — идет заряд, зеленый — зарядка окончена

Теперь займемся платой с датчиком Холла, которая будет содержать всего два компонента – сам датчик Холла и резистор на 10 кОм. Соединения на ней показаны на схеме устройства, приведенной выше. После подключения к ней соединительных проводов мы должны получить примерный вид устройства, показанный на следующем рисунке:

Внешний вид платы с датчиком Холла для спидометра

Следующий ключевой шаг в сборке нашего проекта – это соединение аккумулятора 18650 к контактам B+ и B- модуля TP4056 с использованием провода. Поскольку литиевые аккумуляторы взрывоопасны, то крайне не рекомендуется использовать здесь паяное соединение. Хотя ряд радиолюбителей все же делают это, помните о том, что в этом случае вы подвергаете ваше устройство риску повреждения. Простой способ преодолеть это – использовать магниты как показано на следующем рисунке.

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

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

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

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

Каждый раз когда датчик Холла обнаруживает вблизи себя магнит, он генерирует прерывание. Функция magnet_detect() будет вызываться для обработки этого прерывания. В этой функции производится расчет числа оборотов колеса в минуту.

Когда число оборотов колеса в минуту известно в функции loop () можно вычислить скорость движения транспортного средства.

Мобильное приложение на Android для работы спидометра

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

  1. Скачайте APK file приложения по следующей ссылке — Android Application for Speedometer. Работает для версии Android 4.4.2 и выше. Извлеките APK файл из zip файла.
  2. Передайте этот .Apk файл с компьютера на ваш смартфон.
  3. Разрешите установку приложения из неизвестного источника в настройках вашего смартфона.
  4. Установите приложение.

Если установка приложения прошла успешно, то вы на экране своего смартфона увидите установленное приложение под именем “Processing_code” как показано на следующем рисунке:

Установленное в смартфоне приложение для нашего спидометра

Разработка своего собственного Android приложения для работы спидометра

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

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

Также можете посмотреть другие проекты на нашем сайте, использующие программы, написанные в программной среде Processing:
игра в Ping Pong с помощью Arduino;
радар на Arduino, управляемый с помощью мобильного приложения.

Установка спидометра на транспортное средство

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

Установка платы с датчиком Холла на колесе

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

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

Необходимые размеры перфорированной платы

Полный комплект файлов дизайна и STL файлов для 3D печати можно скачать по следующей ссылке. Если размеры вашей платы совпадают с нашими то вы можете использовать скачанные STL файлы для печати корпусов устройства. Если же размеры не совпадают, то вы можете самостоятельно их подкорректировать, используя скачанные файлы.

Сначала напечатайте на 3D принтере корпус для нашей вспомогательной платы, содержащей датчик Холла и резистор, и разместите их на вашем транспортном средстве как показано на следующих рисунках.

Корпус для платы с датчиком Холла Установка платы с датчиком Холла на колесе

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

Внешний вид основной платы спидометра в сборе

3D модель основной платы спидометра

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

Размещенная основная плата спидометра в корпусе

Как вы можете видеть, в передней части корпуса имеются два отверстия. Одно будет использоваться для вывода USB, через который мы будем заряжать наш мобильный телефон. А второе будет использоваться для micro USB, через которое мы сможем заряжать наш литиевый аккумулятор.

После этого печатаем вторую часть корпуса для главной платы и проверяем насколько хорошо они стыкуются друг с другом.

Если вы удовлетворены качеством стыковки этих двух частей, то вы можете установить неподвижную часть корпуса на велосипед.

Приспособления для крепления основной платы Крепление неподвижной части корпуса основной платы спидометра

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

Обматываем аккумулятор герметичной лентой

Располагаем аккумулятор внутри корпуса

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

Внешний вид установленного спидометра на велосипеде Соединение основной платы с дополнительной

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

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

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

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

Далее представлен полный код программы для 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
}
}

Видео, демонстрирующее работу схемы

(Проголосуй первым!)
Загрузка...
103 просмотров

Комментарии

Спидометр с использованием Arduino и приложения на Android: — 2 комментария

  1. Помогите пожалуйста допилить скетч-спидометр на герконе .Суть в том что скетч тянит инфу о скорости с эбу ,а у меня нет инфы в эбу вот и думаю как от геркона считать скорость (геркон стоит в спидометре) вот вся инфа в зипе https://drive.google.com/open?id=1_EiJick55bVh1NeVdtU.. или дайте хоть направления как подправить скетч Ардуина у меня про мини

    • Игорь, ваша ссылка не открывается. Может быть гораздо проще и надежнее заменить геркон на датчик Холла? Вот в сети есть неплохая статья по этому поводу — https://www.drive2.ru/l/515490634593730956/
      И разве вам не подойдет скетч из этой статьи (только про Bluetooth строки удалить)? Принцип же определения скорости что с помощью геркона, что с помощью датчика Холла, практически одинаков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *