Поэтому я решил не утомлять читателя практически полным дублированием информации и лишь выложить в архив код: с помощью упомянутой статьи вы легко запустите оба дисплея.
Освободившееся же время можно потратить с большей пользой и рассмотреть ещё один вариант визуализации для микроконтроллера – Android.
Содержание статьи / Table Of Contents
Для этого проекта нам понадобятся:
1. Микроконтроллер ATtiny85. Вы можете использовать любой другой, поскольку в коде использован программный вариант протоколов 1-Wire и UART. Единственно, придётся адаптировать под свой МК часть программы, связанную с прерываниями.
2. Термодатчик DS18B20.
3. Bluetooth-модуль HC-05 или HC-06. Строго говоря, между ними есть отличия, о чём мы поговорим чуть ниже, но для данного проекта подойдёт любой из них.
4. Драйвер двигателя постоянного тока L293D. Если напряжения питания моторчика не более 5 В, а величина потребляемого им тока безопасна для МК, можно подключить его напрямую к ШИМ-выводам МК, обойдясь без драйвера. Но, в реальном проекте мы использовали 9-вольтовый экземпляр, схема ваялась под него.
5. Сам DC-мотор. Для статьи подошёл 5-вольтовый, выдранный мальчишками уже не помню откуда. Если в вашем распоряжении окажется двигатель с бОльшим напряжением питания, придётся внести минимальные изменения в электрическую схему, но, об этом – позже.
6. Смартфон или планшет под ОС Android версии 4.4.2 и выше. Мы использовали Samsung SMT-230.
1. Микроконтроллер ATtiny85. Вы можете использовать любой другой, поскольку в коде использован программный вариант протоколов 1-Wire и UART. Единственно, придётся адаптировать под свой МК часть программы, связанную с прерываниями.
2. Термодатчик DS18B20.
3. Bluetooth-модуль HC-05 или HC-06. Строго говоря, между ними есть отличия, о чём мы поговорим чуть ниже, но для данного проекта подойдёт любой из них.
4. Драйвер двигателя постоянного тока L293D. Если напряжения питания моторчика не более 5 В, а величина потребляемого им тока безопасна для МК, можно подключить его напрямую к ШИМ-выводам МК, обойдясь без драйвера. Но, в реальном проекте мы использовали 9-вольтовый экземпляр, схема ваялась под него.
5. Сам DC-мотор. Для статьи подошёл 5-вольтовый, выдранный мальчишками уже не помню откуда. Если в вашем распоряжении окажется двигатель с бОльшим напряжением питания, придётся внести минимальные изменения в электрическую схему, но, об этом – позже.
6. Смартфон или планшет под ОС Android версии 4.4.2 и выше. Мы использовали Samsung SMT-230.
↑ Видео проекта в действии
↑ Микроконтроллерный блок
Кратко опишу алгоритм работы блока. Один раз в две секунды (период можно менять) ATtiny85 считывает из DS18B20 два байта со значением текущей температуры, переводит данный в привычный вид и отправляет по Bluetooth в Android. В оставшееся время МК ждёт от Samsung SMT-230 указаний об изменении скорости и направления вращения двигателя и исполняет их при поступлении.Ниже приведена таблица соединений блока.
Поясню отдельные моменты:
1. Двигатель подключается к выводам драйвера 3(1Y) и 6(2Y).
2. Выводы 8(VCC2) и 16(VCC1) замкнуты, поскольку напряжение питания МК и мотора одинаковые: 5 В. В случае более высокого напряжения подавать его следует отдельно, на вывод 8(VCC2).
3. Bluetooth-модуль HC-06 можно заменить на HC-05. Главное отличие между ними заключается в том, что HC-05 помимо режима Slave может работать и как Master, то есть сам инициировать связь, а HC-06 доступна лишь роль подчинённого. Поскольку в проекте инициатором связи выступает Android, подойдёт любой из указанных модулей. Следует также отметить, что заводские настройки модулей (8 бит данных, без проверки чётности, 1 стоп-бит, без контроля потока, скорость 9600 бит/с) как раз подходят для общения с Android, поэтому подключать их можно что называется «из коробки», не прибегая к AT-программированию.
4. Желающим использовать другой МК необходимо помнить следующее:
4.1. В стандарте драйвер L293D подключается иначе: на выводы 2(1A) и 7(2A) подаются постоянные сигналы противоположной полярности (0-1 или 1-0 в зависимости от выбранного направления вращения двигателя), а на 1(1,2EN) – ШИМ-сигнал, скважность которого определяет скорость вращения. Поскольку в заводском варианте у ATtiny85 всего пять доступных пинов, в целях вынужденной экономии был выбран другой вариант соединения: вывод 1(1,2EN) замкнут на питание, а 2(1A) и 7(2A) регулируют и скорость, и направление вращения мотора. Для этого на один из указанных пинов подаётся 0, а на второй – ШИМ-сигнал. Поэтому, оба пина МК, подключаемые к L293D, должны иметь альтернативную функцию – PWM.
4.2. Вывод TXD HC-06 соединяется с пином МК, поддерживающим внешнее прерывание INT0 или INT1.
4.3. Для передачи данных по UART и обслуживания термодатчика подойдут любые пины МК.
↑ Несколько слов о коде
Программа написана на Си в AVR Studio 4.Поскольку возможности ATtiny85 ограничены и количеством пинов, и размером памяти, было принято решение использовать программный вариант протоколов связи с другими узлами модуля.
Протокол 1-Wire, который ATtiny85 использует для общения с DS18B20, написан на базе двух документов - Application note 126 от Maxim Integrated и AVR318 от Atmel.
При оформлении функций обмена данными для экономии памяти и машинного времени приняты следующие допущения:
1. В работе блока используется только один термодатчик. Это допущение позволяет считывать значение температуры, обходясь только тремя командами DS18B20 (Skip Rom, Convert T и Read Scratchpad).
2. Термодатчик подключен к МК, находится в исправном состоянии и не врёт. В этом случае можно отказаться от CRC-проверки.
Функции UART с небольшими изменениями и дополнениями позаимствованы из документа AVR304 от Atmel. В организации протокола участвуют два прерывания – INT0 для фиксации момента начала приёма данных из Android и прерывание таймера по сравнению для приёма/передачи данных, а также отсчёта периода измерения температуры.
Для управление мотором использован Timer1 микроконтроллера. В соответствии с информацией, полученной от Android, записываются значения в регистры OCR1A и OCR1B, что определяет наличие/отсутствие и скважность ШИМ-сигнала на выводах 3(PB4) и 6(PB1) микроконтроллера.
↑ Приложение под Android
Приложение под рабочим названием «Термометр» написано на языке Java в IDE «Android Studio». Сразу оговорюсь, что мой опыт работы с этим языком, особенно под Android, далёк от того, чтобы кого-то чему-либо учить. В программе есть недочёты, которые мне известны. А вероятно имеются и такие, о которых я даже не догадываюсь. Поэтому, вкратце изложу, что сделано и как этим пользоваться.Для тех, кто не хочет возиться с «Android Studio», в архив выложен APK-файл. Просто закиньте его на ваш девайс, а затем найдите и установите через диспетчер файлов, после чего должно появиться приложение «Термометр» со значком снежинки.
Открыв приложение, вы попадёте в главное окно, содержащее кнопку для перехода в меню настроек, текстовое поле для вывода значения температуры и слайдер (или ползунок), управляющий скоростью и направлением вращения мотора.
Два последних элемента окна деактивированы, поскольку связь с микроконтроллерным блоком не установлена. Поэтому жмём на кнопку и переходим в окно настроек,
в состав которого входят тумблер включения/выключения Bluetooth-адаптера вашего девайса (в правом верхнем углу), списки авторизованных/найденных Bluetooth-устройств и кнопка поиска.
Сначала нужно включить адаптер. При первом использовании приложения это приведёт лишь к активации самого тумблера, списки же останутся пустыми. Жмём кнопку "Начать поиск" (при этом она поменяет название на «Остановить поиск»), предварительно подав питание на микроконтроллерный блок. После того, как ваш Bluetooth-модуль появится в списке найденных устройств, можно остановить поиск и выбрать устройство из списка. При следующем использовании приложения ваше устройство сразу отобразится в списке авторизованных.
После выбора устройства в первый раз будет запрошен пароль Bluetooth-модуля, который в заводских настройках обычно бывает «1234» или «1111». Проверив пароль, приложение перейдёт в главное окно, в тестовом поле которого уже отобразится текущая температура, а слайдер будет активирован.
Коротко о программе. В состав приложения кроме указанных активити (окон) входит сервис. Именно он осуществляет соединение и обмен информацией между Android и МК-блоком. Чтобы изображение на дисплее не тормозило, приём и передача данных выведены в отдельные потоки. Общение между активити и сервисом осуществляется посредством широковещательных сообщений.
↑ Поклонникам ARDUINO
В архивы к статье выложены два варианта устройства: для ATtiny85 и Arduino UNO/Nano. В первом случае распиновка такая же, как в таблице выше. Во втором, мотор подключается к выводам D5 и D6, DS18B20 - к D7, а Bluetooth-модуль – к RX и DX.↑ Заключение
Сегодня мы рассмотрели устройство с ОС Android как средство визуализации для МК. Однако, этим способы его применения не исчерпываются. Вы можете использовать ваш смартфон или планшет не только как дисплей, экономя на покупке последнего, но и как пульт управления, успешно заменив механические кнопки и энкодеры на виртуальные. Есть и другие аппаратные бонусы: гироскоп, акселерометр, дополнительный контроллер с кучей памяти в придачу.Кроме того, вы получаете возможность перевести свои проекты на иной качественный уровень, используя Wi-Fi, выход в интернет, сотовую связь, отправку/приём сообщений.
И все эти прелести обеспечены просто гигантским массивом проверенных, обкатанных и постоянно расширяемых библиотек и широким интернет-сообществом профессионалов и любителей.
Единственно, что потребуется от новичка - упорство и терпение при изучении языка программирования. Но я не сомневаюсь в том, что и того и другого у вас с избытком!
↑ Файлы
1. 🎁Код для дисплея ILI9481, включая HEX-файл - ili9481_code.7z 2.86 Kb ⇣ 1252. 🎁Код для ATiny85, включая HEX-файл - androidatiny85.7z 7.09 Kb ⇣ 101
3. 🎁Два варианта скетча для Ардуино - androidarduino.7z 3.46 Kb ⇣ 96
4. 🎁Проект «Android Studio» - androidstudioproject.7z 22.72 Mb ⇣ 125
5. 🎁Приложение "Термометр" для Андроида - apk_file.7z 1.03 Mb ⇣ 108
Благодарю за внимание! :bye:
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.