#6 Условные операторы и циклы. Основы Arduino для начинающих

Привет начинающим ардуинщикам! 🙂

Сегодня мы разберемся с такими понятиями как условные операторы и циклы, поговорим о том, как ими пользоваться и разберем несколько примеров их применения.

Видеоверсия поста:

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

Если условие верно, то есть истинно, то выполняется специально указанный для этого случая фрагмент кода. Если же условие не верно, то есть ложно, то выполняется либо другая специально указанная часть кода, либо не выполняется ничего и работа микроконтроллера продолжается дальше по коду.

Если взять за пример человека, то мы с вами каждый день выполняем огромное множество подобных условий на подсознательном уровне, не замечая этого. Допустим, вы решили попить чаю и пришли на кухню что бы поставить чайник. Перед тем, как его включить или зажечь газ, вы проверяете, есть ли в чайнике вода. Если воды достаточно, то можно включать чайник, если нет, то необходимо её долить. Как раз условием в данном случае и является проверка вашего чайника на достаточное количество воды. И при истинности либо ложности этого условия вы выполняете определенные действия. Тоже самое делает и микроконтроллер, если вы задаете ему какое-то условие. Например, в прошлом выпуске мы рассматривали условие нажатия кнопки и зажигали в зависимости от этого светодиод.

Такой условный оператор носит название if, что в переводе означает «если». И частично его конструкция вам уже должна быть знакома – это непосредственное указание оператора, затем необходимое условие в круглых скобках и какой-либо код, выполняющийся при истинности этого условия. Но, в случаях, когда важно учитывать не только истинность, но и ложность, то есть не выполнение заданного вами условия, после фигурных скобок пишется слово else, что в переводе означает «иначе», и ставятся такие же фигурные скобки, только уже код в них будет выполняться при ложности заданного условия.

Например, к нашему прошлому коду можно добавить условие, что при нулевом сигнале, то есть отпущенной кнопке, подать на пин 13 постоянный сигнал высокого уровня. И тогда, если кнопка не нажата, наш светодиод будет постоянно гореть, а при нажатии, мигать с указанной частотой.

Так как микроконтроллер работает с числами и различными значениями, то в условии мы можем проверять не только абсолютное равенство двух значений, но так же делать различные выводы о том, больше ли это значение чем заданное, больше или равно, меньше, меньше или равно либо просто не равно.

Согласитесь, оператор if очень прост и удобен в использовании, но здесь стоит оговориться, ведь удобно с ним работать, только если нам необходимо проверить какое-либо одно условие. А что если их будет несколько? Представьте, что вам дали задание, например, разложить научные статьи по году их публикации, и вы, проверяя год каждой статьи, кладете их в соответствующую папку.

Но как этот процесс будет выглядеть с точки зрения алгоритма для микроконтроллера и оператора if? Давайте запишем. Очевидно, что вам потребуется сделать такое количество алгоритмов, какое количество годов будет у ваших статей. Ведь каждый раз мы должны проверить год на соответствие и в случае совпадения, положить документ в папку, либо же отправить его на проверку другому алгоритму.

Такой каскад из условий со стороны микроконтроллера не создаст для него никаких проблем, но с точки зрения восприятия человеком такого большого количества однотипных условных операторов – это крайне неудобно.

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

Что бы стало понятно, вернемся к нашей задаче распределения статей. В качестве постоянно изменяющейся переменной мы можем указать оператору значение года публикации статьи, а в возможных вариантах существующие года публикации. И, таким образом, получив очередное значение года, оператор выберет необходимый год из вариантов и выполнит действия, указанные в пределах от оператора case до оператора break, а затем выйдет из оператора switch. Break в нашем случае переводится как выход, а case — это возможный случай или вариант. Если же необходимый год в списке не найдется, то в конце оператора возможно указание значения ключевого слова default, то есть по умолчанию, и в таком случае мы не просто выйдем из оператора, а сначала выполним код, указанный после default.

Объясняя принцип работы этого оператора, я упомянул такое слово как переменная, которой присваивалось какое-то значение года публикации. Переменной называется область памяти микроконтроллера, имеющая определенное имя. В переменные можно сохранять какие-либо значения и использовать эти значения в дальнейшем. В зависимости от типа переменной, она может хранить числа или символы, а так же быть или не быть знаковой, то есть отрицательной. Чтобы не затягивать статью, я советую вам изучить какие бывают переменные и их типы по этой ссылке или любой другой из поиска.

В дальнейшем, научившись сообщать микроконтроллеру различные данные и значения, мы обязательно опробуем оператор switch в действии, ну а пока вам важно изучить и понять логику его работы.

Итак, подводя итог, можно сказать, что существует два условных оператора, или оператора выбора – это if и switch. Оператор if больше подходит для одиночных проверок условия, а switch подойдет для случаев с большим количеством возможных вариантов и одним проверяемым значением.

Идем дальше. Теперь у нас на очереди операторы циклов. Любой цикл представляет собой повторяющееся несколько раз действие. Операторы циклов бывают трех видов: for, while и do while — давайте остановимся поподробнее на каждом из них.

Оператор цикла while.

Представим себе простую ситуацию: вы стоите на остановке и ждете автобус под номером 25. В данный момент вы задаетесь условием проверки каждого номера автобуса на совпадение с цифрой 25. Если номер не подходит, то вы продолжаете стоять и ждать нужный — именно так и действует цикл while, который проверяет условие, указанное в его круглых скобках.

Цикл while переводится как «пока» и до тех пор, пока его условие выполняется, он бесконечно долго выполняет код, указанный в его фигурных скобках. Например, на каком-либо этапе работы микроконтроллера, нам важно получить сигнал с какого-нибудь пина Arduino, и, пока сигнала нет, программа не должна ничего выполнять. Как раз в этом случае нам и поможет while, если в условии мы укажем считывание пина и его проверку на равенство нулю.

Важно еще раз отметить, что while будет выполняться до тех пор, пока условие будет истинным, и как только оно станет ложным, при очередной проверке условия произойдет выход из цикла.

Оператор цикла do while.

Оператор цикла do while называется оператором цикла с постусловием и работает практически по тому же принципу, но с одной лишь разницей: сперва происходит выполнение тела цикла, а уже затем проверка условия. Этот цикл используется, когда необходимо хотя-бы один раз выполнить код, указанный в фигурных скобках независимо от истинности или ложности условия, указанного ниже. В случае с обычным циклом while при изначально ложном условии микроконтроллер переходит сразу же к выполнению кода, написанного после фигурных скобок цикла и, таким образом, минует код, указанный в теле цикла.

Прошу обратить ваше внимание на синтаксис оператора do while – возможно, кто-то уже заметил, что после условия в круглых скобках ставится точка с запятой, поскольку тело цикла уже было описано в фигурных скобках выше.

Оператор цикла for.

И, наконец, нам осталось познакомиться с еще одним, не менее важным оператором цикла под названием for. Давайте вернемся к нашей остановке и автобусу. Допустим, что мы дождались нужный нам автобус, зашли внутрь и теперь нам необходимо заплатить за проезд. Билет стоит 22 рубля, рассчитываться мы будем наличными, поэтому достаем кошелек и начинаем отсчитывать монетки, пока не достигнем нужной нам суммы. Как только нужная сумма будет набрана — можно расплачиваться за проезд. Как вы могли догадаться, цикл for действует по тому же принципу: в условии мы указываем действие, которое выполнится в начале цикла, затем само условие работы и действие, выполняемое в конце каждого прохода цикла.

Давайте возьмем конкретный пример для микроконтроллера и посмотрим, как работает этот цикл. Не за горами наступление нового года, поэтому предлагаю сделать с помощью нашей Arduino упрощенную гирлянду. Подключим со 2-го по 11-й пин 10 светодиодов и напишем цикл их включения.

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

Теперь опишем это с помощью программы.

Сперва укажем имя оператора – for. Затем, в открывающейся скобке, указываем действие в начале цикла — в нашем случае это инициализация переменной pin и присваивание ей значения 2, так как ко второму пину подключен первый светодиод. Кстати, если мы не укажем чему изначально равна переменная pin, то компилятор по умолчанию присвоит ей нулевое значение. Затем ставим точку с запятой и указываем условие, при котором цикл должен выполняться — в нашем случае это работа цикла пока переменная pin меньше или равна 11. После чего мы снова ставим точку с запятой и указываем шаг увеличения или уменьшения значения pin. Запись pin++ означает увеличение переменной pin на единицу, такая операция носит название инкремент и равносильна записи pin = pin+1. А запись pin—наоборот, уменьшит значение pin на один, эта операция называется декрементом.

После указания циклу, что ему делать перед каждым новым проходом, ставится закрывающая скобка – обратите внимание, точка с запятой здесь не нужна. Затем по традиции мы открываем фигурные скобки и пишем знакомые нам строки: digitalWrite(pin, HIGH); и delay(100);

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

На этом наш код готов. Как он работает? Опишем по пунктам:

1. Объявление переменной pin и присваивание ей значения 2

2. Проверка условия, что 2 меньше или равно 11

3. Выполнение тела цикла: зажигаем светодиод на 2-м пине и ждем 100 мс.

4. Инкремент переменной pin, теперь она будет содержать в себе цифру 3, то есть 3-й пин

5. Снова проверяем условие, что 3 меньше или равно 11

6. И выполняем подачу высокого потенциала на пин 3 с задержкой

Аналогично зажигаются остальные светодиоды. Когда значение pin будет равно 12, условие 12 меньше или равно 11 не выполнится, и будет осуществлен выход из цикла. Таким образом, мы зажжем последовательно все 10 светодиодов.

Загрузив наш код в микроконтроллер, мы увидим, что нам придется постоянно нажимать кнопку сброса, что бы погасить все светодиоды и зажечь их вновь. Если мы можем сделать цикл, который будет последовательно зажигать светодиоды, то, что нам мешает сделать такой же цикл, который будет эти светодиоды последовательно гасить? Давайте добавим еще один цикл в наш код, только теперь в теле цикла мы будем не подавать высокий потенциал на выход, а наоборот, снимать его. Исправляем HIGH на LOW, снова компилируем код и загружаем его..

После загрузки наши светодиоды будут постоянно включаться и выключаться, что выглядит гораздо интереснее 🙂 Код примера, а так же схему подключения, вы найдете здесь — это ссылка на проект в симуляторе circuits, в нем можно сразу же посмотреть на работу кода.

В качестве домашнего задания попробуйте настроить циклы таким образом, что бы светодиоды загорались не со 2-го по 11-й, а, наоборот, с 11-го по 2-й. Подумайте, как можно включать светодиоды не подряд, а через один, или через два, а так же запускать работу кода по нажатию кнопки, как мы это делали в прошлом видео. Обязательно напишите о своих успехах и возникших вопросах в комментарии.

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

Сircuits от Autodesk — бесплатный online-конструктор

Очень давно я слышал про Arduino, что есть такая заморская вещица, что можно с её помощью делать всякие-интересные электронные штуковины типа подсветки, «волшебные» фонарики, самоходные машинки и прочее. Но как-то не интересовало меня всё это… Пару-тройку недель назад на Пикабу я увидел пост, о том, как сделать Ambilight-подсветку для монитора своими руками на базе Arduino и тут меня зацепило! Я не мог ни есть, ни пить, ни спать, все думал о Arduino и о том, что можно сделать с ним. Начал читать форумы, искать сайты с обучающими материалами и наткнулся на Progmk.ru. Стал смотреть основы Ардуино для начинающих. В четвертом выпуске Виктор сказал, что пора приобретать устройство, послушавшись его я приобрел на всем известном сайте у братского народа Arduino и детали к нему. Тут меня постигли грустные мысли… Видео смотрю, книги про микроконтроллеры листаю…

Но что делать пока Arduino идет в посылке ко мне?

Посмотрел на форумах о программном обеспечении, наткнулся на Fritzing. Программа хороша, и макетку можно рядом с Arduino положить, и проводами контакты соединить, и код прописать… Но плоды своего труда не посмотреть… Нет эмуляции. Пришлось копать интернет дальше. На одном из форумов шло обсуждение VBB, что мол может она эмулировать, но платная. В комментариях предложили воспользоваться бесплатным online- конструктором circuits.io от Autodesk. Для меня это было открытием!

Circuits.io – электроника от новичка до профессионала!

После прохождения регистрации и согласия со всем, что предлагает сделать с моей душой автодеск в лицензионном соглашении, моему взору предстала страница с предложением начать

Снимок1

В правом верхнем углу жму + New и выбираю New Elecronic Labs, открывается страница ради которой все и писалось! 🙂 Перед собой я вижу макетную плату!

Снимок2

Добавив Arduino Uno R3 с помощью кнопки Components +,

03

я перешел в редактор кода, скрытый под кнопкой Code Editor. После ввода кода для мигания встроенным светодиодом, жму Upload & Run и наслаждаюсь магией! СВЕТОДИОД МИГАЕТ! ЭМУЛЯЦИЯ РАБОТАЕТ!

04

Для программы из пятого выпуска мне понадобились:

  • Резистор
  • Кнопка
  • Соединительные провода

Добавив все компоненты, соединив все проводами и переписав код, я получил вторую магию: кнопка жмется, светодиод светится! 🙂

05

Также cirquit.io позволяет строить схему и печатную плату, но для меня это пока не нужно.

06 07

Итог: Приложение добротное, внимания заслуживает, думаю, будет интересно всем, от начинающих и ожидающих посылку (как я 🙂 ), до профессионалов. Построить макет, запустить, посмотреть на свои труды (хоть и виртуальные). Кстати, забыл упомянуть, в приложении есть множество модулей, для построения и тестирования электронных схем.

#5 Первая программа — работаем со светодиодом и кнопкой

Всем привет!  🙂

Очередной выпуск из серии Arduino для начинающих, в котором мы впервые познакомимся со структурой программ на Arduino, а так же разберем пару примеров по работе со светодиодом и кнопкой и их подключением.

Прежде чем начать работу с программами, еще раз напомню, зачем они нужны. Любая программа для микроконтроллера представляет собой набор определенных команд, которые этот микроконтроллер и будет выполнять. А специальным средством для общения человека с микроконтроллером являются языки программирования. На сегодняшний день их существует огромное количество, и каждый из них является отдельным инструментом со своими отличительными особенностями. Стоит отметить, что эти языки делятся по так называемым уровням. Уровень языка показывает, насколько язык близок к естественной для человека записи. Немного позднее я поясню эту разницу.

Ну а сейчас давайте запустим среду Arduino IDE и откроем пример BareMinimum (Файл — Примеры — Basic). Он представляет собой некоторый шаблон для написания программ.

Открыв его, мы с вами видим две записи, void setup и void loop – это так называемые функции, первая выполняется единоразово, при подаче питания на Arduino, а вторая выполняется циклически до тех пор, пока присутствует питание микроконтроллера. В функцию setup записываются различные настройки микроконтроллера для дальнейшей работы — например, это может быть конфигурация портов ввода/вывода, о которых мы говорили ранее, либо инициализация подключенного вами дисплея или датчика. Главное, что нужно запомнить, с этой функции начинается работа микроконтроллера и все, что в ней написано, выполняется только один раз.

Чего не скажешь о функции loop – эта функция выполняется сразу же после функции setup, и после этого микроконтроллер постоянно работает в ней.

Перед тем, как разобрать работу функций на конкретном примере, я хочу показать вам разницу в уровнях языка программирования, о которой говорил ранее.

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

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

А вот еще более низкоуровневый язык программирования Ассемблер, на нем запись нашего шаблона выглядела бы примерно так. Этот язык, можно сказать, позволяет общаться с микроконтроллером «на ты», и контролировать каждый шаг его работы.

Именно поэтому, работая с более простым, высокоуровневым языком Wiring, вы должны всегда иметь ввиду, что за простой записью скрывается несколько строк, так сказать, универсального кода, за который приходится платить бОльшими размерами готовой программы и отсутствием тонкой настройки работы микроконтроллера.

А теперь настало время запустить пример из прошлого выпуска, на котором мы остановились – это пример мигания светодиодом под названием Blink.

Итак, прежде чем разбирать этот код, давайте подумаем, каким образом мы можем заставить наш микроконтроллер мигать светодиодом с нужной нам частотой?

Составим для себя некоторый, обобщенный алгоритм, по которому должна работать программа.

Что мы имеем? Микроконтроллер с портами ввода/вывода, к одному из которых подключен светодиод.

Нужно запомнить, что каждый вывод микроконтроллера может настраиваться как на вход, то есть прием сигнала, так и на выход, то есть подачу сигнала на этот вывод. В нашем случае необходимо зажигать светодиод, то есть подавать на него сигнал, поэтому, первым делом, мы должны указать микроконтроллеру, что один из его выводов должен работать как выход.

В нашем случае, на плате Arduino уже есть подключенный светодиод к 13-му пину (pin – вывод микроконтроллера). Поэтому, настроив 13-й пин как выход, можно посылать команды на подачу высокого и низкого уровня на этот пин, тем самым зажигая и гася светодиод. Укажем подачу высокого уровня на 13-й пин в нашем алгоритме.

Раз у нас стоит задача мигать светодиодом, то необходимо сделать некоторую задержку перед его выключением и включением, поэтому, после подачи высокого уровня, мы добавляем в наш алгоритм блок задержки на, допустим, 1 секунду.

После чего посылаем на 13-й пин сигнал низкого уровня, то есть гасим светодиод, и снова делаем задержку. Далее, нам нужно повторять это действие бесконечно, поэтому направим стрелку обратно к тому месту, где мы подавали высокий уровень. Ну что ж, с точки зрения алгоритма теперь все должно работать, давайте перенесем это на язык программного кода.

В первом блоке мы указали настройку 13-го пина как выхода, посмотрим на наш код — строчка pinMode(LED_BUILTIN, OUTPUT); как раз и отвечает за эту настройку.

Функция pinMode специально реализована для того, что бы указывать в ней какой пин мы хотим настроить, и в какой режим. В данном случае указано, что мы настраиваем константу LED_BUILTIN как выход, то есть — OUTPUT. За константой LED_BUILTIN как раз и скрывается наша цифра 13, то есть номер пина, к которому подключен светодиод, поэтому, заменив эту запись на цифру 13, ничего не изменится, просто разработчики сделали это для упрощения понимания кода начинающими. Итак, повторим, функцией pinMode мы можем настроить нужный нам пин на вход – INPUT или выход – OUTPUT, указав при этом номер пина. Эта команда не зря записана в первую функцию Setup, поскольку настройку пинов микроконтроллера нужно осуществлять всего один раз, при старте программы.

Также я прошу обратить ваше внимание на синтаксис языка программирования, то есть правила написания команд и комментариев. Это схоже с правилами в русском языке, где, например, после каждого предложения необходимо ставить точку. У языка Wiring после каждой команды, не имеющей своих фигурных скобок, необходимо ставить точку с запятой — ; Иначе строчки, подобно предложениям, сольются в одну, и компилятор выдаст вам синтаксическую ошибку.

Так же, как вы могли заметить, кроме команд для микроконтроллера, существуют некоторые серые пометки для самого программиста – они называются комментариями.

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

Комментарии могут быть полезными для пояснения другим людям или самому себе каких-либо фрагментов кода, способных вызвать затруднения в будущем. Так же, с помощью комментариев, можно выключать определенные фрагменты кода, которые пока не должны учитываться компилятором. Для компилятора, все то, что вы укажете в комментариях, становится просто невидимым.

Итак, идем дальше — функция loop, задача которой бесконечно повторять код, написанный внутри нее.

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

Ну а пока посмотрим, что внутри нашей функции — я думаю, вы уже заметили аналогию написанных команд с нашим алгоритмом.

В алгоритме мы указали необходимость подачи на наш 13-й пин сигнала высокого уровня, посмотрим на код – так и есть, функция digitalWrite как раз и делает это. В ее скобках мы опять же указываем номер пина и уровень сигнала, низкий – LOW или высокий – HIGH, так же, аналогом низкого либо высокого уровня являются цифры 0 и 1 соответственно.

Далее нам необходимо осуществить задержку – для таких простых случаев можно прописать её обычной функцией Delay, где в скобках указывается количество миллисекунд. Запись delay(1000); означает задержку работы микроконтроллера на одну секунду. Стоит заметить, что использование в своих проектах функции delay крайне не желательно, поскольку эта функция полностью останавливает работу микроконтроллера, не позволяя выполнять каких-либо других задач. О том, как реализовать более правильный вариант задержки мы поговорим в следующих выпусках, ну а пока, на этапе первого знакомства с программой и простоты поставленной задачи, нам подойдет и такая, упрощенная реализация.

Надеюсь, что вы уже догадываетесь о назначении следующей команды нашей программы. Всё верно — на сей раз, эта команда гасит наш светодиод, подавая на 13-й пин сигнал низкого уровня. Кстати, об уровнях – высокий уровень сигнала в нашем случае равен 5 вольтам, а низкий, соответственно, нулю.

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

Ну что же, думаю, с этим примером всё понятно, и настало время немножко усложнить нашу задачу, а именно – добавить к нашему светодиоду небольшую кнопку, при нажатии на которую светодиод начнет мигать.

Давайте модернизируем наш алгоритм, и добавим в него необходимые блоки.

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

По аналогии со светодиодом, один из пинов нашей Arduino нужно настроить на прием сигнала, и, считывая состояние этого пина, делать вывод о том, нажата кнопка или нет. Поэтому в функции настройки микроконтроллера мы прописываем команду pinMode(pin, INPUT); где вместо pin необходимо указать номер пина, к которому подключена кнопка — в моем случае это 3-й пин.

Итак, пины для светодиода и кнопки настроены, теперь необходимо указать условие, при котором наш светодиод должен мигать. А мигать он должен при появлении на 3-м пине положительного сигнала, подаваемого кнопкой. Поэтому, сперва мы считываем состояние этого пина, и затем, если оно равно единице или высокому уровню, выполняем тело условия, в котором прописано мигание нашим светодиодом.

В коде тем временем добавляется новая запись, представляющая собой условный оператор if, что в переводе означает «если».

После написания оператора if в скобках указывается условие, при истинности которого будет выполняться тело оператора, которое ограничивается уже знакомыми нам фигурными скобками. В нашем случае в условии мы должны проверить, равно ли считанное с 3-го пина значение единице или нет, поэтому в скобках мы указываем такую запись: digitalRead(3) == 1. Функция digitalRead, по последнему слову в наименовании, означает чтение – read, и при ее выполнении возвращает результат в виде единицы или нуля – в зависимости от состояния пина, указанного в скобках. Таким образом, мы получили проверку условия: «равен-ли 3-й пин единице?», и, если равен, выполнить указанные действия в фигурных скобках. Дословно это можно читать так: «если считанное значение с пина 3 равно одному, выполнить команды в скобках». Более подробно об условных операторах и циклах мы поговорим в следующем выпуске, ну а пока, чтобы не перегружать вас информацией, остановимся на таком простом варианте.

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

Ну что же, кажется наш код готов к загрузке, но мы с вами не учли еще один нюанс – он касается подключения кнопок к микроконтроллеру. Все дело в том, что пины Arduino, или выводы микроконтроллера, когда мы считываем с них значение, реагируют на малейшие изменения электромагнитной обстановки окружающей среды, и, оставляя их незащищенными, мы рискуем получить ложные срабатывания нашего условия, что приведет к ошибочным включениям светодиода. Я могу просто касаться пальцем 3-го пина, а микроконтроллер зафиксирует это как подачу высокого потенциала на свой вход и разрешит мигать светодиоду.

Чтобы не было таких неприятных ситуаций, нам необходимо, когда кнопка выключена, постоянно и уверенно подавать на вход микроконтроллера отрицательный потенциал, который не будет давать различным наводкам обмануть наш микроконтроллер. И, в качестве такой защиты при подключении кнопок, используют подтягивающие резисторы на 10-20кОм.

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

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

Такие резисторы, кстати, встроены внутрь самого микроконтроллера Atmega и их легко можно включить в программе – достаточно дописать в функции настройки команду digitalWrite(pin, HIGH); которая подключит к нашему входу подтягивающий к плюсу питания внутренний резистор на 20кОм. В таком случае внешний резистор нам не понадобится, но и в коде необходимо будет заменить условие срабатывания с единицы на ноль.

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

Но, об этом мы поговорим в следующих выпусках, так как в нашем примере это не является критичным моментом.

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

Загрузив код вы увидите, что светодиод не мигает сразу же, как это было раньше, так как микроконтроллер ждет, когда мы нажмем на кнопку и подадим на 3-й пин сигнал высокого уровня. Если сделать это, то при нажатии на кнопку светодиод начинает мигать с частотой один раз в две секунды. Мы можем изменить значение частоты на любое другое, просто поменяв число, указанное в скобках функции delay();

В качестве домашнего задания попробуйте настроить программу и схему подключения на срабатывание от минусового полюса питания, а так же самостоятельно подключить светодиод к любому другому пину, только не забудьте про токоограничивающий резистор, о назначении которого я рассказывал в первом выпуске.

Ну а на этом, пожалуй, всё, в конце я хотел бы пригласить всех желающих в наше скромное сообщество ВКонтакте, где периодически выходит рубрика «Nano за 60 минут» и мы разыгрываем в течение часа бесплатную Arduino Nano. Не забывайте делиться своим мнением о выходящих выпусках и пишите свои вопросы, всем большое спасибо за внимание и до встречи в новом выпуске!

#4 Arduino IDE — установка, настройка и интерфейс

Привет начинающим ардуинщикам!)

Это четвертое видео-статья из серии «основы Arduino для начинающих» и с этого момента мы наконец-то переходим от теории к практике использования Arduino. Сегодня мы установим необходимые компоненты для работы с платформой, а так же впервые взглянем на программную среду Arduino IDE и попробуем с ее помощью загрузить тестовую программу в микроконтроллер.

Для начала работы с Arduino нам нужно установить на свой компьютер непосредственно среду разработки Arduino IDE, в которой мы и будем писать программы. Переходим на сайтArduino и скачиваем свежую версию Arduino IDE, сейчас это версия 1.6.12.

После скачивания открываем файл установки и следуем стандартным инструкциям, в принципе тут не должно возникнуть каких-либо трудностей. Единственное, практически в конце установки необходимо согласиться с установкой USB-драйверов.

Как только среда установится, пробуем ее запустить, если этого не происходит, то, вероятно, на вашем компьютере некорректно установлена Java Runtime Environment и вам необходимо вновь запустить файл установки Arduino IDE, который исправит ошибки, либо скачать Java софициального сайта.

Следующий шаг необходимо проделать тем, у кого оказалась плата Arduino более старой версии, использующая для связи микроконтроллера с компьютером не Atmega16u2, а чип CH341, он выглядит следующим образом.

В этом случае необходимо установить драйвер CH340G для работы с этим чипом.

Итак, кажется, все готово, что бы начать работу с Arduino. Давайте сперва познакомимся со средой Arduino IDE. Эта программа позволяет компьютеру взаимодействовать с Arduino как для передачи данных, так и для прошивки кода в микроконтроллер.

Интерфейс среды содержит следующие основные элементы: текстовый редактор для написания кода [1], область для вывода сообщений [2], текстовая консоль [3], панель инструментов с традиционными кнопками [4] и главное меню [5].

Разберем их всех по порядку.

Программы, создаваемые в среде разработки Arduino, иногда еще называют скетчами. Скетчи пишутся в текстовом редакторе и сохраняются в файлах с расширением .ino. Встроенный текстовый редактор имеет стандартные инструменты копирования, вставки, поиска, замены текста и т.д.

Область сообщений в окне программы является, своего рода, обратной связью для пользователя и информирует его о событиях (в том числе и об ошибках), возникающих в процессе записи или экспорта написанного кода.

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

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

Первая кнопка на панели инструментов предназначена для проверки написанного нами кода на предмет различных ошибок, вторая, так же производит проверку кода, но с последующей загрузкой этого кода в микроконтроллер. Следующими идут стандартные кнопки создания, открытия и сохранения проекта. Отдельная кнопка, расположенная справа и имеющая иконку лупы, запускает программу SerialMonitor, работу с которой мы разберем в одном из следующих выпусков.

Теперь кратко пройдемся по главному меню. Вкладка Файл имеет стандартные пункты меню и здесь особо интересным для нас является пункт «Примеры», содержащий в себе различные примеры проектов для Arduino. Давайте сразу же перейдем в пункт Basics и выберем пример Blink, который представляет собой простую программу мигания стандартным светодиодом на плате Arduino. Немного позднее мы загрузим этот код в микроконтроллер.

Вкладка «Правка» является стандартной, поэтому не будем на ней останавливаться и перейдем к вкладке «Скетч». В ней уже есть знакомые нам команды загрузки и проверки, а так же имеется возможность просмотра папки скетча, то есть его месторасположения на вашем компьютере и подключения различных библиотек, представляющих собой файлы для упрощенной работы с какими-либо датчиками, модулями и прочими компонентами. Более подробно о библиотеках мы поговорим в одном из следующих выпусков.

«Инструменты» — в этой вкладке нас сейчас интересуют пункты выбора платы и порта подключения. При нажатии на первый, перед нами открывается список плат, поддерживаемых средой разработки, который, кстати, можно дополнять самостоятельно. Выберем в зависимости от подключаемой вами платы соответствующее наименование в этом списке. В моем случае это Arduino Uno.

Теперь снова откроем вкладку «Инструменты» и перейдем к пункту «Порт», как видите, он сейчас неактивен, потому что мы еще не подключили плату Arduino к компьютеру. Давайте сделаем это.

При подключении Arduino загорится светодиод питания платы и, если производитель тестировал плату, запустится программа мигания светодиодом. Теперь, при удачном подключении, пункт «Порт» должен стать активным и у нас появится возможность выбрать COM-порт компьютера, к которому подключена плата.

Бывают такие случаи, когда в писке появляется несколько COM-портов и понять к какому именно порту подключена Arduino достаточно сложно. Определить нужный COM-порт поможет диспетчер устройств, в котором необходимо выбрать пункт «Порты (COM и LPT)» и найти нашу Arduino, в скобках будет указан COM-порт который мы и выберем в среде разработки.

Если так получилось, что плата Arduino не определяется в диспетчере устройств или вместо Arduino Uno у вас появляется Atmega16u2, то прошу перейти по этой ссылке, где содержится информация по устранению этой проблемы.

Ну что же, кажется все готово, чтобы произвести первую тестовую загрузку нашего примера в микроконтроллер. Перед загрузкой убедитесь, что вы выбрали правильное название платы и COM-порт, если вдруг COM-порт окажется ошибочным, то Arduino сообщит вам об этом и предложит выбрать другой.

Давайте теперь нажмем на кнопку «Загрузка» и посмотрим, что будет происходить. Строка сообщений уведомляет нас о начале компиляции, то есть переводе нашей программы на язык, понятный микроконтроллеру и затем происходит загрузка этого кода на плату Arduino.

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

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

Ну а на этом все, не бойтесь экспериментировать, всем добра и до встречи в новом выпуске! 🙂

#3 Arduino изнутри — структура, составляющие и их назначение

И снова привет всем любителям и новичкам программирования Arduino!)

Это третье видео (статья) из серии «основы Arduino для начинающих» и сегодня мы поговорим о внутренностях платы Arduino Uno и их предназначении, а так же уделим немного внимания её микроконтроллеру Atmega328.

Традиционно для вас доступны два варианта представления материала — видео и текст, надеюсь, оба варианта будут интересными 🙂

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

Итак, слева я буду показывать китайский аналог Arduino Uno и его компоненты, а справа, шаг за шагом, мы будем строить функциональную схему.

С чего начинается любая схема? Конечно же, это различные компоненты, отвечающие за ее питание. Поэтому первым в нашей функциональной схеме мы выделим именно это. Вообще, у Arduino есть три пути получить энергию для работы: это питание по шине USB, от специального разъема питания на плате или входа Vin. Давайте разберем их все по отдельности.

Подключая плату к компьютеру посредством USB-интерфейса, вы подаете питание на Arduino благодаря четырехпроводной структуре шины USB, где 2 провода отвечают за передачу команд, а два других провода за непосредственное питание устройств. Именно по этим проводам Arduino и получает рабочее напряжение величиной 5В как это видно на принципиальной схеме. Так же, это напряжение поступает на вход стабилизатора напряжения, который понижает его до +3.3В, что необходимо для питания некоторых отдельных компонентов, подключаемых к Arduino, рассчитанных на это напряжение. Кстати, в качестве защиты от большого потребления тока вашей платой, на самом входе питающей линии разработчики установили небольшой предохранитель на 500мА, который, в случае различных обстоятельств, защитит USB-порт компьютера и плату Arduino от возможного выхода из строя.

Итак, следующим на очереди идет разъем питания для подключения, например, сетевого AC/DC-адаптера, аккумулятора или батареи. В отличие от USB-порта, где предполагается стабильное наличие напряжения 5В (или около того), в случае разъема питания ситуация складывается несколько иная, поскольку он рассчитан на подключение к нему источников питания различных напряжений. Диапазон этих значений колеблется в пределах от 6 до 20В и, при прямом подключении, это совсем не годится для компонентов нашей схемы. Поэтому разработчики поставили на входе питания стабилизаторы напряжения — один на 5В, другой на 3.3В. А так же парочку конденсаторов и диод, в качестве элементов борьбы с помехами и защиты от перепутывания полярности питания. Стоит отметить, что для стабилизатора напряжения всегда нужно напряжение, несколько выше того уровня, до которого он будет его понижать, и специфика стабилизатора такова, что уменьшение напряжения питания ниже 7В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. Именно поэтому, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12В.

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

Ну а если теперь подключить источник питания к этому выводу, то напряжение так же попадет на стабилизатор 5В и плата будет запитана. Это удобно в случае использования различных батарей или аккумуляторов без специальных разъемов питания.

Стоит отметить, что Arduino сама выбирает источник питания с самым большим напряжением, и в этом ей помогает специальный элемент, называющийся компаратором. Если в двух словах, то компаратор, это такое устройство, которое сравнивает подаваемый на него сигнал с каким-либо опорным значением, и, если этот сигнал превышает опорное значение, то компаратор выдает на своем выходе логическую единицу (в нашем случае +5В).

Итак, с блоком питания разобрались, идем дальше.

На очереди у нас связующее звено между компьютером и программируемым нами микроконтроллером. Это еще один микроконтроллер ATmega8U2, либо, в более новых версиях ATmega16U2, который практически не заметен на плате.

Этот микроконтроллер представляет собой USART, что в переводе означает «Универсальный синхронно-асинхронный приемо-передатчик». Именно он осуществляет передачу данных по самому распространенному на сегодняшний день протоколу RS-232, c помощью которого связывает COM-порт вашего компьютера и программируемый микроконтроллер.

Помните, мы говорили, что USB-кабель имеет 4 провода, два из которых питающие, а два других – сигнальные? Так вот, именно по сигнальным проводам и происходит передача данных от ПК к микроконтроллеру и обратно, а свидетельствуют о приеме, либо передаче, специальные светодиоды на плате, имеющие названия Rx и Tx, где R это сокращение слова Receive, то есть прием, а T – transmit – то есть отправление. Причем выводы Rx и Tx всегда подключаются разноименно, то есть Rx принимающего устройства соединяется с Tx передающего, и наоборот. Это видно из схемы подключения двух микроконтроллеров на плате Arduino. Для тех, кто желает знать о том, как передаются данные по USB при помощи UART, я рекомендую ознакомиться с этой ссылкой.

Ну вот, наконец, мы и подошли с вами к главному компоненту платы Arduino – микроконтроллеру Atmega328P, который, собственно, и является основным вычислительным центром этой платформы. Давайте разберемся, из каких основных частей он состоит.

В обобщенном виде, любой микроконтроллер можно разбить на три составляющие части:

1. Вычислительный блок, иначе именуемый как арифметико-логическое устройство илипроцессор. Также, наверняка многие из вас слышали или видели такую аббревиатуру как CPU (Central Processing Unit) что в переводе на русский значит «центральное процессорное устройство». Именно этот блок является самой главной частью системы и предназначен он для выполнения различных операций с числами. А вот уже последовательность этих операций называется программой. Каждая операция кодируется в виде числа и записывается в память микроконтроллера, но об этом, в другой раз..

2. Собственно, второй основной частью микроконтроллера и является модуль памяти. Это специализированное электронное устройство, которое представляет собой набор ячеек, в каждой из которых может храниться одно число. Именно здесь хранится написанная вами программа и другие команды микроконтроллера. Память делится на оперативную — ОЗУ(оперативное запоминающее устройство) и постоянную – ПЗУ (постоянное запоминающее устройство. Принципиальная разница между этими видами памяти в том, что в случае с оперативной памятью, при выключении питания микроконтроллера, записанные значения не сохраняются и существуют только до тех пор, пока это питание присутствует. Например, такая память используется для хранения каких-либо промежуточных результатов вычислений. А вот данные, хранимые в постоянной памяти, наоборот, никак не зависят от наличия питания и могут быть использованы микроконтроллером сразу же после включения. В такую память, например, записывается вся разработанная вами программа, и она никуда не пропадет при повторной подаче напряжения на микроконтроллер.

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

Конечно же, не стоит забывать, что некоторые ножки отвечают за питание и прочие компоненты, подключаемые к микроконтроллеру, но большинство из них все-таки являются портами ввода-вывода, отвечающими за непосредственное управление микроконтроллером различными датчиками, модулями, светодиодами, транзисторами и так далее. Подавляющее большинство этих портов были выведены разработчиками Arduino по краям платы и, для удобства работы, подписаны.

Именно с этими портами нам и предстоит работать в дальнейшем, ведь суть любой микропроцессорной системы сводится к управлению чем-то извне, а иначе, зачем нам микроконтроллеры? 🙂

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

Не пугайтесь таких сложных названий, на самом деле, все просто – для работы любого микроконтроллера нужен некий генератор импульсов, благодаря которому он сможет осуществлять свою деятельность по последовательному выполнению команд. Например, мы написали с вами программу мигания светодиодом 10 раз в секунду. Но как микроконтроллер узнает, не имея никакого представления о длительности одной секунды, когда ему пора включить светодиод, а когда пора выключить? Именно благодаря кварцевому резонатору, который, в зависимости от его номинала, генерирует определенное число импульсов за одну секунду, это число имеет единицы измерения – герцы и называется частотой. Например, частота, равная 5Гц означает 5 импульсов в секунду, 10Гц — десять импульсов и так далее.

На плате Arduino Uno для двух микроконтроллеров установлены, соответственно, два кварцевых резонатора с частотой 16МГц, что означает работу резонатора с частотой 16 миллионов(!) импульсов в секунду — только представьте, какая это огромная скорость! Именно эти импульсы и считает наш микроконтроллер, а впоследствии, по их количеству, делает вывод о том, сколько времени прошло с запуска какой-либо процедуры. За весь этот счет отвечают различные счетчики и таймеры, о которых мы обязательно поговорим в следующих выпусках, но пока вам достаточно знать, отчего зависит скорость работы микроконтроллера и как он ориентируется во времени.

Так же на плате Arduino вы могли заметить небольшую кнопку – она называется кнопкой сброса или RESET, и при нажатии на нее переводит наш микроконтроллер в исходную позицию, с которой он начинал свою работу.

Итак, мы познакомились с вами с основными составляющими платы Arduino и совсем немного поговорили о микроконтроллере ATmega. Хочу заметить, что изучению структуры и принципам работы микроконтроллеров можно посвятить большой отдельный курс, поэтому я не стал углубляться в эту тему и рассчитываю на вашу дальнейшую любознательность и стремление изучить и понять как можно большее в этой интересной сфере. В качестве дальнейшего учебного пособия по изучению микроконтроллеров AVR, не сочтите за рекламу, я советую вам книгу Белова А.В., в которой, на мой взгляд, достаточно доступным языком описаны все нюансы работы с микроконтроллерами.

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

#2 Знакомство с Arduino, выбор платы и компонентов

Привет начинающим ардуинщикам!)

Это второй выпуск из серии Arduino для начинающих, и по нашему плану сегодня мы впервые знакомимся с платформой Arduino – ее историей возникновения и примерами некоторых проектов, которые создавались на ее базе. Ну а во второй половине видео (статьи) мы попробуем разобраться, какую плату лучше выбрать и, вообще, какие компоненты нам понадобятся в дальнейшем.

Как обычно, я подготовил весь материал для вас в двух вариантах — видео и текст, а какой из них выбрать — решать уже лично вам 😉

Arduino — что же это такое? Наверняка многие из вас уже имеют представление об этой платформе, которая разрабатывалась для прототипирования (то есть разработки) различных устройств. И со временем так получилось, что эта платформа стала одной из самых популярных в кругу начинающих любителей электроники. И тут все дело в простоте: подключили плату к компьютеру, установили программную среду и уже можно писать свои первые программы, причем, на упрощенном, высокоуровневом языке – обо всем этом мы обязательно поговорим в следующих выпусках.

В видеоролике на этом моменте я предлагаю посмотреть на примеры некоторых проектов на Arduino, ну а мы, минуя этот момент, продолжим.. 🙂

Из большого количества проектов на основе Arduino становится понятно, что платформа получилась очень гибкой и подходящей под огромное количество различных задач, что является еще одним плюсом в копилку причин её популярности.

Ну а история появления бренда Arduino берет своё начало ещё в далеком 1002 году, в Италии, где с 1002 по 1004г.г. правил король Ардуин, в честь которого и была названа эта платформа. А её создателем является Массимо Банци (Massimo Banzi), который в 2005 году, вместе со своей группой разработчиков выпустил скромный инструмент для студентов в Институте проектирования взаимодействий города Ивреа. Первый прототип платы выглядел достаточно просто, и тогда еще не имел никакого названия — чуть позднее Массимо назвал плату в честь бара Arduino, владельцем которого он тогда и являлся.

Банци и его сотрудники ставили себе целью создать устройство, представляющее собой простую, открытую и легкодоступную платформу для разработки, с ценой не более 30 долларов — приемлемой для студенческого кармана. Хотели они и выделить чем-то свое устройство на фоне прочих. Поэтому в противовес другим производителям, экономящим на количестве выводов печатной платы, они решили добавить их как можно больше, а также сделали свою плату синей, в отличие от обычных зеленых плат.

Продукт, который создала команда, состоял из дешевых и доступных компонентов и главная задача разработчиков состояла в том, чтобы гарантировать работу устройства по принципу «plug-and-play», — то есть, чтобы пользователь, достав плату из коробки и подключив к компьютеру, мог немедленно приступить к работе.

Так и появилась Arduino, которая очень быстро набрала популярность в интернете и в настоящий момент является одной из самых популярных платформ для создания устройств любителями и новичками в этой сфере. До сих пор настоящие, оригинальные платы Arduino производятся только в Италии в городе Торино и в США, в Нью-Йорке.

Стоит отметить, что сейчас, помимо изначально созданной Arduino Extreme, на свет вышло большое количество других плат, специально разработанных для определенных задач. Давайте поближе рассмотрим некоторые из них.

Для начала, пару слов о самой распространенной на сегодняшний день плате Arduino UNO, именно её все начинают представлять, когда речь заходит об Arduino. Более детально с внутренностями платы мы ознакомимся в следующем выпуске.

Arduino представляет собой плату, с размещенными на ней компонентами, главным из которых является микроконтроллер ATmega328P. Он является основной вычислительной системой этой платформы, поскольку именно для него и создается программное обеспечение, с помощью которого микроконтроллер взаимодействует с внешним миром посредством специальных портов ввода/вывода данных.

Для лучшего понимания можно привести очень яркий пример, которым мы с вами и являемся. У человека есть мозг, то есть некоторая вычислительная система снабженная памятью, и этот мозг, посредством нервных окончаний управляет различными органами, будь то глаза или руки. Тоже самое делает и микроконтроллер, а что и как ему делать, а так же какими устройствами управлять, решаете уже непосредственно вы, указывая все это в программном коде.

Таким образом, любая плата Arduino, это, прежде всего, микроконтроллер, выводы которого удобно разведены по краям платы и подписаны. У Arduino UNO таких выводов 20, 6 из которых аналоговые, а остальные 14 — цифровые.

Как уже говорилось раньше, Arduino UNO является самой популярной из всех плат и часто выбирается теми людьми, кто пока еще не знаком с какими-то нюансами своих будущих устройств и только учится программированию микроконтроллеров.

Так же у Uno есть младший аналог – это Arduino Nano, которая, если рассматривать китайские аналоги, отличается от UNO меньшими размерами применяемых компонентов и, отсюда, небольшими размерами самой платы. Здесь уже стоит отталкиваться от того, кому как удобнее.

Наоборот, старшим аналогом UNO является плата Arduino Mega с микроконтроллером ATmega1280, либо 2560 в зависимости от конфигурации. Такая плата подходит для уже более серьезных проектов, рассчитанных на большое количество подключаемых устройств и емкого программного кода, поэтому она содержит 54 цифровых выхода и 16 аналоговых, а так же объем памяти в ней по сравнению c Uno и Nano уже не 32Кб, а 128Кб — что, в 4 раза больше.

Следующей в списке идет Arduino Leonardo, совпадающая по размерам с UNO, но отличающаяся в применяемом микроконтроллере – на сей раз это Atmega32u4. Эту плату компьютер распознает как подключенную к нему клавиатуру или мышь, поэтому, она, помимо прочего, идеально подходит для создания на ее основе различных джойстиков и других устройств ввода.

Специально для реализации небольших устройств, разработчики Arduino создали плату под названием Arduino Mini, имеющую очень компактные размеры и построенную на базе микроконтроллера ATmega168. Так же существует версия Arduino Pro Mini, главным отличием которой является отсутствие ножек-выводов. Из-за такого сокращения компонентов плата не имеет собственного USB и программируется через специальные USB-преобразователи и адаптеры.

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

Зачастую для ваших проектов будет не хватать одной лишь платы Arduino — например, в случае, если вы захотите взаимодействовать с интернетом, или управлять множеством сервоприводов. И здесь на помощь приходят так называемые шилды (от англ. Shield — щит), представляющие собой платы расширения, и подключаемые к Arduino по принципу бутерброда.

Их количество очень разнообразно и каждый шилд отвечает за выполнение каких-либо конкретных задач.

Так же, помимо шилдов, активно используются специальные модули для Arduino, задача которых облегчить процесс подключения тех или иных компонентов к вашему проекту.

В качестве примера можно привести модуль реле, благодаря которому вам не придется самостоятельно собирать необходимую для работы реле схему, а лишь подключить при помощи проводов готовые выводы модуля с входами Arduino.

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

Ну а теперь настало время разобраться с тем, какие компоненты вам понадобятся для начала работы с Arduino.

Первым делом, конечно же, вам необходимо обзавестись самой платой Arduino. В качестве самой первой платы, на которой вы будете обучаться и строить свои проекты, я рекомендую приобрести Arduino Uno, из-за ее, на мой взгляд, удобных для макетирования размеров и наличия всех необходимых выводов. Здесь есть три варианта приобретения платформы — покупать дорогую оригинальную плату, купить плату от сторонних xDuino-производителей, либо китайский аналог Arduino.

Откуда вообще появилось такое деление на оригинальные и не оригинальные платы? А все дело в том, что Arduino изначально выложила в открытый доступ всю документацию и схемы по своим платам и, отсюда, любой желающий мог взять и повторить их разработку, либо привнести в неё что-то свое. Конечно же, самыми активными в этом плане оказались наши китайские друзья, и на сегодняшний день вы найдете просто огромное количество всевозможных вариантов плат Arduino.

Естественно, главное отличие оригинальной платы от не оригинальной, это её цена и используемые при сборке компоненты. Но, не спешите гнаться за высокой ценой и качеством оригинальной платы, поскольку, во-первых, плата Arduino не настолько сложна в изготовлении, что бы её могли производить только избранные заводы с высокоточным оборудованием, а, во-вторых, так как вы только начинающий пользователь Arduino, есть очень большой шанс сделать что-нибудь не так и испортить дорогостоящую вещь. Поэтому, лично я рекомендую вам к покупке аналоги китайского производителя, поскольку с нынешним развитием техники, действительно неплохую плату можно собрать на вполне рядовом заводе и никаких космических технологий при этом не потребуется, вопрос только в качестве применяемых компонентов. Но, право выбора остается за каждым из вас и это мое сугубо личное мнение. Сам я работал только с платами, заказанными из Китая, и могу сказать, что, по-прежнему, не вижу смысла переплачивать за более качественные оригиналы.

Помните, я упомянул про три возможных варианта, и не назвал еще один. Так вот, средними по ценовому диапазону и качеству компонентов являются платы так называемых xDuino производителей. Где вместо x подставляются различные наименования разработчиков, например, Freeduino, Seeeduino, CraftDuino и так далее. Эти платы являются полностью Arduino-совместимыми и зачастую имеют всяческие штрихи и дополнения, в виде каких-то улучшений или доработок.

Версия платы Arduino под названием Craftduino

Итак, достаточно рассуждений, давайте, наконец, посмотрим, как выбрать нужную плату из огромного множества производителей и при этом остаться довольным покупкой. Раз уж мы договорились, что в дальнейшем будем работать с Arduino Uno, то выбирать мы будем именно её. Если начать искать плату на всем известных сайтах Aliexpress или Ebay, то в целом можно выделить два вида плат, один из которых немного дешевле второго, и вот почему.

Перед вами две фотографии этих плат, давайте посмотрим на их отличия.

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

Второй отличительной особенностью этих плат является устройство связи платы с USB вашего компьютера — на левой плате это устаревший FTDI USB микроконтроллер, на правой — микроконтроллер ATmega8U2, имеющий свои плюсы, о которых мы говорить пока не будем. В остальном же, платы практически идентичные, и, я думаю, каждый из вас уже сделал выбор в пользу более совершенного, правого варианта. Кстати, эта версия Arduino имеет полное название как Arduino Uno R3, где R3 обозначает третью ревизию.

Итак, самую главную часть для дальнейшей работы мы рассмотрели и теперь осталось определиться с тем, что еще понадобится вам при дальнейшем обучении по этому курсу:

1. Макетная плата, которой вы будете пользоваться практически постоянно. Она позволяет осуществлять быстрый монтаж различных соединений и компонентов без необходимости использовать паяльник и прочие вещи.

2. Набор из резисторов различных номиналов, о назначении которых мы говорили в прошлом выпуске

3. Небольшое количество светодиодов

4. Кнопки

5. Соединительные провода

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

Модуль реле — он позволит вам управлять различной нагрузкой в вашем доме.

Датчик движения – позволит регистрировать перемещение нагретых тел в зоне его видимости (пригодится при создании, например, автоматического включения света или сигнализации)

Фоторезистор – позволит наблюдать за степенью освещенности комнаты.

LCD дисплей – с его помощью можно выводить различные информационные сообщения от ваших устройств.

Сервопривод – мини-двигатель, при помощи которого возможно управление какими-либо механизмами, или даже конструирование подвижных частей роботов.

Ну и любые другие компоненты на ваш вкус. Что бы посмотреть, какие еще бывают датчики для Arduino, просто введите в поиске соответствующую фразу «датчики и модули для Arduino» и перед вами откроется множество вариантов.

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

Ну что же, на этом, пожалуй, всё, я надеюсь, что теперь вам будет гораздо проще выбрать нужную для себя Arduino и необходимые компоненты для работы с ней и прощаюсь с вами до следующего выпуска, в котором мы уделим внимание непосредственно внутренностям Arduino Uno и её микроконтроллеру ATmega328P.

Надеюсь, вам было интересно, спасибо за внимание и до встречи в новом выпуске! 🙂

P.S. Некоторые ссылки для заказа компонентов вы найдете здесь:http://gointger.ru/komponentyi/

#1 Основные понятия электроники и схемотехники

Привет интересующимся Arduino и микроконтроллерами!)

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

Для тех, кто имеет возможность смотреть видеозаписи, рекомендую видео версию статьи — там все более наглядно и красиво, ну а для остальных под видеозаписью есть текстовый вариант 🙂

Для начала давайте посмотрим вокруг себя. В современном мире нас окружает огромное количество всевозможных электронных устройств, которые делают нашу жизнь проще и удобней. Что же их всех объединяет?

Конечно же, это то, что все они работают от электрической энергии, которая вырабатывается различными генераторами, берется из аккумуляторных батарей и так далее. Но что представляет собой электрическая энергия или электричество? Тут все не так просто, но чтобы не лезть в дебри электроники и не затягивать пост, вы должны для себя понять, что основной частицей, благодаря которой и создается электрическая энергия, является электрон (e-).

Они повсюду, в любой вещи, которую вы видите — даже в маленькой капле воды их миллиарды и миллионы. Но, кроме электронов, которые, кстати, носят отрицательный заряд и очень подвижны, есть частицы, которые, наоборот, имеют положительный заряд и практически не двигаются — они называются протонами (p+). Подобно магнитам, разноименные заряды электронов и протонов притягиваются друг к другу, а одноименные заряды, наоборот, отталкиваются.

Благодаря взаимодействию электронов и протонов друг с другом, то есть перемещению электронов к протонам, мы с вами и получаем электрическую энергию. А перемещаются электроны по так называемым проводникам. Все вы видели провод от вашего зарядного устройства или линию электропередач, а может, кто то даже видел медные дорожки на платах -все это электрические проводники, по которым могут свободно перемещаться электроны.

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

Стоит заметить, что кроме проводников и диэлектриков существуют и другие материалы, такие как полупроводники, сверхпроводники, магнетики и так далее, но пока мы их рассматривать не будем.

Итак, мы сказали, что у нас есть отрицательные электроны, которые передвигаются по проводникам в сторону положительно заряженных протонов, но не сказали — что заставляет их это делать.

А здесь работает так называемая электродвижущая сила или, если пока не вдаваться в подробности, напряжение, которое наверняка вам знакомо. Напряжение представляет собой разность потенциалов между отрицательными и положительными зарядами, обозначается буквой U и выражается в вольтах (В).

Именно напряжение и создает электрический ток в нашем проводнике, а сам электрический ток есть не что иное, как направленное движение тех самых заряженных частиц, о которых мы говорили раньше. Единицами измерения силы тока являются амперы (А) и чем больше эта сила, тем больше зарядов проходит по поперечному сечению проводника за единицу времени. Обозначается ток английской буквой I.

Но кроме напряжения и тока не стоит забывать про еще одну важную величину, которая называется сопротивлением. Эта величина служит мерой способности электронов перемещаться по какому-либо материалу и измеряется в Омах. Например, если вернуться к изоляторам, которые защищают нас от поражения электрическим током, то, можно сказать, что они, как правило, имеют очень большое сопротивление – то есть сопротивляются протеканию по ним потока электронов и тем самым выполняют роль защиты. А, например, медный провод имеет наоборот небольшое сопротивление, и электроны свободно протекают по нему. Кстати, чем больше диаметр провода, тем меньше будет его сопротивление и тем больший поток электронов он сможет пропустить за единицу времени. Именно поэтому все высоковольтные провода имеют такое большое сечение.

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

А начнем мы с самого простого – со светодиода, полное название которого звучит как светоизлучающий диод. Это один из самых первых элементов, с которым знакомятся начинающие любители электроники. Помните, мы говорили, что существуют как проводники, которые проводят ток, так и диэлектрики, которые, наоборот, препятствуют его протеканию. Так вот, светодиод — это такой элемент, который может быть как проводником, так и диэлектриком, отсюда его и приравнивают к такому классу элементов как полупроводники, из-за того что он может как проводить, так и не проводить электрический ток сквозь себя, и здесь всё дело в направлении тока, протекающего сквозь него.

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

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

Давайте возьмем такой пример: у нас есть источник питания с напряжением 5В и силой тока в 1А, а так же светодиод, рассчитанный на напряжение 2В и максимальный ток в 25мА. Если подключить наш светодиод к источнику питания напрямую, то он непременно сгорит, поскольку постарается принять на себя такой поток электронов, который только сможет.

Этот поток ничем не ограничен (кроме мощности источника питания) и попросту убьет наш светодиод, превысив его максимально допустимый ток в 25мА. Что бы этого избежать, нам и пригодится сопротивление, речь о котором шла раньше. А специальными элементами, которые помогут нам подобрать необходимую величину сопротивления, являются токоограничивающие резисторы.

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

Но, что бы определиться, какого именно номинала резистор нам нужен, необходимо воспользоваться вот такой несложной формулой:

R = (Uпит — Uпр) / I

где, R – это то самое значение сопротивления, которое мы ищем,

Uпитания – напряжение питания схемы, в нашем случае это 5В,

Uпрямое – это прямое падение напряжения на светодиоде, которое обычно составляет от 1,5В до 2,3В у стандартных светодиодов, и до 3,5В у сверхярких. В нашем случае это 2В.

И, наконец, I прямое – это прямой ток через светодиод, который планируется получить, в нашем случае он составляет 25мА.

Кстати, наверняка многие из вас слышали о законе Ома. Так вот, сейчас мы как раз и пользуемся его формулами. Правда, изначально закон Ома звучит так: напряжение равняется произведению тока на сопротивление, и записывается вот в таком виде: U = I*R

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

Итак, вернемся к нашей формуле, подставив все значения в нее, мы получим, что необходимое сопротивление для нашей схемы и светодиода составляет 120 Ом. Давайте проверим это в симуляторе.

Как видите, теперь светодиод потребляет необходимый ему ток в 25мА и потому работает в штатном режиме и не перегорает.

Итак, сделаем из всего этого выводы. При добавлении светодиода, да и вообще любых компонентов в схему, необходимо удостовериться как минимум в трех вещах:

Первое, проверьте правильность полярности подключения компонента к источнику питания

Второе, по возможности ознакомьтесь со спецификацией на этот компонент и узнайте его максимально допустимые параметры

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

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

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

Выводы питания. Обычно они обозначаются как небольшие перечеркнутые кружочки или стрелки, с обязательно подписанным значением напряжения, а так же могут обозначаться буквенно, например, VCC, VDD, V+, Vs+ и так далее — всё это означает наибольшее положительное напряжение.

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

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

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

Первый вариант это последовательное соединение компонентов. Представим себе ситуацию, что при расчете необходимого сопротивления для нормальной работы вашего светодиода, вы получили значение 120 Ом, но в вашей скромной коллекции не нашлось подходящего резистора с таким сопротивлением. Вот здесь вам на помощь и придет последовательное соединение нескольких резисторов в одну цепь, которые в сумме дадут искомое значение. Например, у вас нашлись резисторы на 100 и 22 Ома и, подключив их последовательно, вы получите 122 Ома, что практически идеально подходит для вашего расчета.

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

Чтобы избежать такой неприятной ситуации вам поможет параллельное подключение лампочек между собой. Это когда все положительные выводы лампочек подключаются к одной, положительной точке, а все отрицательные, соответственно, к другой. Более наглядно это можно увидеть на картинке.

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

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

И, наконец, третий способ подключения, это параллельно-последовательное соединение компонентов. В данном случае происходит комбинирование подключаемых деталей, которые могут быть соединены, например, последовательно между собой и входить в ветвь, подключаемую параллельно к источнику питания вместе с другими ветвями.

Стоит отметить, что у последовательного и параллельного вида подключений есть свои особенности расчета, и, для тех, кто хочет узнать о них более подробно, можно заглянуть, например, сюда: http://hightolow.ru/resistor3.php

Так же оставляю ссылку (http://cxem.net/beginner/beginner9.php) на более подробные обозначения других элементов на принципиальных схемах, а вы, в качестве домашнего задания, попробуйте самостоятельно найти и прочесть небольшие схемы — отыщите на них питание и землю, точки соединения, последовательное и параллельное включение элементов и так далее.

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

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

Всем добра и спасибо за внимание! 🙂

Нулевой выпуск из серии видеороликов по основам Arduino для начинающих

Привет всем любителям Arduino или пока только присматривающимся к этой платформе:)

Рад представить вам первое, а, точнее, нулевое видео из серии Arduino для начинающих. В нем я расскажу из чего будет состоять этот небольшой курс и с чем нам придется работать.

Охранная сигнализация или система оповещения на Arduino

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

Для тех, кто хочет хлеба и зрелищ — видеоролик, который полностью копирует содержимое статьи:

 

Ну а для тех, кто больше любит читать, продолжим.. 🙂

Итак, перед тем как начать созидать нечто подобное, вам необходимо учесть дальность расположения от места управления, внутренний климат и другие характеристики охраняемого вами помещения.

В моей системе необходимо было обеспечить возможность управления сигнализацией удалённо, то есть из дома, поэтому у меня было два пути решения этой проблемы:

1. Организовать беспроводное соединение между двумя Arduino.

2. Либо же обойтись одной Arduino и в гараж вывести лишь длинный провод с датчиками.

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

Я решил идти по второму пути — с проводом и одной Arduino, и вот почему: во-первых расстояние до моего гаража составляет примерно 50 метров, что не так много для ощутимого затухания сигнала в линии и вполне реализуемо по затратам кабеля, а во вторых, из-за неотапливаемости помещения зимой, температура в нем может опускаться до -30-35 градусов, что пагубно скажется на Arduino без дополнительного обогрева. Да и перебои с электричеством у нас частые, поэтому пришлось бы лепить дополнительный аккумулятор, что бы поддерживать обогрев и работоспособность.

В итоге я решил просто проложить витую пару и на ее конце навешать датчики. Ну а аккумулятор для резервного питания добавлю как-нибудь попозже.

В качестве датчика открытия двери я использовал датчик Холла и большой магнит, о принципе работы такой связки я рассказывал в этом видео, когда делал бесконтактный датчик тока. Если в двух словах, то датчик реагирует на подносимый к нему магнит, который расположен на подвижной двери ворот, сам же датчик закреплен на раме. Датчик меняет свои значения в зависимости от интенсивности магнитного поля, то есть расстояния до магнита. Таким образом, можно контролировать положение двери в любой момент времени.

Теперь немного подробнее о получившейся системе, если ее так можно назвать 🙂

Всю её можно разбить на три части: это та, что стоит дома (пульт управления), та, что стоит в охраняемом помещении (датчик Холла и пр), и та, что связывает эти части (витая пара).

Пульт управления я оборудовал небольшим LCD-экраном на две строки и кнопкой для запуска и остановки охранного режима, а так же поставил внутрь пищалку и блок питания, поместив всю начинку в корпус для автоматических выключателей. Отверстие под автоматы пришлось подпилить и сделать немного длиннее, что бы туда вошли все символы экрана, а кнопку управления вывести сбоку, так же сделав отверстие обычным ножом. В результате получился не совсем убогий корпус, который можно прикрутить к стене.WP_20160721_17_08_36_Pro

Из корпуса выходит витая пара на 8 жил, на обратном конце которой расположены датчик температуры и влажности, датчик Холла и пьезо-пищалка с кнопкой:

WP_20160715_21_03_31_Pro

Схема подключения всей системы получилась довольно простой и выглядит как-то так:

signal_bb

Датчик температуры и влажности я добавил чтобы не только знать о текущем климате внутри помещения, но и на основании датчика температуры уведомлять о возможном возгорании, т.к. при пожаре температура в помещении очень резко поднимается до больших значений свыше 100 градусов по Цельсию.

Алгоритм работы сигнализации достаточно прост и представить его можно вот такой упрощенной блок-схемой:

блок-схема

Что касается кода, то объяснять его, я думаю, нет особого смысла, так как там все разбито по функциям и хорошо закомментировано. Скажу лишь только что код, конечно же, можно оптимизировать и внести в него изменения на своё усмотрение, он далек от идеала, но протестирован на живом примере и стабильно работает. Так же, если вам лень разбираться в коде и хочется просто собрать все по схеме, я специально оставил в самом верху листинга две переменные: первая отвечает за временную задержку на включение сигнализации после нажатия кнопки (я поставил 3 минуты), а вторая отвечает за включение оповещения об открытии двери, то есть то время, когда вы открыли дверь и еще не выключили сигнализацию — по умолчанию на это дается 30 секунд:

#define DELAY_CLOSE 180000
#define DELAY_OPEN 30000

В результате получилась довольно простая и надежная система оповещения, вполне справляющаяся со своей основной обязанностью.

Программный код и схемы вы найдете здесь: GitHub

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

 

Джойстик/геймпад на базе Arduino UNO R3 и открытого проекта UnoJoy

В этом видео вы узнаете как, используя свои руки, Arduino и часик свободного времени можно сделать многофункциональный геймпад-пульт управления для различных игр на ПК или PS3.

Сделать это поможет открытый проект UnoJoy, который превратит обычную Arduino UNO в полноценное HID-устройство наподобие клавиатуры или мыши.

Ссылка на UnoJoy: https://code.google.com/p/unojoy/

Прошу заметить, что конструкция в видео — простой пример, образец, собранный за 1 минуту на макетке, и это ни в коем случае не какое-то готовое устройство. Прототип был сделан с целью показать что можно сделать своими руками необходимую панель для управления игровым процессом. Ну а вариантов реализаций, на самом деле, масса — поставить руль на потенциометр — и вот уже готов руль для гонок, поставить ползунковый резистор — и вот готовы руды для самолета, за которые пришлось отдать гораздо меньшую сумму, чем просит производитель. А главная задумка — с нажатием кнопок на этом пульте, вы можете не только управлять игровым процессом, но и запускать реальные, физические процессы, например — включение моторчиков для вибрации при стрельбе или какой либо световой шкалы-индикации того же уровня оборотов двигателя.

Опять же, вариантов масса, нужно только подключить фантазию и воплощать свои задумки. В моем случае я использую эту связку — ардуино-компьютер-физические объекты, для экспериментов с технологией GVS (гальваническая стимуляция вестибулярного аппарата), о которой упомянул в видео и обязательно расскажу в отдельной записи.

Ну что же, надеюсь этот материал будет для вас полезным, добра вам и удачных экспериментов! 🙂