Блог сообщества Arduino для автомобиля — DRIVE2
Доброго времени суток уважаемые форумчане. Предупреждаю сразу, кто пишет на Си или пользуется готовыми библиотеками, Вам это будет неинтересно, переходите к следующему посту в ленте. Я не очень люблю…
1 год<\p>
Привет! Постепенно собираю свою союственную плату, которая сможет коммутировать необходимые мне сигналы с автомобиля всконтроллер для обработки и вывода данных в цифровом виде! Своего рода бортовой ко…
1 год<\p>+3 фотографии
Давно я интересовался микроконтроллерами, но все никак не мог придумать, как же подступиться к этой теме. Ситуацию усложняло то, что язык C для меня вызывал стойкую ассоциацию с национальными языками…
1 год<\p>
Завершающий на ближайшее время пост про генераторы на Ардуино. В комментариях ко второй версии некто MozgiNaStene91 написал что есть готовый проект до до 8 МГц. Я конечно открыл, посмотрел. В общем, п…
1 год<\p>
В продолжение постов про генераторы хотел бы затронуть транзистор-тестер (ESR tester) на базе ардуинного процессора ATMEL 328P. После его прошивки со сток на модифицированную, появляется возможность и…
1 год<\p>
Прошлый генератор прямоугольных импульсов на энкодере (“GENERATOR ver.1”) получился неплохим, но ограничение в 8 кГц кого то может не устроить. Конечно, можно его разогнать до 32 кГц, но для этого при…
1 год<\p>
Добавил кириллицу для стандартного табло Написал 3 демо скетча для передачи фраз на табло через блютуз онлайн. Ранее я использовал МАХ7219. Решил попробовать стандартное табло.Пока для установки н…
1 год<\p>+6 фотографий
Посмотрел видео и тоже собрал себе небольшую коробочку. Заморачиваться особо не надо, все комплектующие из блоков, МК — Ардуино Нано, переключатель реализовал на энкодере (на 20 положений). Немного по…
1 год<\p>
Продублирую тут.Некоторое время назад занялся CAN шиной. Наконец созрела статья, как сделать простейший кан сниффер для Астры (легко адаптировать к любой другой марке, конечно). Начнём сразу со схемы!…
1 год<\p>
Всем привет. Ха, вы таки думаете, что все так просто? Ан нет. Имеется несколько Nano (из одной партии). Robotdyn, раньше вообще проблем не было. Но не в этот раз. Некоторые прошиваются без проблем,…
1 год<\p>
Приветствую всех. в связи с переводом моего форда на эбу январь (от ваза), у меня встал вопрос по приборной панеле. встоке она работает по кан шине и с январём её не подружить простыми путями. ездить…
1 год<\p>
в Honda Prelude одометр из XX века, механический, на барабанчиках, за 20 с лишним лет… умер, было решено заменить его на электронный с бриджем и светскими дамами, но что бы подходил по стилю. Присмат…
1 год<\p>
Решил добавить в машину дополнительные приборы, но что бы не строить грядку из показометров, использовал второй блок штатных вакуумно-люминесцентных индикаторов уровня топлива и температуры охлаждающе…
1 год<\p>
Видел на сайте много разных бортовых компьютеров, и на атмеге и на ардуинке, некоторые слишком умные, у меня нет разъёма OBD, поэтому решил собрать свой БК, 2 термометра, вольтметр и тахометр, порылс…
1 год<\p>
Обновление от 07.09.2017 + Neowey M590E и реле 2 канала Ребят может кому пригодятся макросы для навесного монтажа популярных плат Arduino. Собираем так сказать красиво, просто и без бороды проводов…
1 год<\p>
Знакомый, не знакомого у которого тоже есть знакомый. короче, в парке аттракционов навернулся контроллер, который расположен, понятное дело на детском аттракционе, который является машинкой. (сообщест…
1 год<\p>
Доброго времени суток всем. Недавно заморочился переделкой доп. стоп сигнала. Есть некоторые проблеммы в программировании: Есть кнопка которой можно переключать режим работы при этом после нажатия вы…
1 год<\p>
Источник: https://www.drive2.ru/communities/941/blog/?page=2
Arduino в автомобиле. Озвучивание панели приборов
Говорящее устройство рассчитано на тех, кто не замечает лампочки на панели приборов, и периодически ловит себя на том, что едет с ручником или дальним светом. Или что стрелка спидометра незаметно уползла сильно вперёд… Ага, для себя делал.
Проверялось на (заточено на) Daewoo Nexia N150, но должно работать на любой машине с электронным спидометром (датчик скорости — 6 импульсов на метр, вроде как стандарт). Фотографии немного мутные (любительские):
Функционал:1.
Говорит голосом (5 уровней громкости) о различных событиях (события описаны далее) а) мужским б) женским Голоса синтезированы на компьютере, записаны в виде набора mp3-файлов на микроСД карту. Это значит, что вы можете их поменять или записать.
2.
Настройки выполняются с ПДУ от телевизора (или любого другого с достаточным количеством кнопок, настоятельно рекомендую ПДУ с кнопками 0-9). Настройки запоминаются в момент изменения.
3. В случае отказа/потери ПДУ, извещатель может быть оперативно переключен на режимы «нет звуков» или «нет звуков, кроме ручника». Для этого используется тройное включение габаритов (идея использовать мигание габаритами в качестве управляющего сигнала для настройки спёрта с какого-то устройства регулировки яркости ДХО).
Озвучиваемые события (отключаемые)— Ручник (если горит лампочка ручника во время движения) — Включен дальний свет (мигание дальним игнорируется, предупреждает один раз после включения, далее не напоминает, пока дальний не переключат) — Включите ходовые огни (если начато движение без включенных габаритов, у меня ДХО и ближний не работают, если не включены габариты). — Напряжение бортовой сети (точность до десятой доли вольта) — Превышение порога скорости 40, 50,… 120, 130 км/ч. — Понижение порога скорости 40, 50,… 120, 130 км/ч. — Изменение громкости, переключение голоса, отключение/включение каждого из озвучиваемых событий (включение вольтметра вызывает одновременно озвучивание напряжения). Видео с демонтрацией:
Подключение к авто1. К спидометру — сразу три провода: земля, +12 (отсюда берём питание на устройство и данные для вольтметра), сигнал от датчика скорости.
2. К лампочкам — ручника, дальнего света, подсветки приборов (габариты).
Согласование уровней сделано довольно просто — выводы ардуины подтянуты внутренним резистором в «1», а сигналы 12В уровня из приборной панели идут через диоды. Когда с панели идет +12, диод закрыт — на ардуине «лог.1».
Когда сигнал с панели идет землёй — диод открыт, внутренний подтягивающий резистор игнорируется, на выводе ардуино «лог.0». Вольтметр — просто резистивный делитель на аналоговый вход.
Отношение примерно 1:13, из того расчета, что при максимальном напряжении бортовой сети 16В (аварийный режим) АЦП достигнет своего предела при опорном сигнале 1,2В.
Состав устройства1. Arduino nano v3
2.
Модуль mp3 — DFplayer mini Данный модуль в интернет-схемах подключается по tx/rx сигналам, я добавил анализ сигнала busy, для поимки момента окончания воспроизведения звука, чтоб новое оповещение не перебивало текущее, а вставало в очередь.
3. Усилитель PAM8403 (необязательный элемент)
4. Макетная плата, 5 резисторов (2 на АЦП вольтметра, и 3 на выводы DFplayer), 4 диода (согласование с +12В), а также пара конденсаторов и микросхема стабилизатора питания +5В типа LM7805 (у меня стоит DC/DC преобразователь AMSR 7805, потому что был в запасе и не греется), пъезозуммер (пищит при переполнении очереди мр3-файлов, больше для поиска ошибок при отладке), разъемы для подключения ИК-датчика (джек 2.5 в моем случае, но это непринципиально) и динамика (я взял RCA), ну и разъем для панели приборов (я взял IDC10, с защелками на папе — достаточно легкий и многоконтактный)
Прошивка:Из текста прошивки можно легко увидеть, куда заведены все анализируемые сигналы, куда прописать коды вашего
Источник: https://habr.com/post/401671/
Arduino для автомобиля, а как это подключить? — Community «Arduino для автомобиля» on DRIVE2
Привет всем, разработка частично освещенная здесь: www.drive2.ru/c/469589872424780508/ двигается семимильными шагами. Дошел до железной части, встал вопрос, а каким образом вообще мне все это подключить так, чтобы ничего не сгорело и все работало.
Схема такая, ардуина подключенная к штатным авто — датчикам (датчик температуры окружающего воздуха, датчик уровня топлива, датчик скорости, блок управления двигателем), снимает показания и отправляет их на Android через последовательный интерфейс (USB — OTG).
Если изобразить все это, то получится так:
То как это должно быть в теории, когда все будет закончено
И тут начинается небольшое непонимание ситуации. Для того, чтобы Arduino смогла снимать показания датчиков, очевидно, что нужно чтобы ее земля — была общей с землей авто.
В случае когда телефон запитан напрямую от автомобильного аккумулятора, это условие соблюдается верно? (или я ошибаюсь уже тут?).
То есть следуя схеме, авто — аккум, питает планшет, от планшета в свою очередь питается Arduino земля у всех девайсов общая, проблем со снятием показаний датчиков нет. Поправьте меня если я не прав уже на этом шаге, поскольку дальше будет интересней.
Очевидно, что на этапе разработки я не буду подключать все так как на схеме, у меня должна быть возможность принести все это барахло в машину, подключить, испытать и унести домой. Первое решение в лоб, было таким:
Похоже, что так работать ничего не будет
Планшет питает Arduino от своего собственного аккумулятора, похоже, что так работать ничего не будет, поскольку Arduino не сможет снимать показания автомобильных датчиков, т. к. у ардуины и авто — нет общей земли, поэтому разницы потенциалов между выходом датчика и ардуиновской землей не будет. Это верно?
Начал искать как решить проблему, наткнулся на кабель “USB — OTG с внешней зарядкой”, нашел, купил:
Zoom
USB — OTG с внешней зарядкой
Подключил, и как с телевизором тем, купил, включил, не работает. Ну то есть подключаю телефон к нему, подключаю внешнюю зарядку — телефон не заряжается, подключаю Arduino — коммуникация между планшетом и Arduino — работает.
Отключаю внешнее питание, Arduino — работает (то есть питается от планшета), отключаю планшет, Arduino — питается от внешней зарядки. Короче кабель работает, но как то странно.
Я думал, что внешняя зарядка будет заряжать мне и планшет и питать Arduino — тем самым я бы получил искомую общую землю у всех девайсов, на деле же выходит, что планшет от него не заряжается вообще, вместо этого:
— Arduino + зарядка — ардуино питается от зарядки— Arduino + планшет — ардуино питается от планшета
— Arduino + планшет + зарядка — планшет не заряжается, коммуникация работает, Arduino работает, а вот от чего? От аккумулятора планшета или зарядки?
Вообщем запутался я совсем, помогайте!
Дополню немного, соединение между автомобилем и Arduino — выглядит так:
то как подключается Arduino
Апдейт:
Совместными усилиями вырисовывается вот такая схема:
Планшет в безопасности так как зарядку при подключении OTG — он брать не имеет права?
Какие подводные камни тут?
Источник: https://www.drive2.com/c/469947213703807957/
Подключение дисплея LCD 1602 к arduino по i2c / IIC
LCD дисплей – частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов.
Выходом в этой ситуации может стать I2C /IIC переходник, который подключает практически стандартный для Arduino экран 1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов.
В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.
Жк дисплей arduino lcd 1602
Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино.
Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano.
Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.
Краткое описание пинов LCD 1602
Давайте посмотрим на выводы LCD1602 повнимательней:
Каждый из выводов имеет свое назначение:
- Земля GND;
- Питание 5 В;
- Установка контрастности монитора;
- Команда, данные;
- Записывание и чтение данных;
- Enable;
7-14. Линии данных;
- Плюс подсветки;
- Минус подсветки.
Технические характеристики дисплея:
- Символьный тип отображения, есть возможность загрузки символов;
- Светодиодная подсветка;
- Контроллер HD44780;
- Напряжение питания 5В;
- Формат 16х2 символов;
- Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
- Угол обзора 180 градусов.
Схема подключения LCD к плате Ардуино без i2C
Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.
Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.
Где купить i2c 1602 экраны для ардуино
LCD экран 1602 довольно популярен, поэтому вы без проблем сможете найти его как в отечественных интернет-магазинах, так и на зарубежных площадках. Приведем несколько ссылок на наиболее доступные варианты:
Описание протокола I2C
Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.
I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips.
В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами.
Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.
Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.
Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.
В работе I2C можно выделить несколько преимуществ:
- Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
- Подключение большого количества ведущих приборов.
- Уменьшение времени разработки.
- Для управления всем набором устройств требуется только один микроконтроллер.
- Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
- Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
- Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
- Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.
Недостатки:
- Существует емкостное ограничение на линии – 400 пФ.
- Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
- При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.
Модуль i2c для LCD 1602 Arduino
Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево.
А вот разнообразных стандартных экранов выпущено уже огромное количество.
Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:
С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.
Для подключения к плате ардуино используются i2c выходы. Если нужно, подключаем внешнее питание для подстветки. С помощью встроенного подстроечного резистора мы можем настроить настраиваемые значения контрастности J
На рынке можно встретить LCD 1602 модули с уже припаянными переходниками, их использование максимально упощено. Если вы купили отдельный переходник, нужно будет предварительно припаять его к модулю.
Подключение ЖК экрана к Ардуино по I2C
Для подключения необходимы сама плата Ардуино, дисплей, макетная плата, соединительные провода и потенциометр.
Если вы используете специальный отдельный i2c переходник, то нужно сначала припаять его к модулю экрана. Ошибиться там трудно, можете руководствоваться такой схемой.
Жидкокристаллический монитор с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания.
- Вывод GND подключается к GND на плате.
- Вывод VCC – на 5V.
- SCL подключается к пину A5.
- SDA подключается к пину A.
И это все! Никаких паутин проводов, в которых очень легко запутаться. При этом всю сложность реализации i2C протокола мы можем просто доверить библиотекам.
Библиотеки для работы с i2c LCD дисплеем
Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:
- Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
- Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h
Скачать библиотеку для работы с экраном I2C LiquidCrystal_I2C.
После подключения к скетчу всех необходимых библиотек мы создаем объект и можем использовать все его функции. Для тестирования давайте загрузим следующий стандартный скетч из примера.
#include #include // Подключение библиотеки
//#include // Подключение альтернативной библиотеки LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 – 2 строки по 16 символов в каждой //LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 void setup()
{ lcd.init(); // Инициализация дисплея lcd.backlight(); // Подключение подсветки lcd.setCursor(0,0); // Установка курсора в начало первой строки lcd.print(“Hello”); // Набор текста на первой строке lcd.setCursor(0,1); // Установка курсора в начало второй строки lcd.print(“ArduinoMaster”); // Набор текста на второй строке
}
void loop()
{
}
Описание функций и методов библиотеки LiquidCrystal_I2C:
- home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
- write(ch) – позволяет вывести одиночный символ ch на экран.
- cursor() и noCursor() – показывает/скрывает курсор на экране.
- blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
- display() и noDisplay() – позволяет подключить/отключить дисплей.
- scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
- autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
- leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
- createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.
Альтернативная библиотека для работы с i2c дисплеем
В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.
Скачать библиотеку можно на нашем сайте. Библиотека также встроена в последние версии Arduino IDE.
Проблемы подключения i2c lcd дисплея
Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия.
Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.
Если это не помогло, то проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.
Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F.
У разных производителей могут быть зашиты разные адреса по умолчанию.
Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Пример скетча i2c сканера.
Если экран все еще останется нерабочим, попробуйте отпаять переходник и подключить LCD обычным образом.
Заключение
В этой статье мы рассмотрели основные вопросы использования LCD экрана в сложных проектах ардуино, когда нам нужно экономить свободные пины на плате. Простой и недорогой переходник i2c позволит подключить LCD экран 1602, занимая всего 2 аналоговых пина.
Во многих ситуациях это может быть очень важным. Плата за удобство — необходимость в использовании дополнительного модуля — конвертера и библиотеки. На наш взгляд, совсем не высокая цена за удобство и мы крайне рекомендуем использовать эту возможность в проектах.
Источник: https://ArduinoMaster.ru/datchiki-arduino/lcd-i2c-arduino-displey-ekran/
Автономная “смарт” машина на Arduino
Основная идея проекта – создать недорогую автономную четырехколесную подвижную платформу.
В проекте используется логика на базе Arduino, недорогая радиоуправляемая машина, источник питания 9 вольт. В качестве датчиков обратной связи используется инфракрасный передатчик.
Так как оборудование недорогое, можно расценивать эту статью исключительно как общую инструкцию и первый шаг для дальнейших модификаций вашей автономной четырехколесной платформы.
Необходимое оборудование и материалы
- Arduino
- Arduino Мотор шилд
- Радиоуправляемая машина
- Паяльник
- Припой
- Инфракрасный передатчик
- Инфракрасный приемник
- Батарейка 9 В с коннекторами
- Переключатель
*Обратите внимание: если в вашей машине установлена большая плата контроллера, то это, скорее всего, чип TX2 или RX2. Если это так, то вы можете сэкономить немного денег и использовать для двигателей встроенные контроллеры. Хороший пример (на английском языке!) есть здесь.
Разбираем машинку
Ваш первый шаг – разобрать машинку. Снимите корпус и извлеките все платы из машинки. Моторы не трогаем. В проекте нам понадобятся родные шасси, колеса и моторы.
Подготавливаем сенсоры
Подготавливаем электронику. Для начала припаяйте резистор на 100 Ом к одному из контактов на вашем ИК передатчике. Припаиваем провода к другой ноге резистора и ноге датчика. После этого припаиваем два провода к ногам вашего ИК приемника.
Устанавливаем Arduino и датчик
В корпусной части машинки надо сделать отверстия под крепеж вашего контроллера Arduino. Отверстия под крепеж зависят от габаритов подвижной платформы машинки. В данном конкретном случае плата была расположена “перпендикулярно” несущей системе. Подобное расположение удобно еще и тем, что расстояния от двигателей передней и задней подвески до пинов платы примерно одинаковое.
Над передней подвеской устанавливаем наши эмиттер и детектор. Их желательно установить повыше относительно земли. В дальнейшем можно предусмотреть сзади светодиоды, которые будут включаться во время заднего хода машинки.
Переходим к следующему шагу.
Питание
В проекте используется одна батарейка на 9 В (крона). В данном случае ее получилось установить под несущей системой платформы на колесах. Крепим пластиковыми стяжками. В принципе, для увеличения времени автономной работы нашего автомобиля, можно установить две кроны параллельно.
Подключение к Arduino
С подключением можно разобраться и на основании фото. Но на всякий случай, ниже приведена схема подключения в текстовой форме.
Не забывайте, что позитивная нога светодиода – более длинная. Если вы все равно не уверены, можете посмотреть эту инструкцию по подключению светодиодов к Arduino.
ИК светодиод
Позитивный контакт – 5v
Отрицательный контакт – Ground
Сенсор
Позитивный контакт – Analog pin 5
Негативный контакт – Ground
Двигатель
Позитивный контакт – Мотор шилд Channel A +
Негативный контакт – Мотор шилд Channel A –
Двигатель для поворота
Позитивный контакт – Мотор шилд Channel B +
Негативный контакт – Мотор шилд Channel B –
9v
Позитивный контакт – Мотор шилд Vin
Негативный контакт – Мотор шилд Gnd
Программа Arduino
Учитывая специфику проекта, вам надо внести в приведенный ниже базовый скетч достаточно много изменений, которые зависят от размера машинки и колес, скорости вращения колес, веса авто, освещения окружающей среды.
int irsensor = A5;
int motorspeed;
int run = 0;
int measure = 1;
int ambientir = 0;
int distance;
void setup() {
//настройка канала A (Channel A)
pinMode(12, OUTPUT); //инициализация контакта Motor Channel A
pinMode(9, OUTPUT); //Инициализация контакта тормоза – Brake Channel A
pinMode(irsensor, INPUT);
digitalWrite(irsensor, HIGH);
Serial.begin(9600);
}
void loop(){
if(run == 0)
{
delay(1000);
do{
ambientir = ambientir + analogRead(irsensor);
delay(1000);
measure = measure + 1;
}
while(measure < 10);
ambientir = ambientir / 10;
run = run +1;
}
distance = analogRead(irsensor);
if(distance < ambientir - 50){
digitalWrite(12, HIGH); //Обечпечиваем обратное направление вращения ротора на Channel A
digitalWrite(9, LOW); //Отключаем тормоз на Channel A
analogWrite(3, 100); //Вращаем ротор мотора на Channel A на половине максимальных оборотов
}
if(distance > ambientir – 50){
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, 100);
}
Serial.println(distance);
}
Приведенный выше костяк программы для Arduino можно (и даже нужно!) дорабатывать под вашу конкретную конструкцию, но общий концепт вы должны были уловить.
Результат, тестирование и дальнейшие варианты модификаций
Как видите на фото, оригинальный корпус машинки был окрашен в бежевый цвет и установлен на стойках на подвижную четырехколесную платформу.
После тестирования разработанной конструкции можно выделить следующие проблемы:
- Ограниченный диапазон чувствительности сенсора;
- Проблемы, связанные со скоростью машины, а именно – невозможность быстрой остановки;
- Необходимость подстраивать датчик под разные условия освещения;
- Ну и конечно же, дешевый китайский пластик никоим образом не придает автономной машинке на Arduino хорошей жесткости и надежности конструкции.
В принципе, внести компенсацию в зависимости от уровня освещения можно, но это отдельная история и модификация, которые не входили в задачи базового проекта.
Машинка не врезается в стены, но с 90% вероятностью соберет бампером все ножки стульев и столов в комнате. То есть, с обнаружением более мелких препятствий есть явные проблемы. Соответственно, надо либо увеличивать количество эмиттеров, либо использовать более дорогостоящие модели с большей чувствительностью.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Источник: http://arduino-diy.com/arduino-avtonomnaya-smart-mashina
Подключение (питание) Ардуино (Arduino) к бортовой сети автомобиля (видео)
Наши автомобили давно уже стали не просто средством передвижения, а целым комплексным решением сложных и порой высокопроизводительных систем имеющих косвенное отношение к передвижению.
Это и мультимедиа отвечающие за развлечения и комфорт в салоне, и устройства улучшающие визуализацию сигнальных световых огней, и устройства воспроизводящие различные звуковые информационные сигналы, и датчики, а также другие опции. Таким образом, мы прежде хотим охарактеризовать и упомянуть микроконтроллеры и микроэлектронные устройства работающих на наше благо.
При этом такие устройства могут добавляться в наш автомобиль по мере наших пожеланий и возможностей. Одним из таких устройств, своеобразных игрушек и помощников стала Ардуино.
Что такое Ардуино и зачем оно в автомобиле
Вначале давайте о том, что такое Ардиуино, ведь наверное еще не все знают к чему такая вещь в автомобиле.
Надо сказать, без какой-то доли иронии, что это практически готовое функциональное устройство, которое можно настроить путем заливки в нее программы и тем самым заложить определенные полезные функции.
Скажем мигающий стоп-сигнал по вашему алгоритму или ленивый поворотник или обеспечить индикацию и воспроизведение (звук, свет) срабатывания датчиков. Да нам фантазии не хватит перечислить все то, что можно сделать с этим девайсом.
Если кратко, то вы задаете какие-то условия для реализации определенных действий, а вот мозгами обеспечивающими такую работу будет Ардуино. Так что если у вас есть логические задачи, которые вы хотели бы решать в автомобиле, то доверьте это все вашему маленькому помощнику.
Однако, как и все ассистенты, так и наш Ардуино хочет кушать. А питается он электричеством от бортовой сети автомобиля. При этом логика Ардуино работает от 5 и 3,3 вольт. Конечно, штатно в Ардуино стоит стабилизатор напряжения, но его может не хватить для того, чтобы обеспечить должную мощность для питания. Именно поэтому следующий абзац как раз и будет посвящен снижению напряжения для подключения Ардуино.
Какое напряжение питание необходимо Ардуино в автомобиле
Итак, теперь о самом главном, о чем собственно и была написана наша статья. Да, конечно, можно было бы просто направить читателя на страничку «Как преобразовать 12 вольт в 5 вольт на машине», да и забыть про все… Однако раз уж мы взвалили этот груз на свои плечи, то давайте продолжим все же в тематическом ключе.
Если взглянуть в технические характеристики Ардуино то можно найти информацию о том, что Ардуино UNO питается от 9 вольт. На самом деле такое завышенное напряжение вполне оправдано, ведь если подать на Ардуино сразу 5 вольт, то его может не хватить. Все дело в том, что на плате у Ардуино есть свои стабилизаторы напряжения, а они тоже имеют какой-то КПД.
В итоге если подать номинальное рабочее напряжение, то после них оно будет уже ниже номинального из-за собственного сопротивления стабилизаторов. Опять же если подать 12-14 вольт, то этого будет уже многовато. Ведь стабилизаторы, как правило, выполнены в корпусе SOT-223, а в таком корпусе рассеиваемая мощность у стабилизаторов 1117 серии всего-то 0,8 Вт. Давайте прикинем.
Если подключить нагрузку эквивалентную 8-10 светодиодам, то это будет порядка 100 мА. В итоге на штатных стабилизаторах упадет от 7 до 9 вольт. Получается 0,1*9=0,9 Вт. То есть в этом случае микросхема – стабилизатор уже потребует радиатора, которого априори нет в Ардуино. Вот ту мы и приходим к выводу об оптимальном питании в 7-9 вольт.
А дальше Ардуино сама из этого напряжения получит то, что ей надо. Теперь о том, как получить такое напряжение.
Питание (подключение) Ардуино к машине (преобразователи)
Начнем мы с абсурдного, но быть может с того, что кому-то может прийти в голову! При питании Ардуино сразу отказываемся от сопротивлений подключенных последовательно и снижающих напряжение.
При этом не важно, что они мощные и способны рассеивать нужную мощность.
Все дело в том что Ардуино может в разные промежутки времени потреблять разную мощность, а значит токоограничивающее сопротивление должно изменяться, что невозможно при обычном статическом, так его назовем, сопротивлении!
Итак, мы должны иметь динамически изменяющуюся составляющую в питании микроконтроллера. Здесь самое время обратиться к микросхемам – стабилизаторам. Скажем LM7809, 7808 способны выдавать ток до 1,5 А и снижать напряжение. Давайте и здесь прикинем. 14-9=5. 5 вольт надо погасить стабилизатору. Пусть потребляемый ток 150 мА.
В итоге 0,15*5=0,75 Вт надо рассеять будет на корпусе ТО-220. Ну что сказать, все вполне жизненно и реально. Часть тепла рассеется на внешнем стабилизаторе, а часть на штатном.
Опять же повторимся, что не следует брать 7805, так как это будет слишком низкое питание для Ардуино, да к тому же еще и рассеиваемая мощность на таком стабилизаторе подлетит в два раза, то есть надо будет наверняка ставить радиатор.
(Подключение 7809 и 7805 аналогично)
Ну, и если шагать в ногу со временем, то быть может стоит обратить внимание на ШИМ питание. Широко импульсная модуляция это когда напряжение выдается на нагрузку не постоянно, а импульсами. При этом на нагрузке как бы остается среднее значение от суммарного значения импульсов.
В конце концов перерывы между этими импульсами позволяют сэкономить на энергозатратах при питании и не требуют элементов для рассеивания тепла – радиаторов. Единственное ШИМ несколько дороже чем просто микросхемы-стабилизаторы, да и собирать своими руками такую схему вряд ли кто станет.
Проще купить готовый блок, но повторимся это более прогрессивно.
Подводя итог…
Что же, в принципе здесь уже можно подвести итог.
Если у вас возникла необходимость подключения Ардуино к бортовой сети автомобиля, то самым лучшим вариантоы будет применение модуля ШИМ, при этом с рабочим напряжением 7-9 вольт.
Все остальное ардуино сделает сама. Модули на 5 вольт и микросхемы стабилизаторы на то же самое напряжения не рекомендуются, так как из-за потерь питание может быть ниже номинального.
Видео о подключении Ардуино к 12 вольтам в автомобиле
Источник: https://autosecret.net/tuning/elektro-tuning/2047-podklyuchenie-arduino-k-bortovoj-seti-avtomobilya
Несколько причин не использовать Arduino в своих конструкциях
» Статьи » Открытые МК-платформы · Arduino
25-08-2012
Arduino
Vassilis K. Papanikolaou, Греция
На самом деле идея Arduino замечательна. Это золотое дно для новичков, т.к. на ее основе можно разрабатывать конструкции простого и среднего уровня за короткие сроки.
Это великолепная микроконтроллерная платформа для отладки и прототипирования с огромным количеством готовых проектов с открытым исходным кодом, учебных материалов, форумов и пр., что очень важно для всех при изучении встраиваемых систем.
Используя простую интегрированную среду разработки и код на С++-подобном языке, USB кабель и несколько пассивных компонентов, возможно в считанные секунды заставить мигать светодиод, или организовать обмен данными с ПК за несколько минут, не имея серьезного опыта в электронике.
Это, несомненно, отличное стартовое решение, но как далеко Вы можете зайти в использовании Arduino? Ну, довольно далеко, но до определенного предела, потому что (как и вообще в жизни) всегда приходится выбирать между простотой и производительностью.
Наверное, именно поэтому наблюдается появление высокопроизводительных клонов Arduino, таких как ChipKIT на микроконтроллерах компании Microchip семейства PIC32 или Netduino на микроконтроллерах ARM.
Эта альтернатива может спасти разработчика во многих случаях приростом производительности, но, в конечном счете, все же остаются скрытые функции и библиотеки, которые используют ресурсы микроконтроллера, и пользователи будут вынуждены изучать аппаратную часть микроконтроллера.
Автор лично решил полностью отказаться от Arduino после нескольких месяцев изучения. Фактически, как утверждает автор, сама платформа Arduino подтолкнула его на этот шаг. Ниже приведены причины, но сначала рассмотрим преимущества Arduino.
Плюсы Arduino (Что замечательно):
- Интегрированная среда разработки Arduino IDE основывается на компиляторе языка Си AVRGCC. Изучение Arduino, в конечном счете, поможет в изучении С++. Если Вам не нравятся специфические высокоуровневые Arduino команды или библиотеки, вы сможете заменить их на С++ эквиваленты (как выясняется, не всегда);
- Питание, программирование и коммуникация с Arduino платформой осуществляется с помощью одного кабеля USB (или кабеля с адаптером на специализированной микросхеме FTDI для некоторых клонов);
- Со встроенными библиотеками вы можете реализовать какой-то простой (и медленный) проект за считанные минуты, не задумываясь, как эти библиотеки реализованы, и как работают. Медленно происходит чтение кнопок, отображение данных на ЖК дисплее или их отправка по последовательному интерфейсу, работа с электродвигателями;
- Коммуникация по последовательному интерфейсу и SPI превосходна и стандартна.
Минусы Arduino (Что ужасно):
- Arduino IDE – это самый худший и самый непригодный редактор кода после «Блокнота». В один день вы переключитесь на достойный внешний редактор, однако вам все равно придется оставить открытой Arduino IDE для программирования устройства;
- Загрузчик Arduino. Для того, чтобы завершить какое-либо Arduino-устройство, вам придется вручную запрограммировать загрузчик в каждый «чистый» микроконтроллер ATmega. Это уменьшает доступный объем Flash-памяти программ на 2 КБайта;
- Всего несколько вариантов: если вы будете использовать официальные платы Arduino, то выбрать вы сможете только из вариантов с 30 Кбайт или 254 КБайт встроенной памяти программ. Что будет, если ваш код занимает, скажем 42 КБайта? Единственный выбор – использование клона Sanguino, который не полностью совместим с Arduino;
- Нет простого способа изменить тактовую частоту, не так ли? Модель микроконтроллера с питанием 3.3 В и тактовой частотой 8 МГц может безопасно работать на частоте 12 МГц;
- Функция digitalWrite() выполняется за 56 циклов (хотя автором был получен результат в 400 циклов). По крайней мере, это легко выяснить и перейти к использованию прямого доступа к портам (второй элемент для изменения, после Arduino IDE). Как правило, Arduino не очень удобна для написания эффективного кода;
- Вы не сможете (по крайней мере, просто) отключить библиотеку последовательной коммуникации, используемую по умолчанию, чтобы использовать TX и RX прерывания, независимо от того, была она запущена, или нет;
- Подпрограмма обслуживания прерывания по переполнению таймера запускается через каждые 16000 циклов в фоновом режиме. Это сделано для работы функций millis() и micros(), даже когда они не используются;
- Пустой Arduino проект для платформы Arduino UNO занимает 466 Байт и 666 Байт для Arduino Mega2560. Дополнительное расходование ресурсов не устраивает многих, в том числе и автора статьи. Также неприятно видеть ошибки компиляции проекта, связанные с вышеописанными изменениями;
- Последнее, но не менее важное – среда разработки Arduino, без сомнения, «скрывает» важные аспекты архитектуры микроконтроллера: регистры, прерывания и таймеры. Их знание просто необходимо.
В связи с этим автор утверждает, что настало время использовать чистый AVRGCC. Однако, у него тоже есть свои плюсы и минусы.
Трудности при использовании AVRGCC:
- Необходимость переписывать некоторые элементы в С++, наиболее важным из которых является обмен по последовательному интерфейсу (возможно, лучшая часть в Arduino). К счастью, имеется много практических советов и руководств по этой задаче. Написание других протоколов гораздо проще, например, SPI;
- Необходимо изучить, в какие библиотеки включены команды без компиляции, и включить эти библиотеки в свой файл исходного кода. Наиболее распространенными являются: avr/io.h, avr/interrupt.h, util/delay.h, stdio.h and string.h;
- Типы байтовых и логических переменных должны быть uint8_t и bool, байтовые числа, например B00010001, должны быть в виде 0b00010001, и так далее. Вы найдете все остальные изменения, их очень мало;
- Требуется больше знаний и, главное, не сдаваться.
Польза от использования AVRGCC:
- Нужен другой процессор для увеличения памяти программ или производительности? Вы можете его использовать (например, из той же серии megaAVR), и придется только перекомпилировать проект. Потребуется изменить некоторые регистры и имена прерываний, make-файл и Fuse-биты;
- Нужна другая тактовая частота? Используйте другой кварцевый резонатор, или можно использовать встроенный осциллятор микроконтроллера, всего лишь изменив Fuse-биты и make-файл;
- Можно использовать достойную (Notepad++) или мощную (Atmel Studio 6) интегрированную среду разработки кода;
- Вы получаете полный контроль над своим кодом. То что вы написали, то и выполняется. Ничего не скрывается, ничего не происходит без вашего согласия. Вы пишете более эффективный и быстрый код. Вы узнаете больше.
Как и для Arduino, для AVRGCC имеется большое количество вспомогательных средств, готовых проектов, библиотек и учебных материалов. Выбор остается за пользователями.
vpapanik.blogspot.com
Источник: https://www.rlocman.ru/review/article.html?di=138878
Тахометр на Arduino
Тахометр – это полезный инструмент для подсчета RPM (оборотов в минуту) колеса или всего, что крутится. Самый простой способ сделать тахометр – это использовать ИК передатчик и приемник. Когда связь между ними прерывается, вы знаете, что что-то вращается и можете применять код для вычисления RPM, ориентируясь на частоту прерывания связи.
В этой статье мы рассмотрим, как использовать ИК-передатчик и приемник для изготовления тахометра с применением Arduino. Результат отображается на ЖК-дисплее 16х2.
Целью данного проекта является создание системы с одним входом и одним выходом. На входе устройства присутствует сигнал, изменяющийся с высокого (+5В) на низкий (+0В) уровень при нарушении связи.
Согласно этому сигналу, Arduino будет увеличивать значение внутреннего счетчика.
Потом проводится дополнительная обработка и расчет, и по прерыванию триггера на ЖК-дисплей будет выводиться рассчитанное RPM.
Для связи мы будем использовать ИК-луч от ИК-светодиода, включенного через низкоомный резистор так, чтобы светиться ярко. В качестве приёмника мы будем использовать фототранзистор, который при отсутствии света ИК-светодиода “закрывается”.
Компьютерный вентилятор будет размешен между ИК-передатчиком и приёмником и включен. ИК-приёмник включенный через транзисторную схему, будет генерировать прерывания.
Для вывода результата будет использоваться Arduino LCD интерфейс, поэтому мы можем вывести окончательное значение RPM на ЖК-дисплей.
Элементы: Arduino UNO 16×2 LCD Макетная плата Подстроечный резистор 5 кОм Перемычки SIP разъёмы 2x 2N2222 NPN транзистор Инфракрасный светодиод Фототранзистор Резистор 10 Ом Резистор 100 кОм Резистор 15 кОм или 16 кОм
Компьютерный вентилятор
Подробный список элементов
Все элементы используемые в проекте указаны выше, но я более подробно опишу функции основных элементов.
Arduino UNO
Это плата Arduino, которую мы будем использовать для обработки импульсов от прерывания ИК-луча, которые сообщают о нахождении лопасти компьютерного вентилятора между приемником и датчиком. Arduino будет использовать эти импульсы наряду с таймером, чтобы вычислить RPM вентилятора.
ЖК-дисплей 16×2
После того, как Arduino вычислило RPM, эта значение будет отображаться на дисплее в понятном для пользователя виде.
Подстроечный резистор 5 кОм
Этот подстроечный резистор будет использоваться для регулировки контрастности ЖК-дисплея 16×2. Он дает аналоговое напряжение в диапазоне от 0 до +5В, позволяя настроить яркость ЖК-дисплея.
Инфракрасный светодиод и Фототранзистор
Фототранзистор открывается, когда мощный ИК-свет падает на него. Поэтому, когда ИК-светодиод горит, он держит фототранзистор открытым, но если ИК-светодиод закрывается например, лопастью вентилятора, то фототранзистор закрывается.
2N3904 и 2N3906
Эти транзисторы используются для преобразования уровня сигнала, с целью обеспечения выходных импульсов с фототранзистора для Arduino, в которых нет никаких напряжений кроме +0 и +5В.
Принципиальная схема
В схеме, интерфейс связи с ЖК-дисплеем упрощен и имеет только 2 линии управления и 4 линии передачи данных.
Особенности схемы
Интерфейс ЖК-дисплея 16×2
2 управляющих контакта и 4 для передачи данных подключены от Arduino к ЖК-дисплею. Это то, что указывает ЖК-дисплею, что и когда делать.
Схема обрыва ИК-луча
Сигнал обрыва ИК-луча идет на 2-ой цифровой контакт Arduino. Это прерывает Arduino, что позволяет ему засчитать импульс и позволяет тахометру получать данные.
Arduino LCD библиотека
Для этого проекта мы будем использовать Arduino LCD библиотеку. В основном мы будем просто обновлять значение RPM на второй строке на новое.
В качестве подготовки, посмотрите на код приведенный ниже, в котором при помощи этой библиотеки на ЖК-дисплей выводиться “Hello, World!” В тахометре мы будем использовать похожий код, особенно: “lcd.print(millis()/1000);”.
Разберитесь в функциях этой ЖК-библиотеки как можно подробнее, прежде чем двигаться дальше. Она не слишком сложна и хорошо документирована на сайте Arduino.
Подсчет RPM при помощи Arduino
Так как мы собираемся подсчитать RPM компьютерного вентилятора, мы должны понимать, что для подсчета мы используем прерывание ИК-луча. Это очень удобно, но мы должны учитывать, что у компьютерного вентилятора 7 лопастей. Это значит, 7 прерываний равно 1 обороту.
Если мы будем отслеживать прерывания, мы должны знать, что каждое седьмое прерывание означает, что только что произошел 1 полный оборот. Если мы отследим время, необходимое для полного оборота, то мы легко вычислим RPM.
Время 1-го оборота = P * (µS/оборот)
RPM = кол-во оборотов/мин = 60 000 000 * (µS/мин) * (1/P) = (60 000 000 / P) * (кол-во оборотов/мин)
Для расчета RPM мы будем использовать формулу приведенную выше. Формула точная, и точность зависит от того, насколько хорошо Arduino сможет отслеживать время между прерываниями и посчитывать количество полных оборотов.
Сборка схемы
На фотографии ниже вы можете увидеть все необходимые детали и перемычки как на схеме.
Для начала подключается +5В и линии данных/управления ЖК-дисплея. Затем ЖК-дисплей, потенциометр контрастности и светодиод питания.
Схема обрыва ИК-луча собрана. Старайтесь, чтобы между ИК-светодиодом и фототранзистором было расстояние. На этой фотографии видно расстояние между ИК-светодиодом и фототранзистором, где я размещу компьютерный вентилятор.
Хватит разговоров о аппаратной части! Давайте начнем делать прошивку/программу, чтобы увидеть работу устройства!
Программная часть
Есть две основных части кода, которые показаны и подробно описаны ниже: -Основной цикл обновления ЖК-дисплея
-Обновление времени прерываний
В основном цикле считаются обороты и обновления ЖК-дисплея. Поскольку основной цикл это гигантский while(1) цикл, то он будет работать всегда, RPM считаться, а ЖК-дисплей обновляться несколько раз в секунду. Функция в прерывании подсчитывает время между прерываниями ИК, поэтому считать RPM можно в основном цикле.
Помните, что компьютерный вентилятор имеет 7 лопастей, так что это тахометр предназначен для работы только с такими вентиляторами. Если ваш вентилятор или другое устройство дает только 4 импульса за оборот, измените в коде “(time*4)”.
Два вентилятора работают на примерно 3000 оборотов в минуту и 2600 оборотов в минуту, с погрешностью около + / -100 оборотов в минуту.
Обзор тахометра на Arduino
Вентилятор генерирует импульсы прерывания, а на выходе мы видим RPM. Хотя точность не 100%, а примерно 95%, при стоимости элементов 10$ есть смысл построить этот тахометр на Arduino.
Что теперь делать?
Системы на основе обрыва луча полезны не только при измерении RPM, но и в качестве других датчиков. Например, вы хотите знать, открыта дверь или закрыта. Возможно, вы хотите знать, не проходило-ли что то под роботом. Есть много применений обрыва луча, а схема используемая тут настолько проста, что есть много путей для улучшения и сборки других удивительных устройств.
Заключение
В целом, я считаю этот проект успешным… Но дело во времени и опыте.. Так или иначе, система работает как задумывалось и достаточно надежно, а мы получили ожидаемый результат. Надеюсь, вам понравилось прочитать эту статью и узнать как сделать свой собственный тахометр на Arduino!
Скачать список элементов (PDF)
Оригинал статьи
Прикрепленные файлы:
- lcd_tachometer.rar (1 Кб)
Источник: http://cxem.net/arduino/arduino66.php