Продолжение статьи "Визуализация данных считываемых с ELM327 адаптера через bluetooth на arduino".
После проведения тестирования схемы из статьи выше, были обнаружены проблемы. Схема временами теряла связь с ELM327 адаптером и потом переставала подключаться и зависала на попытке пересоединения, причем при отладке получалось, что проблема возникала именно в реализации SoftwareSerial.
Решением было - добавить срабатывание Watchdog таймера, который есть у Arduino Nano. Но возникла проблема, загрузчик Nano некорректно обрабатывал ситуацию со сработавшим таймером и было решено перепрошить Nano другим загрузчиком Optiboot.
Для перепрошивки я решил использовать Arduino UNO и подключил как показано на схеме:
ISP разъем Nano (для проверки правильности соединения проводов)
ИМХО наиболее понятная схема. Сам процесс перепрошивки описан в статье
Здесь я сделаю вырезки из статьи на случай, если сама статья станет закрытой:
Если взять Arduino UNO, в качестве программатора, и последнию на данный момент версию Arduino IDE v1.6.5, то алгоритм будет следующий:
- Добавить содержимое файла boards-1.6.txt из пакета optiboot в конец файла hardware/arduino/avr/boards.txt в директории с Arduino IDE.
- В Arduino Uno, загрузить скетч из File → Examples → ArduinoISP.
- Соединить программатор с целевой Arduino Nano следующим образом:
В Arduino IDE в меню Tools установить настройки как на скриншоте:
Выбрать пункт меню 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.
Схема вышла вот такой:
Плата состоит из двух частей, на одной расположены Arduino Nano и разъемы для соединения OLED, Touch Button, диода и кнопок. Все эти элементы кроме Arduino Nano сделаны выносными, чтоб можно было прикрепить к корпусу в различных положениях.
На второй, маленькой платке располагается BlueTooth коннектор. Так сделал, чтоб разместить в корпус типа "стаканчик", чтоб можно было поместить устройство в подстаканник автомобиля.
Первую плату не получилось развести с одной стороны, поэтому второй слой(обозначен зеленым цветом) пришлось сделать навесным монтажем.
Вот как выглядит корпус:
Стакан под плату:
и крышка на стакан, куда крепятся дисплей и кнопки:
Все сопутствующие файлы для KiCad и stl так же расположены в папках проекта.
Ниже видео с демонстрацией работы устройства.
Инструкция работы программы
- При включении питания в положение "On" и второго переключателя в положение "On", устройство переходит в режим стирания ПЗУ и забывает устройство с которым было сопряжено. Диод в этот момент мигает.
- При переключении второго переключателя в "Off", а питания в "On", визуализатор переходит в состояние поиска доступных блутуз устройств (если ранее визуализатор не был сопряжен) или если ранее был сопряжен, то пытается соединиться с ELM327 адаптером.
- Если визуализатор перешел в состояние сканирования устройств - на экране выводится Try to find devs... В течении 30 секунд идет поиск устройств и после этого выводятся MAC всех найденных устройств по очереди. Каждое найденное устройство отображается в течении 10 секунд, если в момент отображения прикоснуться к Touch кнопке, то MAC устройства будет запомнен в ПЗУ и визуализатор попытается с устройством установить связь.
- Если ни один из MAC не подошел, устройство будет повторно сканировать наличие блутуз устройств и ждать выбора.
- Если сопряжение было установлено, то визуализатор пытается установить связь с устройством на скорости от 4800 до 35000 Baud, если удалось установить связь, то проверяется их ПЗУ последний отображаемый параметр, в этот момент диод постоянно загорается
- В режиме отображения параметра, если нажать на Touch кнопку в течении 4х секунд (до того как погаснет диод) и отпустить, то появится меню доступных параметров, при нажатии на Touch кнопку в течении 1 секунды, будем меняться параметр.
- Возврат в режим отображения параметра - нажать на Touch кнопку в течении 4-х секунд (пока не погаснет светодиод) и отпустить.
- При отображении параметра, если нажать на Touch кнопку в течении 1 секунды и отпустить, то отобразится следующий в списке параметр.