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

Что такое Arduino UNO

Arduino UNO по своей природе это плата расширения для микроконтроллера, которая делает работу с данными микроконтроллером значительно проще и удобнее (в рассматриваемой нами Arduino UNO Rev3 установлен микроконтроллер ATmega328p).

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

Arduino UNO решает все эти проблемы, он предоставляет всю необходимую среду для работы микроконтроллера, а так же делает его программирование крайне простым делом не требующим от вас каких либо сложных знаний или дополнительного оборудования кроме вашего ПК. Более того, производители предоставили широкие возможности питания Arduino: USB или любой источник питания от 7В до 12В, что позволяет питать плату как от USB порта вашего ПК так и от блока питания или обычной батарейки, например "кроны".

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

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

И так что же такое Arduino UNO теперь думаю немного понятнее, теперь давайте знаем что же он может.

Программа для Arduino

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

Функция SETUP

void setup () {

// Код

}

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

Функция LOOP

void loop () {

// Код

}

Эта функция и является основной рабочей функцией вашего Arduino. После выполнения функции setup() ваш микроконтроллер приступит к выполнению именно этой функции и когда функция дойдет до конца, микроконтроллер начнет ее выполнение повторно, и так до бесконечности. Думаю название функции loop (петля) говорит само за себя. В общем эта функция которая будет выполняться по кругу пока будет подключено питание.

Стандартный шаблон программы для Arduino выглядит так:

Включение требуемых файлов если нужно Объявление глобальных переменных если нужно Объявление прототипов функций если нужно void setup() { Код настройки }

void loop() {

// Основной код

}

Управление пинами Arduino

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

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

void setup() {

pinMode(6, OUTPUT);	// 6 пин будет работать на выход
pinMode(5, INPUT)	// 5 пин будет работать на вход

}

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

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

На плате Arduino UNO существуют 3 вида пинов: Цифровые пины. Это пины: 0,1,2,4,7,8,12 Цифровые пины с функцией PWM (Широтно-импульсная модуляция). Это пины: 3,5,6,9,10,11,13 Аналоговые пины: Это пины: А0,А1,А2,А3,А4,А5

Цифровые пины Если пин работает на вход (INPUT), то любое напряжение на нем, рассматривается микроконтроллером как 1 (единица), а если напряжение отсутствует то 0 (ноль). Таким образом используя цифровой пин на выход, вы можете только узнать о том факте есть на пине напряжение или нет, но не то какой оно величины, для этого есть другие пины, о которых будет сказано чуть ниже. Получить информацию о состоянии данного типа пина в можете так:

int val = digitalRead(4); // Получить состояние пина 4: 

В переменную val будет записано значение 1 или 0, что будет означать: 1 - есть напряжение, 0 - нет напряжения.

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

digitalWrite(4, HIGH);	// Подать максимальное напряжение на пин 4
digitalWrite(4, LOW);	// Подать нулевое напряжение на пин 4

Константы HIGH и LOW в данном контексте означают, подать/выключить (HIGH) и не подавать/выключить (LOW). В целом просто цифровой пин это как выключатель, имеющий лишь два положение либо "Вкл." либо "Выкл." и вы можете либо узнавать положение выключателя либо управлять этим выключателем.

Цифровые пины с функцией PWM Если пин работает на вход (INPUT), то он совершенно аналогичен обычному цифровому пину работающему на вход.

Если пин работает на выход (OUTPUT), то с помощью функции PWM мы получаем возможность контролировать напряжением и подавать его от нулевого до максимального (на самом деле меняется не напряжение а сигнал PWM но в целом выглядит именно как изменение напряжения). Для того что бы сделать это, вам потребуется всего пара строк кода (Запишите в требуемый цифровой пин с функцией PWM любое значение от 0 до 255):

analoglWrite(6, 0);	// Подать нулевое напряжение на 6 пин
digitalWrite(6, LOW);	// То же самое что и analoglWrite(6, 0);
analogWrite(6, 128);	// Подать половину максимального напряжения на 6 пин
analogWrite(6, 255);	// Подать максимальное напряжение на 6 пин
digitalWrite(6, HIGH);	// То же самое что и analogWrite(6, 255);

Таким образом возможный диапазон напряжений "размазывается" по диапазону от 0 до 255 соответственно. То есть получается следующие, если к примеру ваш Arduino может выдавать на пин от 0В до +5В, то значение 0 будет равно 0В, значение 255 будет равно +5В, а например значение 128 будет равно 2.5В, так как 128 это половина диапазона 0-255. Таким образом вы можете рассчитать любое требуемое вам напряжение в данном диапазоне.

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

int val = analogRead(A0);	// Получить уровень напряжения на пине А0

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

Если пин работает на выход (OUTPUT), то данный пин работает совершенно так же как и цифровой пин с функцией PWM. И совершенно все что было сказано про цифровой пин с функцией PWM выше, применимо к аналоговым пинам работающим на выход. Установить требуемый уровень напряжения на пине можно так:

analogWrite(A0, 0);	// Установить нулевое напряжение на пине А0
digitalWrite(A0, LOW);	// То же самое что и analogWrite(A0, 0);
analogWrite(А0, 128);	// Установить половину максимального напряжения на А0 пин
analogWrite(A0, 255);	// Установить максимальное напряжение на пине А0
digitalWrite(A0, HIGH);	// То же самое что и analogWrite(A0, 255);

Важно обратить внимание на следующие, хотя пины и называются аналоговыми и способны изменять уровень входящего напряжения, так как микроконтроллер имеет встроенный АЦП (аналогово-цифровой преобразователь) но вот выходное напряжение достигается опять такие с помощью PWM сигнала, так как Arduino UNO не имеет встроенного ЦАП (цифро-аналоговой преобразователь) что бы выдавать аналоговый сигнал. Таким образом, в режиме работы аналоговых пинов на выход, вы получаете именно PWM сигнал. В большинстве случаев это не имеет никакого значения, но в некоторых ситуациях может быть очень важным.

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

А в заключении пара важных моментов которые вы обязаны помнить: Обязательно устанавливаете режимы пинов, (желательно делать это в функции setup), какой пин в каком режиме вы будите использовать, с помощью функции pinMode(), это обязательно, следите за этим. Arduino способен пропускать через каждый пин ток не более чем 20 mA (миллиампер), а это значит что вы должны всегда следить за этим в своих проектах, и при необходимости обязательно использовать токоограничивающие резисторы. В противном случае вы можете легко сжечь микроконтроллер. Максимальное напряжение питания 12В, не подавайте напряжение выходящие за этот предел, это может привести к выходу из строя вашего Arduino.

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