Микроконтроллеры. Мой опыт использования

В этой статье хочу рассказать, как сделать домашнюю метеостанцию, будильник, тетрис, или, даже, робота своими руками, а также, поделиться опытом использования и программирования микроконтроллера фирмы Atmel на плате Arduino UNO.Cразу хочу обратить ваше внимание на то, что я новичок, в этом деле, и обладаю минимумом базовых знаний.

Немного терминологии.

Простыми словами, микроконтроллер – это компьютер, состоящий из одной микросхемы, имеет на борту процессор, оперативную память, энергонезависимую память (ПЗУ), устройства ввода-вывода. Функции МК (микроконтроллера) не задаются при его производстве, а программируются пользователем.

Atmel – фирма-производитель полупроводниковых компонентов, в частности, МК ATmega328P, о котором пойдет речь в этой статье. Полный перечень его характеристик раскрывать не буду, вы их не запомните, и не поймете, что они значат, если вы такой же новичок, как и я. Для начала, нужно знать, что имеется 1024 байта ПЗУ, и 2048 байт ОЗУ, частота 20МГц, построен на 8-битной архитектуре, имеет 32 пина (ножки расположенные по периметру корпуса). Т.к. МК будет установлен в готовую плату, то значения пинов, сейчас, знать не обязательно, но важно знать значения пинов на плате.

А теперь о самой плате.
Arduino UNO – готовое решение для работы с МК ATmega328P. Для работы МК требуется набор внешних электронных устройств, для обеспечения питания и тактирующего сигнала. Подобную плату можно собрать самому, используя документацию к конкретной модели МК. Для тех, кто хочет поскорее сделать что-то интересное, без пайки, изготовления платы и закупки компонентов поштучно, Arduino – идеальное решение. UNO – это название модели готовой платы для МК ATmega328P, есть и другие модели плат для других МК, например: Arduino Mega, Arduino YUN.

Особенности при покупке платы.
Оригинальная плата, произведенная в Италии, стоит, в среднем, 600 гривен в Украине. На самом деле, для рынка, за пределами США, создан отдельный бренд – Genuino, но, в наших краях, он не распространен, и разницы, между ними, нет. На каждую оригинальную модель есть, не менее, трех китайских подделок. На них и сделаю акцент. Китайская реплика стоит от 170 до 260 грн. с МК в комплекте. Мне повезло купить за 170 новую плату на olx.ua. Рекомендую остановиться на таком варианте, но есть и альтернативы. Если реплика полностью копирует оригинал, то т.н. копия имеет свою особенность, это – переходник USB–COM-порт (микросхема), позволяющий работать через USB, а не RS232, которого нет в ноутбуке. В оригинале и в реплике это – ATmega16U2, в подделке – CH340G. Для CH340G нужно искать и устанавливать отдельный драйвер, для которого, возможно, и не будет проблем, но почитать форумы придется. Стоят от 130 грн. Далее, есть возможность покупки платы с МК типа SMD. SMD это минифицированные МК, которые впаяны, например, в портативной электронике (часы, калькулятор). МК стандартного размера называется DIP. Платы с SMD стоят от 100 грн., а сам МК не съемный. И последний вариант покупки, это – минифицированная плата с минифицированным МК. Этот вариант подходит в тех случаях, когда вы собираете готовое устройство, и такая плата хорошо сокращает габариты целого корпуса. Цена стартует от 70 грн. Платы Arduino со съемным (DIP) МК идут с прошитым загрузчиком МК, и при покупке отдельного МК его придется прошить вручную, это делается с помощью все той же платы Arduino в несколько кликов, инфу найдете. Для работы подойдет любой, из перечисленных, вариантов покупки. Никаких отдельных устройств-программаторов не нужно.

Обзор платы.
Не буду вдаваться в полное описание, т.к. вам не понадобится все сразу, да и сам еще не со всем разобрался. Нужно знать, что на плате есть 6 аналоговых входов и 13 цифровых входов/выходов. Аналоговый вход получает аналоговый сигнал, например, датчик освещения или температуры изменяет напряжение, в зависимости от яркости света или температуры окружающей среды, и это напряжение поступает на аналоговый вход платы. Цифровой вход получает цифровой сигнал, например, нажали на кнопку, которая замыкает цепь. Этот же пин может служить цифровым выходом, например, подать напряжение на светодиод, замкнуть цепь, или передать последовательность сигналов. Также имеются контакты, отвечающие за напряжение 3.3V и 5V, и контакты заземления (GND).

Программирование.
Суть МК заключается в том, чтобы получить сигнал с одного (или нескольких) пина(ов), обработать их, и, при необходимости, подать сигнал на другой пин(ы). За эти операции отвечает, написанная вами, программа. Для написания простейшего кода требуются минимальные знания программирования на любом языке. МК фирмы Atmel программируются на c++, но если вы программируете, например, на PHP, то вам не составит труда адаптироваться под синтаксис c++ и написать простой код. Если вы вообще не программируете, то придется разбираться в базовых примерах (ссылки на весь сопутствующий контент приведу в конце статьи), а лучше – начать, потихоньку, учиться программировать. Не умея программировать, вы можете рассчитывать только на создание простых устройств, например, реализация светодиодной анимации, светодиодные дисплеи для вывода символов, например, температура, работа с LCD дисплеями. Код для Arduino пишется, компилируется и записывается в МК в программе Arduino Software (IDE), которая распространяется бесплатно с официального сайта.

Личный опыт.

Теперь, хочу продемонстрировать, как я реализовал полученные знания. Начал с того, что прошел руководство для начинающих на официальном сайте, и одним из первых заданий было – зажечь светодиод :) Далее, прочел еще раз руководство, и начал искать примеры с использованием различных компонентов, таких как, клавиатуры и дисплеи. Прочел еще несколько руководств.

С помощью несложных алгоритмов можно создавать примитивные игры, уровня “Тетрис”, но знания и навыки работы с циклами и массивами необходимы, и если вы не умеете программировать, то, задачу такого рода, вы не решите. Предоставляю ссылку на видео, где я демонстрирую свою игру: Arduino racing game with Nokia 5110 dislay.

Компоненты:
1. Плата Arduino UNO;
2. Nokia 5110 LCD display;
3. Level shifter CD4050BE;
4. Макетная плата;
5. Провода;
6. Перемычки;
7. Переменный резистор 10кОм.

 

common_view

 

Дисплей от nokia можно найти в интернете или на радиорынке, необходим для вывода изображения. Level shifter необходим для того, чтобы понизить уровень сигнала. Логические значения на выходах Arduino UNO работают в диапазоне 0-5V, а дисплей принимает в диапазоне 0-3.3V, поэтому, необходимо использовать резисторы (построить схему делителя) или level shifter. Макетная плата избавит нас от необходимости создавать и паять плату самому, обязательно приобретите такую – сэкономите много времени и сил. Они бывают разных размеров и различаются расположением и количеством дополнительных контактных дорожек, но работают по одному принципу: вся плата разделена на два поля, не замкнутых между собой, каждый ряд контактов, перпендикулярный линии разделения полей, отвечает за один контакт, т.е. все контакты в одном ряду – замкнуты между собой. Провода, желательно, нарезать по 10-15 см в длину, а оголенные контакты длинной 5мм покрыть оловом, для удобного использования с макетной платой. Перемычки необходимы для крепления дисплея к плате. Переменный резистор, емкостью 10кОм необходим для регулировки входного напряжения на аналоговый пин.

Некоторые особенности программной составляющей.
Весь код описывать не буду, но про взаимодействие с дисплеем от нокии расскажу. Вам понадобится библиотека и драйвер к конкретному дисплею. Я использовал библиотеку Adafruit_GFX, и драйвер Adafruit_PCD8544. Их можно загрузить в репозитории Arduino Software (IDE) и подключить, непосредственно, в код. Как это сделать, вы узнаете пройдя основы работы с Arduino. Алгоритм работы игры, или весь код, пришлю лично по почте, если понадобится.

Особенности подключения.
При подключении дисплея будьте очень внимательны! Читая руководство подключения обращайте внимание не на порядковый номер контакта дисплея, а на его назначение, т.к. не всегда они идут в одном порядке. На фото изображены две одинаковые модели дисплея, но с разным расположением контактов. Не подключайте дисплей напрямую к Arduino, используйте CD4050BE. Как его подключить, описано в руководстве к библиотеке Adafruit.

display_diff

 

Вывод. Потенциал МК очень большой, и применяются они повсеместно: в автомобилях, бытовой технике, портативной технике, кофеварках, квадрокоптерах, роботах, охранных системах и т.д. К платам Arduino имеется не мало периферии, это могут быть: всевозможные датчики температуры и освещения, GPS и GSM модули, сервомоторы (пошаговые электромоторы), датчики расстояния, датчики влаги и углекислого газа, различные светодиодные, LCD и ЖК дисплеи, NFC метки, ИК приемники и пульты, мембранные клавиатуры, и много другого. А реализовать вы можете все, на что хватит вашей фантазии. В домашних условия можно сделать систему дистанционного управления освещением или бытовой техникой; с помощью дисплея, мембранной клавиатуры, сервомотора и замка можно поставить защиту для вашего шкафчика, где сервомотор повернет замок при введении правильного пин-кода; считать количество открытия/закрытия входной двери, и отправлять информацию по СМС; можно пойти дальше, и научиться управлять такой системой с помощью смартфона по bluetooth или wi-fi, такие модули есть в продаже. Большинство, из вышеперечисленных, дополнений к Arduino стоят совсем не дорого, например дисплей, примерно, 80 грн., клавиатура, 40 грн., различные датчики от 30 грн., главное не поленитесь поискать на разных сайтах и магазинах.

Это, вполне, доступные вещи, которые способны увлечь широкий круг аудитории всех возрастов. Как только начинаешь интересоваться МК – сразу вникаешь и в другие сферы, такие как программирование, электротехника, радиоэлектроника. Для решения простых задач не требуется большой запас знаний, многое можно сделать и в школьном возрасте, ученики сами заинтересуются, когда увидят простые и интересные устройства, и поймут на чем они реально смогут реализовать полученные знания курса физики, программирования и математики.

Примеры c использованием Arduino UNO.
Светодиодная анимация.
Измерение и вывод температуры.
Тетрис.

Литература.

Здесь перечислю только те источники, откуда сам черпал информацию, но они англоязычные, что может быть проблемой, для некоторых. На русском языке очень много ресурсов, посвященных этой тематике, так что найти руководства для начинающих не составит никакого труда!

Руководство с официального сайта.
Ссылка на среду для разработки.
Отличное руководство для начинающих, с множеством примеров.
Работа с Nokia 5110 LCD display.
Работа с библиотекой Adafruit для дисплея от Nokia. Пример подключения.
Описание самой библиотеки Adafruit.

Если где-то некорректно описал процесс работы или неправильное предназначение компонентов – укажите на это в комментариях, я – новичок, и многого еще не знаю или неправильно понимаю. Заранее извиняюсь за грамматические и синтаксические ошибки.

 

Успехов всем, в ваших начинаниях! Смело задавайте вопросы, постараюсь на все ответить.

Please wait...
Теги: , , , , , , , ,
0
3 Комментарий
Сначала Новые
Сначала Старые Популярные
guest

Межтекстовые Отзывы
Посмотреть все комментарии
Distraction
Distraction
8 лет назад

Спасибо, хорошая статья.
Я предлагаю сделать цикл статей, где можно попытаться реализовать какую-то штуку для “умного дома”, попутно расписывая разные нюансы в этой области. Что думаешь?

Please wait...
Наверх

Повідомити про помилку

Текст, який буде надіслано нашим редакторам: