Парктроник на ардуино схема
Подключить пьезо пищалку к Arduino можно несколькими способами. На этом занятии продолжим изучение микроконтроллера Arduino на простых примерах. Соберем электрическую схему с пьезодинамиком (зуммером) на макетной плате. Рассмотрим устройство пьезоизлучателей, назначение процедуры void setup() и void loop(), а также свойство функции tone() в языке программирования Arduino IDE.
Устройство пьезоизлучателя (пьезодинамика)
Благодаря низкой стоимости и малого потребления энергии, по сравнению с динамиками, пьезокерамические излучатели звука (пьезодинамики) — акустические устройства для воспроизведения звука, использующие пьезоэлектрический эффект. Пьезоизлучатели получили широкое распространение: их используют в различных устройствах — будильниках, телефонах, игрушках и в другой технике.
По сравнению с традиционными электромагнитными преобразователями звука, пьезоизлучатели имеют простую конструкцию. Пьезокерамический излучатель состоит из металлической пластины, на которую нанесена пьезоэлектрическая керамика, имеющая токопроводящее напыление. Пластина и напыление являются контактами пьезоизлучателя (буззера), при этом устройство имеет полярность — плюс и минус.
Активный и пассивный зуммер отличия
Многих интересует чем отличается активный зуммер от пассивного? Активный зуммер будет сам генерировать звук, используя свой генератор, и для него требуется напряжение постоянного тока. Пассивный зуммер требует ШИМ сигнала, чтобы генерировать звук. Чтобы идентифицировать активный зуммер, приложите к нему постоянное напряжение, если buzzer запищит, то он является активным.
Подключение пьезоизлучателя к Ардуино
Для этого занятия потребуется:
После того, как вы собрали схему и подключили пьезоизлучатель и Arduino, как на картинке выше, загрузите следующий скетч в микроконтроллер Arduino Uno. Воспроизведение звука на Ардуино выполняется функцией tone() , где в скобках указывается номер пина и частота звука. Чтобы отключить звук на зуммере (пьезодинамике Ардуино) необходимо использовать функцию noTone() .
Скетч включения пьезодинамика функцией tone
Пояснения к коду:
- процедуры setup и loop Ардуино должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками;
- каждой открывающей фигурной скобке < всегда соответствует закрывающая >. Они обозначают границы некого логически завершенного фрагмента кода. Следите за вложенностью фигурных скобок в программе.
Скетч плавного изменения частоты зуммера
Пояснения к коду:
- для изменения частоты активного зуммера Ардуино используется цикл for, с помощью которого мы перебираем частоту звука от 0 до 500 и обратно.
Заключение. Мы рассмотрели, как включить пьезодинамик (пищалку) от Ардуино. Данная информация пригодится при создании проектов, в которых требуется звуковой сигнал при включении устройства на плате Arduino или при других случаях. Для уменьшения громкости сигнала активного пьезодинамика Ардуино можно использовать резисторы с разным номиналом, включая их в электрическую цепь.
В этой публикации пойдёт речь о создании простого парктроника на базе Arduino.
Немного теории. Парктроник или Парковочный радар это устройство предназначенное для отслеживания расстояния между автомобилем и каким — то объектом, как правило парктроники устанавливают с задней части машины.
Даже несмотря на цену ~1936 рублей я решил смастерить свой вариант этого устройства. Начать я решил с малого, и создал наверное самый простой парктроник из всех возможных.
И так от теории к практике, для сборки устройства нам понадобится, 3 светодиода (я взял разных цветов, так проще и нагляднее); Пьезоизлучатель с генератором*; Ультразвуковой дальномер HC-SR04; Резистор на 220 ом и мощностью 0.25 ватта (хотя уместны и другие, большая мощность тут не к чему) и Arduino любой модели.
- GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор.
- VCC (+) у дальномера соеденяем с пином +5V Arduino, Trig в 10, Echo в 11, а куда GND думаю уже ясно.
Я не собирал готовое устройство потому что сейчас работаю на новой моделью ПОН-2 с четырёхразрядным семисегментным индикатором.
Немного фото, видео, и картинок:
* Пьезозлучатель с генератором выглядит примерно так:
Работа устройства в картинках:
Кусок кода программы и информацию о дальномере HC-SR04 я получил с этого сайта
Подключение осциллографа полностью подтвердило эту гипотезу:
Канал A — CS, B — CLK, D — DATA.
Пару выходных дней, несколько вечеров и у меня был уже готовый прототип на макетке (с ардуино-nano), который уверенно получал данные от основного блока парктроника и производил их декодирование. Выбор парктроника оправдался — даже уровни согласовывать не пришлось.
После этого парктроник был установлен в автомобиль и основное место разработки переместилось туда.
Часть вторая: Слушаем
Схема устройства совершенно не блещет какой-то оригинальностью: используются типовые схемы включения всех составляющих (из их даташитов). На всякий случай вывел почти все свободные порты ввода-вывода на дополнительный разъем (вдруг что-то еще придет в голову в процессе реализации?). Естественно, для программатора развел ICSP.
На первом этапе решил (для простоты) подключиться к диагностическому разъему, благо в нем MS-шина присутствует. Где именно в разъеме следует искать, подсмотрел тут.
Часть третья: Говорим
Собрал дома небольшой тестовый стенд, состоящий из моего устройства и этого дисплея. Отработка на стенде — значительно комфортнее, чем в машине, зимой на улице.
Параллельно нашел замечательный комментарий:
You can send the 3 frames with the following IDs:
0x28F: LCD settings and probably some other settings (you just send the same data you receive in a normal 0x28f frame).
0×290: 0xC0 (first byte) followed by first 5 alfanum signs
0×291: 0×85 (first byte) followed by the next 7 alfanum signs
all of them, just after you receive the 0×291 frame id sent by the HU. This will make your text being visible with almost no flicker at all.
The reason for sending the 0x28F is that it is required for displaying the 0×290 and 0×291 text, otherwise the LCD seems to simply ignore the 0×290 and 0×291.
Another method would be to set a timer with a 150ms interrupt and send the 3 frames described above.
0x28F frame content that I have used:
hex: D1 00 00 00 80 00 00 01
Таким образом, для того, чтобы дисплей отобразил передаваемый текст нужно передавать три посылки (при первых тестах я передавал только две и из-за этого дисплей отказывался отображать мой текст).
Часть четвертая: Логика
Естественно, при парковке такую логику соблюсти невозможно, в этом случае на дисплей должна выводиться только информация с парктроника).
В домашних условиях написал основную часть кода, на тестовом дисплее все выглядело более-менее прилично. Но после визита в машину, вылезли серьезные…
В общем, работает, но совсем не так, как хотелось бы.
Получилось вот такое устройство:
Часть шестая: Тесты
На видео видно, что вывод практически идентичен, и в некоторых случаях на дисплее Mazda информация появляется на доли секунды раньше (что совсем неплохо).
После того, как были отлажены основные части прошивки, решил установить свою разработку в машину, чтобы уже устроить серьезную тестовую эксплуатацию.
И тут обнаружилась следующая проблема:
Пропала информация блока климат-контроля (правая часть дисплея). Как оказалось, это не единственная пропажа — маршрутный компьютер тоже отказался показывать свою информацию.
- 0x38A обязательная отправка, без этого не работает маршрутник
- 0x400 данные маршрутника
- 0x3BA климат
- 0x201 текущие параметры (скорость, обороты)
После того, как в код прошивки добавлены правила для прямой трансляции собщений с этими идентификаторами на дисплей — все заработало так, как надо.
Часть седьмая: "… и поскакал!"
В процессе поиска различной информации зарегистрировался на форуме владельцев Mazda5 — поделился своими наработками, показал, как получается. Оказалось, что этот проект интересен не только мне. В конференции помогали искать необходимую информацию, подсказывали возможные функции.
В ходе обсуждения выяснилось, что не во всех комплектациях есть маршрутный компьютер, но замена дисплея на другой — добавляет эту функцию. Это говорило о том, что данные есть в шине, а функцию отображения в каких-то комплектациях реализовали, в других — нет (причем, это реализовано в прошивке дисплея).
- средняя скорость,
- мгновенный расход топлива,
- средний расход топлива,
- запас хода на остатке топлива.
Вообще о процессе поиска данных надо рассказать более подробно - это может показаться интересным (и полезным для подобного реверсинжиниринга).
Раз данные есть — нужно их как-то использовать.
Сразу же добавил своему модулю функцию оповещения о незакрытых дверях на скорости выше 10 км/ч.
Да, на приборной панели есть штатный индикатор незакрытых дверей, но он только сигнализирует об этом факте, но не уточняет, какая именно дверь не закрыта.
Потом вспомнил, что на Peugeot была штатная функция автоматического запирания дверей на скорости. Очевидно, что тут тоже такую же функцию добавить… но уже не на прототипе (к сожалению, управление центральным замком в Mazda невозможно через CAN-шину, хотя в некоторых других машинах это вполне реально).
Естественно, пригодились все полученные знания в процессе создания и эксплуатации прототипа (тот же резистор на 120Ом в CAN-шине для работы дисплея).
При этом получилось, что все подключения к проводке машины можно было сделать непосредственно за дисплеем (там очень объемная пустая ниша и присутствуют все необходимые сигнальные провода).
Часть восьмая: Продакшн
Устройства произвели не слишком оперативно — на это ушло почти 3 недели. Но почта увеличила срок ожидания еще почти на месяц. Но не будем о грустном, поскольку получилось неплохо:
Часть девятая: Настройки
Вообще было достаточно сложно и интересно было придумывать реализацию такого меню, когда доступен дисплей в одну строку и всего в 12 символов.
Несколько дней тестировал изделие в своем авто — никаких нареканий, все работает отлично.
Часть десятая: Продолжение?
На текущий момент все платы отправлены их новым владельцам. Как только они будут установлены, надеюсь, получу дополнительные отзывы.
Перед отправкой успел одну из плат подключить к Mazda CX-7 — почти все заработало сразу (некоторые данные маршрутного компьютера закодированы чуть иначе), но в целом — подключение прошло успешно.
Сейчас устройство (с текущей прошивкой) проверено на Mazda3, 5, 6 (там где дисплеи похожи на те, что я использовал в процессе разработки).
После адаптации прошивки, думаю, устройство может оказаться полезным практически на любом современном авто, где вывод на дисплей (или приборную панель) осуществляется через MS-CAN.
Часть последняя: Arduino?
Ответ очень прост: все программирование я делал в среде Arduino.
В этом крафте покажу как сделать парктроник на Arduino при помощи ультразвукового дальномера HC-SR04. Дешевый и простой в использовании дальномер подойдет также для создания навигации в робототехнике, чтобы объезжать препятствия. Его также можно использовать при создании сигнализации или управлении освещением.
Ультразвуковой шилд HC-SR04 для Arduino или Ultrasonic sensor, работает по принципу эхо-локации излучает звуковую волну и принимает отраженный эхо-сигнал. Время между отправленным и принятым сигналом можно преобразовать в расстояние.
Видео ультразвуковой парктроник на Arduino
Чтобы сделать парктроник своими руками понадобится
- Arduino
- Ультразвуковой дальномер HC-SR04
- Светодиоды — 6шт.
- Резисторы 220Ом — 6шт.
- Провода папа-папа
- Пьезодинамик — 1шт.
- Макетная плата
Делаем парктроник при помощи Arduino и датчика HC-SR04
На макетной плате размещаем 6 светодиодов. У светодиодов минус будет общим. Катод ( короткая ножка) подсоединяем к минусовой шине на макетной плате.
К длинным ножкам светодиодов (анод) подключаем резистор 220Ом, без него светодиод сгорит.
По центру устанавливаем ультразвуковой датчик.
Дальномер HC-SR04 имеет 4 ножки:
К ножкам датчика парктроника подключаем провода. Echo будет соединен с 12-м контактом, а Trig с 13-м. GND к земле на плате микроконтроллера, а Vcc соответственно к выводу 5В на Arduino.
Также подключаем провода к ножкам резисторов. И последовательно к пинам Arduino от 2 до 7.
Пьезопищалка имеет два контакта плюс и минус. Отрицательный контакт можно объединить с минусом от ультразвукового дальномера. А положительный соединить с 11 пином на плате Arduino UNO.
Код программы для парктроника на Arduino
Чтобы схема парктроника на Arduino заработала, необходимо написать и загрузить скетч (код программы).
При приближении на указанную в скетче дистанцию будут загораться последовательно светодиоды и звучать сигнал разной тональности, который предупредит об опасном сближении.
Подключение осциллографа полностью подтвердило эту гипотезу:
Канал A — CS, B — CLK, D — DATA.
Пару выходных дней, несколько вечеров и у меня был уже готовый прототип на макетке (с ардуино-nano), который уверенно получал данные от основного блока парктроника и производил их декодирование. Выбор парктроника оправдался — даже уровни согласовывать не пришлось.
После этого парктроник был установлен в автомобиль и основное место разработки переместилось туда.
Часть вторая: Слушаем
Схема устройства совершенно не блещет какой-то оригинальностью: используются типовые схемы включения всех составляющих (из их даташитов). На всякий случай вывел почти все свободные порты ввода-вывода на дополнительный разъем (вдруг что-то еще придет в голову в процессе реализации?). Естественно, для программатора развел ICSP.
На первом этапе решил (для простоты) подключиться к диагностическому разъему, благо в нем MS-шина присутствует. Где именно в разъеме следует искать, подсмотрел тут.
Часть третья: Говорим
Собрал дома небольшой тестовый стенд, состоящий из моего устройства и этого дисплея. Отработка на стенде — значительно комфортнее, чем в машине, зимой на улице.
Параллельно нашел замечательный комментарий:
You can send the 3 frames with the following IDs:
0x28F: LCD settings and probably some other settings (you just send the same data you receive in a normal 0x28f frame).
0×290: 0xC0 (first byte) followed by first 5 alfanum signs
0×291: 0×85 (first byte) followed by the next 7 alfanum signs
all of them, just after you receive the 0×291 frame id sent by the HU. This will make your text being visible with almost no flicker at all.
The reason for sending the 0x28F is that it is required for displaying the 0×290 and 0×291 text, otherwise the LCD seems to simply ignore the 0×290 and 0×291.
Another method would be to set a timer with a 150ms interrupt and send the 3 frames described above.
0x28F frame content that I have used:
hex: D1 00 00 00 80 00 00 01
Таким образом, для того, чтобы дисплей отобразил передаваемый текст нужно передавать три посылки (при первых тестах я передавал только две и из-за этого дисплей отказывался отображать мой текст).
Часть четвертая: Логика
Естественно, при парковке такую логику соблюсти невозможно, в этом случае на дисплей должна выводиться только информация с парктроника).
В домашних условиях написал основную часть кода, на тестовом дисплее все выглядело более-менее прилично. Но после визита в машину, вылезли серьезные…
В общем, работает, но совсем не так, как хотелось бы.
Получилось вот такое устройство:
Часть шестая: Тесты
На видео видно, что вывод практически идентичен, и в некоторых случаях на дисплее Mazda информация появляется на доли секунды раньше (что совсем неплохо).
После того, как были отлажены основные части прошивки, решил установить свою разработку в машину, чтобы уже устроить серьезную тестовую эксплуатацию.
И тут обнаружилась следующая проблема:
Пропала информация блока климат-контроля (правая часть дисплея). Как оказалось, это не единственная пропажа — маршрутный компьютер тоже отказался показывать свою информацию.
- 0x38A обязательная отправка, без этого не работает маршрутник
- 0x400 данные маршрутника
- 0x3BA климат
- 0x201 текущие параметры (скорость, обороты)
После того, как в код прошивки добавлены правила для прямой трансляции собщений с этими идентификаторами на дисплей — все заработало так, как надо.
Часть седьмая: "… и поскакал!"
В процессе поиска различной информации зарегистрировался на форуме владельцев Mazda5 — поделился своими наработками, показал, как получается. Оказалось, что этот проект интересен не только мне. В конференции помогали искать необходимую информацию, подсказывали возможные функции.
В ходе обсуждения выяснилось, что не во всех комплектациях есть маршрутный компьютер, но замена дисплея на другой — добавляет эту функцию. Это говорило о том, что данные есть в шине, а функцию отображения в каких-то комплектациях реализовали, в других — нет (причем, это реализовано в прошивке дисплея).
- средняя скорость,
- мгновенный расход топлива,
- средний расход топлива,
- запас хода на остатке топлива.
Вообще о процессе поиска данных надо рассказать более подробно - это может показаться интересным (и полезным для подобного реверсинжиниринга).
Раз данные есть — нужно их как-то использовать.
Сразу же добавил своему модулю функцию оповещения о незакрытых дверях на скорости выше 10 км/ч.
Да, на приборной панели есть штатный индикатор незакрытых дверей, но он только сигнализирует об этом факте, но не уточняет, какая именно дверь не закрыта.
Потом вспомнил, что на Peugeot была штатная функция автоматического запирания дверей на скорости. Очевидно, что тут тоже такую же функцию добавить… но уже не на прототипе (к сожалению, управление центральным замком в Mazda невозможно через CAN-шину, хотя в некоторых других машинах это вполне реально).
Естественно, пригодились все полученные знания в процессе создания и эксплуатации прототипа (тот же резистор на 120Ом в CAN-шине для работы дисплея).
При этом получилось, что все подключения к проводке машины можно было сделать непосредственно за дисплеем (там очень объемная пустая ниша и присутствуют все необходимые сигнальные провода).
Часть восьмая: Продакшн
Устройства произвели не слишком оперативно — на это ушло почти 3 недели. Но почта увеличила срок ожидания еще почти на месяц. Но не будем о грустном, поскольку получилось неплохо:
Часть девятая: Настройки
Вообще было достаточно сложно и интересно было придумывать реализацию такого меню, когда доступен дисплей в одну строку и всего в 12 символов.
Несколько дней тестировал изделие в своем авто — никаких нареканий, все работает отлично.
Часть десятая: Продолжение?
На текущий момент все платы отправлены их новым владельцам. Как только они будут установлены, надеюсь, получу дополнительные отзывы.
Перед отправкой успел одну из плат подключить к Mazda CX-7 — почти все заработало сразу (некоторые данные маршрутного компьютера закодированы чуть иначе), но в целом — подключение прошло успешно.
Сейчас устройство (с текущей прошивкой) проверено на Mazda3, 5, 6 (там где дисплеи похожи на те, что я использовал в процессе разработки).
После адаптации прошивки, думаю, устройство может оказаться полезным практически на любом современном авто, где вывод на дисплей (или приборную панель) осуществляется через MS-CAN.
Часть последняя: Arduino?
Ответ очень прост: все программирование я делал в среде Arduino.
Читайте также: