Получил на днях такую плату и несколько различных датчиков к ней. Конечно это не совсем гаджет, и не относится к тому, о чем я обычно тут пишу. Но штука интересная, давно хотел поиграться с таким. Решил поделиться с вами рассказом о моём опыте знакомства с таким вот устройством.
Сразу оговорюсь, что тема не новая, существуют целые сообщества. Но я в данной теме "нуб", поэтому так скажем статья глазами новичка.
Я уже писал о похожей вещи - одноплатный компьютер Raspberry Pi. Только тут используется не SoC, а микроконтроллер (далее - МК). Процитирую Википедию на предмет того, что это такое:
Микроконтро́ллер (англ. Micro Controller Unit, MCU) — микросхема, предназначенная для управления электронными устройствами. Типичный МК сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ и (или) ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи.
На плате Arudino стоит один из таких МК фирмы Atmel - ATMega 2560 с их собственным ядром под названием AVR. Всё остальное на плате - разводка для работы этого контроллера (питание, тактовый генератор, USB модуль и т.д.) и удобные отдельные выводы этого самого МК.
Через эти выводы к плате можно подключать различные устройства - сенсоры/датчики, моторчики, реле и т.д. В сам МК можно залить свою "прошивку" - программу, которая будет всем этим управлять, согласно заданному нами алгоритмом.
Что из этого можно сделать? Ой, очень многое. На самом деле такая масса применений, что все их не перечислить. Процитирую еще один сайт, Robocraft:
К самой плате можно подключать различную периферию – кнопки, некоторые виды датчиков (температуры, давления, освещённости, ускорения и т.п.), светодиоды, жидкокристаллические индикаторы (цифро-буквенные, а не LCD-монитор конечно =) написать программу и заставить взаимодействовать всё это как угодно. Масса применений кстати.
Системы сбора данных (чёрный ящик для аквариума – пишет температуру раз в 5 минут)
Таймеры-Счётчики событий (сколько раз и во сколько кот подходил к пустой миске)
Сигнализации-Извещатели (кот превысил разрешенное количество подходов к миске, температура в аквариуме ниже 0, кто-то покинул туалет не выключив свет/не смыв/не опустив стульчак =)
И это конечно далеко не все применения.
Заказывал я не оригинал, а китайский клон (который почти полностью идентичен, можете сравнить внешний вид) на AliExpress за $15. Еще на eBay заказал себе кучу всякой мелочевки. На вроде цифровых датчиков температуры DS18B20, LCD экрана, "макетку" и разные наборы резисторов, транзисторов и прочей мелочевки. Всё это за копейки продают в Китае, а у нас купить довольно-таки проблематично. Если мелочевку еще можно достать, то Arduino только с российских магазинов на заказ той же почтой и втридорога.
Для чего она понадобилась мне? Ну по большей части просто в последнее время "вдарился" в электронику, интересно было самому поэкспериментировать с аппаратным уровнем устройств. Это помогает лучше понять принципы работы оных.
Обновление от 17.04.2013: После написания статьи, обнаружил еще много всяких "приблуд", включаю саму Arduino Mega 2560 в магазине BuyInCoins. Цена там почти такая же, а магазин хороший и проверенный. И отправляют быстро очень. Плюс, учитывайте что легко получить скидку на 5%. Как это сделать (на примере планшета), через купон или используя приглашение от меня - читайте тут. С учетом этой скидки, Mega 2560 стоит почти те же 15 "баксов". Но там еще много всякого разного и интересного.
Например меньшая и более дешевая версия Arduino на Mega328P всего за ~$9, или миниатюрный аналог - Arduino Nano, модуль для Ethernet, и много другого (смотрите прошлую ссылку). И всякая электронная мелочевка, типа набора из 400 резисторов разных номиналов за $2, диоды, макетная плата, индикаторы и т.д. Много чего находится поиском там по запросу "Arduino" или в разделе "Other Electronics".
В общем рекомендую - сразу можно себе набрать всего нужного для работы с МК.
В следующей части заметки я расскажу, что я из этого сделал и для чего применил (дабы не перегружать информацией, статья будет разбита на 2 части).
Вводную я дал в первой части. Напомню что такие вещи я рассказываю как полный "новичок" в этом деле. И так, что я сделал и как "побаловался" с платой.
Для начала скачал пакет программ с сайта Arduino. Пакет представляет собой простенькую среду разработки с редактором кода, компилятором и программатором. Самое главное в ней конечно большое количество встроенных библиотек, сильно облегчающих начальное знакомство с платой и микроконтроллерами. Достаточно лишь подключить плату по USB, поставить драйвера из комплекта, открыть какой-либо пример и нажатием кнопки он собирается и заливается в плату. Конечно никто не мешает писать код в более серьезных средах (есть компиляторы с языка Си например), что я собственно тоже попробовал дальше. Но остановимся на простом варианте среды Arduino.
Для начала я конечно попробовал самые "азы" - моргание светодиодом. Тут всё просто. Либо используем SMD светодиод, установленный на плате (на 13ом выводе), либо подключаем свой на любой из выводов (не забываем при этом токоограничивающий резистор). Дальше в коде нам нужно элементарно установить режим работы вывода в выход: pinMode(НОМЕР_ВЫВОДА, OUTPUT). А дальше просто устанавливаем на этом выводе сигнал логической 1: digitalWrite(НОМЕР_ВЫВОДА, 1). Вот и всё, так светодиод горит. Поставим 0, и он потухнет. Дальше я не буду рассказывать основы и примеры программирования - их легко можно найти в сети с более детальным описанием. Всё это слишком обширная и отдельная тема.
Теперь что-то более "практичное". На eBay я заказал себе пару цифровых датчиков температуры DS18B20. Подключаются они очень просто, примерно по такой схеме. На картинке можно видеть как это быстренько собрано на макетной плате. Скачал библиотеку для работы с протоколом OneWire для Arduino и запустил пример из библиотеки, исправив в нём вывод, к которому был подключен датчик. Пример инициализирует датчик, и периодически опрашивает его, заставляя выдавать температуру. Затем полученные значения он конвертирует и отправляет на компьютер с помощью виртуального COM-порта, висящего на USB подключении. В среде Arduino есть некий простенький эмулятор терминала, позволяющий смотреть (и отправлять) данные по этому порту. Т.е. прямо сразу на "компе" видим показания и информацию с датчика, полученную и обработанную микроконтроллером:
Как видно, температура у меня в комнате была примерно 26 градусов. Показания у датчика очень неплохие по точности и реагирует на изменения он достаточно быстро. Достаточно прикоснуться пальцем к датчику и температура начинает расти (от тепла тела). Да, кстати на скриншоте выше видно, что работают 2 датчика. Это я последовательно подключил сразу оба для сравнения (протокол OneWire позволяет на одном проводе держать много различных устройств).
Что я сделал еще? У меня дома давно есть HTPC. Когда-то давно я собрал к нему простенький ИК-приемник, чтобы им можно было управлять с пульта ДУ (подходит любой, у меня от какого-то DVD). Схему нашел в Интернете (примерно такую), подключается он через устаревший нынче COM-порт (как я говорю, это было давно). У меня она сделана на базе приемника 536AA3P (аналог TSOP1736).
Какое-то время назад он перестал работать. Как-то без средств сложно было диагностировать в чем дело, а без диагностики просто попробовать всё пересобрать было лень. С получением Arduino я просто отпаял сам датчик и подключил его к плате ардуино. С "ноги", где должны были идти данные, я просто перевел порт на вход и считывал с него уровень, выводя данные на виртуальный COM-порт (и следовательно наблюдая их в мониторе). По умолчанию датчик "подтянут" к питанию, т.е. уровень логической 1. Когда идут данные, датчик "опускает" линию в землю и следовательно получаем 0. Проверил - так и есть. Просто стоит - всё-время идут 1. Если поднести любой пульт и нажать любую кнопку, то пойдет поток данных с нулями. Значит датчик сам работает.
Ну и дальше решил подробнее проверить. Нашел библиотеку для IR-датчиков и загрузил пример в Arduino. Примерно тоже самое, но теперь я увидел не просто 1 и 0, а именно дешифрованные коды сигналов кнопок с ИК-пульта. Убедился, что каждая кнопка дает свой код без сбоев. Т.е. лишний раз удостоверился, что проблема не в датчике. Ну и методом дальнейшей диагностики нашел в чем проблема. Резистор полетел, заменил его, собрал назад схему для COM-порта и она вновь заработала.
С другой стороны на базе микроконтроллера (МК) можно собрать такой же приемник, который будет работать гораздо лучше и через USB. Можно и на Arduino (что я соб-но и сделал), только больно "жирно" пускать на такую простую задачу целиком плату. Тут обычно собираются собственные узконаправленные устройства, которые и поменьше и подешевле получатся.
В общем примерно как-то так. А применений, как я уже говорил в прошлой части, может быть очень много. Если заинтересовало - ищите, в сети полно информации по этой теме.
Также в прошлой части я сказал, что части будет две. Пожалуй всё-таки будет еще 3-я часть, в которой я расскажу, как можно всё это дело посмотреть и проработать и без физической платы. Да, есть специальные программы, позволяющие симулировать МК и электрические цепи. Об одной такой я напишу в следующей части...
PS: Я обновил первую часть, в конце найдете дополнение от сегодняшнего дня. Там я написал, где можно купить сам Arduino и различные компоненты еще дешевле.