Продолжение статьи "Визуализация данных считываемых с ELM327 адаптера через bluetooth на arduino".

После проведения тестирования схемы из статьи выше, были обнаружены проблемы. Схема временами теряла связь с ELM327 адаптером и потом переставала подключаться и зависала на попытке пересоединения, причем при отладке получалось, что проблема возникала именно в реализации SoftwareSerial.

Решением было - добавить срабатывание Watchdog таймера, который есть у Arduino Nano. Но возникла проблема, загрузчик Nano некорректно обрабатывал ситуацию со сработавшим таймером и было решено перепрошить Nano другим загрузчиком Optiboot.

Для перепрошивки я решил использовать Arduino UNO и подключил как показано на схеме:

Arduino_ISP_wires

ISP разъем Nano (для проверки правильности соединения проводов)

images

ИМХО наиболее понятная схема. Сам процесс перепрошивки описан в статье

Здесь я сделаю вырезки из статьи на случай, если сама статья станет закрытой:

Если взять Arduino UNO, в качестве программатора, и последнию на данный момент версию Arduino IDE v1.6.5, то алгоритм будет следующий:

  1. Добавить содержимое файла boards-1.6.txt из пакета optiboot в конец файла hardware/arduino/avr/boards.txt в директории с Arduino IDE.
  2. В Arduino Uno, загрузить скетч из File → Examples → ArduinoISP.
  3. Соединить программатор с целевой Arduino Nano следующим образом:

nano_uno_connect

В Arduino IDE в меню Tools установить настройки как на скриншоте:

699f294af6cc48179e44c65543a758c5

Выбрать пункт меню Tools → Burn Bootloader и убедиться, что процесс завершился без ошибок.

После этой процедуры, загружать скетчи в Arduino Nano нужно будет выбирая те-же настройки — Board: Optiboot on 32 pin cpus, Processor: ATmega328p, CPU Speed: 16MHz.

После данной процедуры в Nano высвободилось 1.5Кбайт программной памяти, что очень сильно обрадовало.

Здесь можно найти модифицированный код, программы коннектора Arduino Nano - ELM327 с поддержкой WDT.

Следующий этап, это разработка схемы в KiCad и моделирование корпуса в FreeCAD.

Схема вышла вот такой:

nano_uno_scheme

Плата состоит из двух частей, на одной расположены Arduino Nano и разъемы для соединения OLED, Touch Button, диода и кнопок. Все эти элементы кроме Arduino Nano сделаны выносными, чтоб можно было прикрепить к корпусу в различных положениях.

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

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

Вот как выглядит корпус:

Стакан под плату:

nano_uno_corp1

и крышка на стакан, куда крепятся дисплей и кнопки:

nano_uno_corp2

Все сопутствующие файлы для KiCad и stl так же расположены в папках проекта.

Ниже видео с демонстрацией работы устройства.

Инструкция работы программы

  1. При включении питания в положение "On" и второго переключателя в положение "On", устройство переходит в режим стирания ПЗУ и забывает устройство с которым было сопряжено. Диод в этот момент мигает.
  2. При переключении второго переключателя в "Off", а питания в "On", визуализатор переходит в состояние поиска доступных блутуз устройств (если ранее визуализатор не был сопряжен) или если ранее был сопряжен, то пытается соединиться с ELM327 адаптером.
  3. Если визуализатор перешел в состояние сканирования устройств - на экране выводится Try to find devs... В течении 30 секунд идет поиск устройств и после этого выводятся MAC всех найденных устройств по очереди. Каждое найденное устройство отображается в течении 10 секунд, если в момент отображения прикоснуться к Touch кнопке, то MAC устройства будет запомнен в ПЗУ и визуализатор попытается с устройством установить связь.
  4. Если ни один из MAC не подошел, устройство будет повторно сканировать наличие блутуз устройств и ждать выбора.
  5. Если сопряжение было установлено, то визуализатор пытается установить связь с устройством на скорости от 4800 до 35000 Baud, если удалось установить связь, то проверяется их ПЗУ последний отображаемый параметр, в этот момент диод постоянно загорается
  6. В режиме отображения параметра, если нажать на Touch кнопку в течении 4х секунд (до того как погаснет диод) и отпустить, то появится меню доступных параметров, при нажатии на Touch кнопку в течении 1 секунды, будем меняться параметр.
  7. Возврат в режим отображения параметра - нажать на Touch кнопку в течении 4-х секунд (пока не погаснет светодиод) и отпустить.
  8. При отображении параметра, если нажать на Touch кнопку в течении 1 секунды и отпустить, то отобразится следующий в списке параметр.

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

Следующая запись Предыдущая запись