Сайт о телевидении

Сайт о телевидении

» » Урок 1 введение общие сведения об ардуино. Arduino для начинающих - стартовый набор или как начать ардуинить? Много фото и видео

Урок 1 введение общие сведения об ардуино. Arduino для начинающих - стартовый набор или как начать ардуинить? Много фото и видео

Сегодня речь пойдет об использовании SD и micro SD карт в Arduino. Мы разберемся как можно подключить SD карты к Ардуино, как записывать и считывать информацию. Использование дополнительной памяти может быть очень полезно во многих проектах. Если вы не знаете что такое SPI, I2C и аналоговые выводы, то советую вам посмотреть прошлые уроки и разобраться с этими интерфейсами связи Ардуино.

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

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

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

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

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

Первое, с чего следует начать работу по освоению Arduino – это приобрести отладочную плату (хорошо бы сразу приобрести монтажную плату и т.п.). Уже описывал, какие виды плат Arduino представлены на рынке. Кто еще не читал статью советую ознакомиться. Для изучения основ выбираем стандартную плату Arduino Uno (оригинал или хорошую китайскую копию — решать вам). При первом подключении оригинальной платы проблем возникнуть не должно, а вот с «китайцем» нужно будет немного поковыряться (не переживайте – всё покажу и расскажу).

Подключаем Arduino к компьютеру USB кабелем. На плате должен засветиться светодиод «ON «. В диспетчере устройств появится новое устройство «Неизвестное устройство «. Необходимо установить драйвер. Тут внесу небольшую неясность (кот отвлек – я не запомнил, какой из драйверов решил «проблему неизвестного устройства ».

Предварительно скачал и распаковал программную средy Arduino (arduino-1.6.6-windows ). Затем скачал этот . Он самораспаковывающейся. Запустил файл CH341SER.EXE . Выбрал установку (INSTALL) . После установки появилось сообщение, нажал «Ок » (прочитать не успел).

После перешёл в свойства все еще «неизвестного устройства» и выбрал кнопку «Update Driver». Выбрал вариант «Установка из указанного места» – указал папку с разархивированной программной средой Arduino. И о чудо – всё удачно заработало…

Запускаем программу Arduino (в моём случае 1.6.6) и разрешаем доступ.

Все проекты (программы) для Arduino состоят из двух частей: void setup и void loop . void setup выполняется всего один раз, а void loop выполняется снова и снова.

Прежде чем продолжим, необходимо выполнить две обязательные операции:

— указать в программной среде Arduino, какую плату вы используете. Tool->board-> Arduino Uno. Если отметка уже стоит на нужной вам плате – это хорошо, если нет – ставим отметку.

— указать в программной среде какой последовательный порт вы используете для связи с платой. Tool->port-> COM3. Если отметка уже стоит на порте – это хорошо, если нет – ставим отметку. Если у вас в разделе порты представлен больше, чем один порт, как же узнать, какой именно используется для соединения с платой? Берём плату и отсоединяем от неё провод. Снова заходим в порты и смотрим, какой из них исчез. В моём случае вкладка «порты» вообще стала не активной.

Снова подключаем провод USB.

Для первой программы никаких дополнительных модулей не нужно. Будем включать светодиод, который уже смонтирован на плате (на 13 выводе микроконтроллера).

Для начала сконфигурим 13 вывод (на вход или на выход).

Для этого вводим в блок «void setup » команду pinMode , в скобках указываем параметры (13, OUTPUT ) (Какой вывод задействован, Режим работы ). Программная среда выделяет слова/команды соответствующим цветом шрифта.

Переходим в блок «void loop » и вводим команду digitalWrite с параметрами (13, HIGH) .


Первая программа готова, теперь осталось загрузить её в микроконтроллер. Нажимаем кнопку UPLOAD.

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

Светодиод мы включили, он немного посветил, пора его выключать. Для этого видоизменим написанную нами программу. Вместо «HIGH » напишем «LOW ».


Нажимаем кнопку UPLOAD. Светодиод погас.

Мы уже познакомились с понятием « », пора им воспользоваться. Дальнейшие программы будут становится все объёмнее и сложнее, а работы по их изменению будут занимать все больше и больше времени, если мы оставим подобный стиль написания кода.

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

Создаём глобальную переменную int LED_pin = 13; (тип переменной, имя переменной, присваиваемое ей значение ).


Нажимаем кнопку UPLOAD. Светодиод светится. Все работает отлично.

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

Для этого вводим вторую команду «digitalWrite » с параметрами (LED_pin, LOW ).


Нажимаем кнопку UPLOAD. И что мы видим? Светодиод светится «в пол наказа». Причина кроется в том, что время переключения двух состояний (HIGH и LOW ) ничтожно мало и человеческий глаз не может уловить эти переключения. Необходимо увеличить время нахождения светодиода в одном из состояний. Для этого пишем команду delay с параметром (1000 ) . Задержка в миллисекундах: 1000 миллисекунд – 1 секунда. Алгоритм программы следующий: включили светодиод – ждём 1 секунду, выключили светодиод – ждём 1 секунду и т.д.


Нажимаем кнопку UPLOAD. Светодиод начал мерцать. Все работает.

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


Нажимаем кнопку UPLOAD. Светодиод мерцает, как и мерцал.

Доработаем написанную нами программу. Задачи следующие:

  • Светодиод включен 0,2 секунды и выключен 0,8 секунды;
  • Светодиод включен 0,7 секунды и выключен 0,3 секунды.

В программе созданы 2 переменные, что отвечают за временные задержки. Одна определяет время работы включенного светодиода, а вторая – время работы выключенного светодиода.

Спасибо за внимание. До скорой встречи!

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

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

Что такое Arduino и для чего оно нужно?

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

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

Стартовый набор Arduino

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

Базовый набор ардуино для начинающих: Купить
Большой набор для обучения и первых проектов: Купить
Набор дополнительных датчиков и модулей: Купить
Ардуино Уно самая базовая и удобная модель из линейки: Купить
Беспаечная макетная плата для удобного обучения и прототипирования: Купить
Набор проводов с удобными коннекторами: Купить
Комплект светодиодов: Купить
Комплект резисторов: Купить
Кнопки: Купить
Потенциометры: Купить

Среда разработки Arduino IDE

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

Версия Windows Mac OS X Linux
1.8.2

Язык программирования Ардуино

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

Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:

  • После каждой инструкции необходимо ставить знак точки с запятой (;)
  • Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
  • Так же необходимо указывать тип данных перед объявлением переменной.
  • Комментарии обозначаются: // Строчный и /* блочный */

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

Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().

Функция setup

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

// переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 11; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; void setup() { pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); } // функция для подавления дребезга boolean debounse(boolean last) { boolean current = digitalRead(switchPin); if(last != current) { delay(5); current = digitalRead(switchPin); } return current; } void loop() { currentButton = debounse(lastButton); if(lastButton == LOW && currentButton == HIGH) { ledOn = !ledOn; } lastButton = currentButton; digitalWrite(ledPin, ledOn); }

// переменные с пинами подключенных устройств

int switchPin = 8 ;

int ledPin = 11 ;

// переменные для хранения состояния кнопки и светодиода

boolean lastButton = LOW ;

boolean currentButton = LOW ;

boolean ledOn = false ;

void setup () {

pinMode (switchPin , INPUT ) ;

pinMode (ledPin , OUTPUT ) ;

// функция для подавления дребезга

boolean debounse (boolean last ) {

boolean current = digitalRead (switchPin ) ;

if (last != current ) {

delay (5 ) ;

current = digitalRead (switchPin ) ;

return current ;

void loop () {

currentButton = debounse (lastButton ) ;

if (lastButton == LOW && currentButton == HIGH ) {

ledOn = ! ledOn ;

lastButton = currentButton ;

digitalWrite (ledPin , ledOn ) ;

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

ШИМ Arduino

Широтно-импульсная модуляция (ШИМ) — это процесс управления напряжением за счет скважности сигнала. То есть используя ШИМ мы можем плавно управлять нагрузкой. Например можно плавно изменять яркость светодиода, но это изменение яркости получается не за счет уменьшения напряжения, а за счет увеличения интервалов низкого сигнала. Принцип действия ШИМ показан на этой схеме:

Когда мы подаем ШИМ на светодиод, то он начинает быстро зажигаться и гаснуть. Человеческий глаз не способен увидеть это, так как частота слишком высока. Но при съемке на видео вы скорее всего увидите моменты когда светодиод не горит. Это случится при условии что частота кадров камеры не будет кратна частоте ШИМ.

В Arduino есть встроенный широтно-импульсный модулятор. Использовать ШИМ можно только на тех пинах, которые поддерживаются микроконтроллером. Например Arduino Uno и Nano имеют по 6 ШИМ выводов: это пины D3, D5, D6, D9, D10 и D11. В других платах пины могут отличаться. Вы можете найти описание интересующей вас платы в

Для использования ШИМ в Arduino есть функция Она принимает в качестве аргументов номер пина и значение ШИМ от 0 до 255. 0 — это 0% заполнения высоким сигналом, а 255 это 100%. Давайте для примера напишем простой скетч. Сделаем так, что бы светодиод плавно загорался, ждал одну секунду и так же плавно угасал и так до бесконечности. Вот пример использования этой функции:

// Светодиод подключен к 11 пину int ledPin = 11; void setup() { pinMode(ledPin, OUTPUT); } void loop() { for (int i = 0; i < 255; i++) { analogWrite(ledPin, i); delay(5); } delay(1000); for (int i = 255; i > 0; i--) { analogWrite(ledPin, i); delay(5); } }

// Светодиод подключен к 11 пину

int ledPin = 11 ;

void setup () {

pinMode (ledPin , OUTPUT ) ;

void loop () {

for (int i = 0 ; i < 255 ; i ++ ) {

analogWrite (ledPin , i ) ;

delay (5 ) ;

delay (1000 ) ;

for (int i = 255 ; i > 0 ; i -- ) {

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


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

Arduino с чего начать новичку

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


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

Итак, переходим к первому уроку Arduino схемы начинающих электронщиков.

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


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

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

Код скачать:
Скейтч с комментариями и пояснениями в файле 001-1_mig-led.ino

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


Функция delay (1000) задерживает обработку программы на 1000 милисекунд. Все это идет в вечном цикле loop() .

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

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

Вместо установки значения в HIGH, а затем в LOW, мы получим значение ledPin и проинвертируем его. Допустим если оно было HIGH, то станет LOW и т.п.

Второй вариант кода Ардуино для управления светодиодом здесь:

Затем можно заменить функцию delay() . Вместо нее, лучше использовать функцию millis() . Она возвращает количество миллисекунд, прошедшее с момента старта программы. Функция переполнится приблизительно через 50 суток работы программного кода.

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

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

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

Начало этой программы такое же как и у любого другого стандартного скетча Arduino.


В данном примере используется два цифровых ввода-вывода Arduino. Светодиод подсоединяется к 8 пину, который сконфигурирован как OUTPUT. К 9 через подключена кнопка, которая настроена как INPUT. Когда нажимаем на кнопку пин 9 устанавливается в HIGH, и программа переключает вывод 8 в HIGH, тем самым включая светодиод. Отпускание кнопки сбрасывает девятый вывод в состояние LOW. Затем код переключает вывод 8 в LOW, отключая световой индикатор.

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

Arduino UNO обладает тремя портами: B (цифровые входа/выхода с 8 по 13); C (аналоговые входа); D (цифровые входа/выхода с 0 по 7)

Каждый порт осуществляет управление тремя регистрами. Первый DDR задает чем будет являться pin входом или выходом. При помощи второго регистра PORT можно задать pin в состояние HIGH или LOW. При помощи третьего можно считать информацию о состояние ножек Arduino, в случае если они работает на вход.

Для работы схемы задействуем порт B. Для этого установим все ножки порта как цифровые выхода. У порта B всего 6 ножек. Биты регистра DDRB должны быть заданы в "1" , если пин будет использоваться как выход (OUTPUT), и в "0" , если пин планируем применять как вход (INPUT). Биты портов нумеруются с 0 по 7, но не всегда имеют все 8 пинов

Допустим: DDRB = B00111110; // установить ножки порта В с 1 по 5 как выхода, а 0 как вход.

В нашем схеме бегущих огней мы задействуем пять выходов: DDRB = B00011111 ; // установить пины порта В с 0 по 4 как выходы.

Для записи данных в порт В нужно задействовать регистр PORTB. Зажечь первый светодиод можно с помощью управляющей команды: PORTB = B00000001; , первый и четвертый LED: PORTB = B00001001 и т.п

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

Пример:

varA = 1; // 00000001
varA = 1 varA = 1 varA = 1

Теперь вернемся к исходному коду нашей программе. Нам требуется ввести две переменные: upDown будет включать в себя значения куда двигаться - вверх или вниз, а вторая cylon укажет какие Led зажигать.

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


Для подключения с общим катодом схема подключения трехцветного led будет почти аналогична, за исключением того, что общий вывод будет подключен не к земле (gnd на устройстве), а к выводу +5 вольт. Выводы Красный, зеленый и синий в обоих случаях подключаются к цифровым выходам контроллера 9, 10 и 11.

К девятому пину Arduino UNO подключим внешний светодиод через сопротивление 220 Ом. Для плавного управления яркостью последнего применим функцию analogWrite() . Она обеспечивает вывод ШИМ-сигнала на ножку контроллера. Причем команду pinMode() вызывать не требуется. Т.к analogWrite(pin,value) включает два параметра: pin - номер ножки для вывода, value - значение от 0 до 255.

Код:
/*
Учебный пример начинающего ардуинщика, раскрывает возможности команды analogWrite() для реализации Fade-эффекта светодиода
*/
int brightness = 0; // яркость LED
int fadeAmount = 5; // шаг изменения яркости
unsigned long currentTime;
unsigned long loopTime;

Void setup() {
pinMode(9, OUTPUT); // устанавливаем 9 пин как выход
currentTime = millis();
loopTime = currentTime;
}

Void loop() {
currentTime = millis();
if(currentTime >= (loopTime + 20)){
analogWrite(9, brightness); // устанавливаем значение на 9 выводе

Brightness = brightness + fadeAmount; // прибавляем шаг изменения яркости, которая установится в следующем цикле

// если достигли мин. или макс. значения, то идем в обратную сторону (реверс):
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
loopTime = currentTime;
}
}

Работа Arduino с энкодером

Энкодером предназначен для преобразования угла поворота в электрический сигнал. С него мы получаем два сигнала (А и В), которые противоположны по фазе. В этом учебном примере мы будем применять энкодер SparkFun COM-09117, имеющий двенадцать положений на один оборот (каждое положение ровно 30°). На приведенном ниже рисунке хорошо видно, как зависят выход А и В друг от друга при движении энкодера по часовой или против часовой стрелки.

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

При необходимости можно при помощи расчета частоты, определить насколько быстро происходит вращение энкодера.

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

Учитывая тот факт, что в самом быстром случае, мы можем повернуть ручку энкодера на 180° за 1/10 секунды, то это будет 6 импульсов за 1/10 секунды или 60 импульсов в одну секунду.

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

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


По сигналам программного таймера необходимо постоянно осуществлять сравнение текущего значения выхода А энкодера с предыдущим значением. Если состояние меняется от положительного к нулю, то мы опрашиваем состояние выхода В. В зависимости от результата опроса состояния мы увеличиваем или снижаем счетчик значения яркости LED светодиода. Код программы с временным интервалом около 5 мс (200 Гц), представлен ниже:

Код начинающего ардуинщика:
/*
** Энкодер
** Для управлением яркостью светодиода применяется энкодер фирмы Sparkfun
*/

Int brightness = 120; // яркость светодиода, начинаем с половины
int fadeAmount = 10; // шаг изменения яркости
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12; // pin 12
const int pin_B = 11; // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT); // устанавливаем 9 вывод как выход
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = millis();
loopTime = currentTime;
}
void loop() {
currentTime = millis();
if(currentTime >= (loopTime + 5)){ // проверяем состояния каждые 5мс (частота 200 Гц)
encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // выхода В энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние меняется с положительного к нулевому
if(encoder_B) {
// выход В в положительном состояние, значит вращение осуществляется по часовой стрелке
// увеличиваем яркость свечения, не более чем до 255
if(brightness + fadeAmount }
else {
// выход В в нулевом состояние, значит вращение идет против часовой стрелки
// снижаем яркость, но не ниже нуля
if(brightness - fadeAmount >= 0) brightness -= fadeAmount;
}

}
encoder_A_prev = encoder_A; // сохраняем значение А для последующего цикла

AnalogWrite(9, brightness); // устанавливаем яркость на девятый пин

LoopTime = currentTime;
}
}

В этом примере для начинающих мы рассмотрим работу с пьезоизлучателем для генерирования звуков. Для этого возьмем пьезодатчик позволяющий генерировать звуковые волны в диапазоне частот 20 Гц - 20 кГц.

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

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


Программа для управления проста и наглядна. Начинается она с подключения файла, содержащего все необходимые команды для управления сервоприводом. Далее, мы создаем объект servo, например servoMain. Следующая функция setup(), в которой мы прописываем, что сервопривод подсоединен к девятому выводу контроллера.

Код:
/*
Arduino Servo
*/
#include
Servo servoMain; // Обьект Servo

Void setup()
{
servoMain.attach(9); // Servo подключен к девятому выводу
}

Void loop()
{
servoMain.write(45); // Повернуть сервопривод влево на 45 °
delay(2000); // Ожидание 2000 милисекунд (2 секунды)
servoMain.write(0); // Повернуть серво влево на 0 °
delay(1000); // Пауза 1 с.

delay(1500); // Ожидание 1.5 с.
servoMain.write(135); // Повернуть серво вправо на 135 °
delay(3000); // Пауза 3 с.
servoMain.write(180); // Повернуть серво вправо на 180 °
delay(1000); // Ожидание 1 с.
servoMain.write(90); // Повернуть серво на 90 °. Центральная позиция
delay(5000); // Пауза 5 с.
}

В главной функции loop() , мы задаем команды для серводвигателя, выдерживая паузы между ними.

Схема Arduino счетчика на 7-сегментном индикаторе

Этот простой проект на Arduino для начинающих, заключается в создании схемы счетчика на обычном 7-сегментном индикаторе с общим катодом. Программный код, приведенный ниже, позволяет при нажатии на кнопку запускать счет от 0 до 9.

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


Справа показана таблица соответствия выводов Arduino и выводов светодиодного индикатора.

Код этого проекта:

byte numbers = {
B11111100, B01100000, B11011010, B11110010, B01100110,
B10110110, B10111110, B11100000, B11111110, B11100110
};
void setup() {
for(int i = 2; i pinMode(i, OUTPUT);
}
pinMode(9, INPUT);
}
int counter = 0;
bool go_by_switch = true;
int last_input_value = LOW;
void loop() {
if(go_by_switch) {
int switch_input_value = digitalRead(9);
if(last_input_value == LOW && switch_input_value == HIGH) {

}
last_input_value = switch_input_value;
} else {
delay(500);
counter = (counter + 1) % 10;
}
writeNumber(counter);
}

Void writeNumber(int number) {
if(number 9) {
return;
}
byte mask = numbers;
byte currentPinMask = B10000000;
for(int i = 2; i if(mask & currentPinMask) digitalWrite(i,HIGH);
else digitalWrite(i,LOW);
currentPinMask = currentPinMask >> 1;
}
}

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

12 02.2017

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

Из этой статьи вы узнаете:

Доброго времени суток всем любителям техники! С вами Гридин Семён. Сегодня мы рассмотрим, при помощи какого оборудования мы начнём программировать самые распространённые платы.

Ардуино — что же ты такое?

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

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

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

Для кого это?

Кому нужен Ардуино?

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

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

Первое знакомство. Настраиваем компьютер

Перед тем как озаботиться вопросом подключения устройства к ПК, стоит изучить вопрос о том, какой лучше купить Ардуино, ведь версий этого конструктора для гиков существует много. Самая популярная и при этом , которая стоит порядка 25-30$. Впрочем, есть и более дорогие, продвинутые версии, способные взаимодействовать со смартфонами на базе Android, устройствами на Linux, с увеличенным числом портов, более мощным “железом”, которые больше подойдут для уже искушенных в этом вопросе пользователей. Нам же с вами больше подойдет вариант Uno или схожий с ним (например, Leonardo). Пусть вас не пугают 32 килобайта памяти и процессор с частотой всего 16 мегагерц – этого с лихвой хватит для первых изысканий!

Чтобы запрограммировать платформу и видеть на дисплее все заданные действия, используется один из самых распространенных языков программирования – C++. Работа с ним осуществляется с помощью официальной оболочки Arduino IDE, она абсолютно бесплатна для использования в некоммерческих целях. Имеются и другие варианты, более сложные и изощренные, но начать лучше с рекомендованного разработчиком варианта.

Подключение и загрузка в память программ выполняется через USB-порт. Подсоединение же модулей может выполняться множеством способов – в их числе применение особой макетной доски, перемычек, проводов… Паяльник при этом использовать совсем не обязательно. Подсоединять можно почти что угодно – любой гаджет может стать полноценной частью вашей конструкции! При этом вы также можете создавать многослойные “бутерброды” из так называемых – дополнительных плат, расширяющих возможности основной микросхемы. Главное – это базовый процесс в сердце самого Uno, остальное же лишь служит для получения дополнительных возможностей. Например, это может быть подключение к Интернету или управление мощным мотором.

Используем IDE

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

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

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

С уважением, Гридин Семён