Arduino uno программирование для начинающих. Спасибо за внимание! Что нам понадобится

Ядром платформы Arduino является микросхема-микроконтроллер известная как ATmega328.

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

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

Частота выполнения операций процессора задается тактовым генератором 16 МГц. Питание можно подавать через разъем USB. Для работы без USB-питания Arduino требуется отдельный источник питания напряжением от 7 до 12 V (это напряжение нормализуется до необходимых уровней регулятором расположенным на борту, так что вам просто нужен недорогой источник питания для этого). На борту, оба уровня напряжения 5 В и 3,3 В доступны пользователю, из которых можно выжать максимум 50 мА тока.

Память Arduino состоит из трех типов: флэш-память, где хранится программа 32 Кб; оперативная память (SRAM) 2 КБ, где процессор хранит и перезаписывает переменные, используемые в программе; и постоянная память (EEP-ROM) 1 КБ, где программист может хранить данные, которые должны остаться при перезапуске контроллера (как флэш-память, где хранится программа). По сравнению с современными компьютерами, которые оперируют как минимум несколькими гигабайтами, 35 кбайт кажется смешным, но на самом деле этого достаточно для большинства целей. Из-за отсутствия операционной системы, использование памяти переносится под полную вашу ответственность: если случится переполнение памяти или будет обращение к несуществующей ячейке памяти, ваша программа может повести себя непредсказуемо, и это довольно трудно отследить во время отладки. Вы всегда должны держать количество переменных под контролем в вашей программе.

Процессор ATmega328 подключен к 14 дискретным портам ввода / вывода (пронумерованных от 0 до 13), 6 аналоговым входам и порту USB. Дискретный вход / выход это электрическое соединение, которое может иметь два логических состояния: 1 и 0, или TRUE и FALSE, или, как в синтаксисе Arduino, LOW и HIGH. Если сигнал в значении LOW, соответствующий вывод имеет нулевой потенциал 0 В - тоесть подключен к общему проводу. Если сигнал HIGH, то уровень напряжения между данным выводом и землей 5 В.

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

Контакты 3, 5, 6, 9, 10 и 11 могут использоваться как выходы ШИМ (широтно-импульсной модуляции PWM) и имеют некоторые аналоговые настройки. Соответственно, их ячейки памяти содержат значения между 0 и 255.

Рис.1 Arduino UNO, как он выглядит сверху и снизу. Обратите внимание на карту Италии на задней стороне.

Контакт 13 также подключен к светодиоду на борту. Когда сигнал LOW, светодиод выключен, а если сигнал HIGH светодиод светится.

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

Аналоговые входы помечены A0 ... A5: каждый из них имеет цифровое разрешение 10 бит,

то есть они преобразовывают любое напряжение от 0 до 5 В в число между 0 и 1023, которое может быть доступно в памяти.

Все платформы смонтированы на плате, размером 60,6 мм × 53,4 мм и весом не больше 25 г (рис. 1).

На платах также имеются разъемы USB A / B, с помощью которых вы можете подключить их к компьютеру для коммуникации. Подключение USB-также обеспечивает питание для Arduino при подключении к компьютеру, так что для начала вам не нужен внешний источник питания.

Программа

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

Все эти инструменты входят в одну программу IDE (Integrated Development Environment), свободную

для скачивания на веб-сайте Arduino: выберите необходимую операционную систему вашего компьютера и скачайте программу. Она выглядит так же как и большинство обычных компьютерных программ. Она имеет несколько закладок на разные окна. Одно из таких окон используется для редактирования программы. Оно называется sketch на жаргоне Arduino. Скетчи пишутся в упрощенном C ++.


Рис.2 Программа Arduino появляется как окно, в котором можно ввести текст программы, которую попросту называют скетч.

Вы можете скомпилировать свой скетч в программе Arduino (рис. 2) нажав на кнопку Verify в верхнем левом углу окна: процесс компиляции транслирует C ++ программу в соответствующие машинные коды процессора ATmega328. После компиляции исполняемый скетч может быть загружен в память Arduino через USB кабель, при нажатии на кнопку Upload. Вам может понадобиться выбрать соответствующий COM-порт в меню, если есть более чем один доступный. Загрузка скетча всегда вызывает запуск компилятора, в первую очередь. Запуск скетча происходит сразу после окончания загрузки.

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

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

Краткие сведения об Arduino

Что такое Arduino?

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

Как связаны Arduino и роботы?

Ответ очень прост — Arduino часто используется как мозг робота.

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

Урок 1. Мигающий светодиод на Arduino

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

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

Урок 2. Подключение кнопки на Arduino

На этом уроке вы научитесь подключать кнопку и светодиод к Arduino.

При нажатой кнопке светодиод будет гореть, при отжатой – не гореть. Это также базовая модель.

Урок 3. Подключение потенциометра на Arduino

В этом уроке вы научитесь подключать потенциометр к Arduino.

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

Урок 4. Управление сервоприводом на Arduino

На этом уроке вы научитесь подключать сервопривод к Arduino.

Сервопривод – это мотор, положением вала которого можно управлять, задавая угол поворота.

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

Урок 5. Трехцветный светодиод на Arduino

На этом уроке вы научитесь подключать трехцветный светодиод к Arduino.

Трехцветный светодиод (rgb led) — это три светодиода разных цветов в одном корпусе. Они бывают как с небольшой печатной платой, на которой расположены резисторы, так и без встроенных резисторов. В уроке рассмотрены оба варианта.

Урок 6. Пьезоэлемент на Arduino

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

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

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

Урок 7. Фоторезистор на Arduino

На этом уроке нашего курса вы научитесь подключать фоторезистор к Arduino.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него.

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

Урок 8. Датчик движения (PIR) на Arduino. Автоматическая отправка E-mail

На этом уроке нашего курса вы научитесь подключать датчик движения (PIR) к Arduino, а также организовывать автоматическую отправку e-mail.

Датчик движения (PIR) — инфракрасный датчик для обнаружения движения или присутствия людей или животных.

В нашей модели при получении с PIR-датчика сигнала о движении человека Arduino посылает компьютеру команду отправить E-mail и отправка письма происходит автоматически.

Урок 9. Подключение датчика температуры и влажности DHT11 или DHT22

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

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

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

Урок 10. Подключение матричной клавиатуры

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

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

Урок 11. Подключение модуля часов реального времени DS3231

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

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

Приложение. Готовые каркасы и роботы Arduino


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

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

Еще один вариант — покупка каркаса или корпуса робота: платформы на колесиках или гусенице, гуманоида, паука и т.п. В этом случае начинку робота придется делать самостоятельно.

Приложение. Мобильный справочник


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

Приложение состоит из 3-х основных разделов:

  • Операторы;
  • Данные;
  • Функции.

Где купить Arduino


Наборы Arduino

Курс будет пополняться дополнительными уроками. Подпишитесь на нас

Цикл статей и обучающих схем с радиолюбительскими экспериментами на 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 выводам практически любого устройства. Рассмотри наиболее популярные и интересные модули расширения или как их еще называют - шилды.

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

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

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

Чаще всего плата выглядит вот так:

На рисунке показана одна из плат Ардуино – Arduino Uno. Мы изучим ее подробнее на следующих уроках.

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




Вся работа над проектом разбивается на следующие этапы:

  1. Придумываем идею и проектируем.
  2. Собираем электрическую схему. Тут нам пригодится макетная плата, упрощающая монтаж элементов. Безусловно, понадобятся навыки работы с электронными приборами и умение .
  3. Подключаем к компьютеру через USB.
  4. и записываем ее в плату буквально нажатием одной кнопки на экране в .
  5. Отсоединяем от компьютера. Теперь устройство будет работать автономно – при включении питания оно будет управляться той программой, которую мы в него записали.

Программа и среда программирования выглядят вот так:

На экране показана программа (на сленге ардуинщиков текст программы называется “скетч”), которая будет мигать лампочкой, подсоединенной к 13 входу на плате Ардуино UNO. Как видим, программа вполне проста и состоит из понятных для знающих английский язык инструкций. В языке программирования Arduino используется свой диалект языка C++, но все возможности C++ поддерживаются.

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

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

Быстрый старт с Arduino

Для начала давайте поймем, с чем же и чем же мы собираемся заниматься. Что такое Ардуино и как его использовать? Если вы уже знакомы с темой – можете смело перескочить дальше. Если нет – давайте вместе выполним короткое погружение.

Ардуино – это…

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

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

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

Почему Ардуино?

Вся прелесть Ардуино заключается в следующих простых преимуществах:

  1. Простота. Да, да – именно простота (хотя Лего и другие игрушки, без сомнения, привычнее, но мы сравниваем не с ними). Для юных разработчиков электроники Ардуино «прячет» огромное количество разнообразных технических вопросов. Многие достаточно сложные проекты можно создавать очень быстро, без длительного погружения в детали. А это ведь очень важно для ребенка – не утратить интерес до первого полученного своими руками результата.
  2. Популярность. Ардуино крайне популярна, вы сможете без труда найти ответы на любые вопросы на многочисленных форумах или сайтах. Сообщество Ардуино обширно и дружелюбно – там относительно мало прожженных жизнью снобов-инженеров и полно любителей и начинающих, с удовольствием делящихся своей радостью от найденного и узнанного. Это, конечно, откладывает отпечаток на качество советов, но как правило, даже самые сложные вопросы могут быть быстро решены с помощью форумов и сайтов.
  3. Доступность. И сама технология, и практически весь софт выпускаются под открытыми лицензиями и вы можете свободно использовать чужие наработки, схемы, причем во многих случаях даже для коммерческого использования. Это экономит много времени и позволяет двигаться большими шагами, опираясь на опыт предыдущих исследователей.
  4. Дешевизна. Комплект для первых занятий электроникой и программированием можно купить менее чем за 500 рублей. Полноценные курсы робототехники возможны при . Никакая другая технология не позволит вам так быстро и так эффективно войти в мир реальной учебной робототехники.

С чего начать?

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

  1. с USB кабелем для подключения к компьютеру.
  2. и провода.
  3. Комплект базовых электронных компонентов и переходник для батарейки типа крона.
  4. Установленная на компьютер среда

Все оборудование продается в наборах, называемых стартовыми –

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

  1. Экраны и индикаторы.
  2. Двигатели и , реле и .
  3. Модули связи.
  4. Разнообразные дополнительные модули и (шилды)

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

Как купить Ардуино?

Прежде чем узнать что-то полезное, надо сначала купить что-то полезное. Для экспериментов с электроникой вам понадобится та сама электроника в виде конструктора или отдельных плат. Рекомендуется купить не очень дорогой отечественный набор с основными компонентами и затем уже заказать себе с Алиэкспресса датчики, двигатели, контроллеры и другие сокровища. можно найти в инернете (не только на нашем сайте). Если вы живете в большом городе, то покупка всего необходимого займет максимум два дня. Найти нужный магазин легко в интернете.

Пару слов о . Сегодня их на совершенно легальных условиях может делать любой производитель: как крупный, такой как Intel, так и мелкие noname поставщики из Китая. Надежность и удобство «китайских» и «официальных» платы Ардуино в большинстве случаев одинаковые. Поэтому незачем переплачивать – для своих учебных проектов можете смело покупать аналоги, которые легко найти в интернете.

Как отличить «оригинал» от «совместимой платы»:

  1. «Китайские» платы не имеют права ставить логотип Ардуино.
  2. «Китайские» платы стоят гораздо дешевле.
  3. «Китайские» часто используют другой чип для обслуживания соединения с компьютером, на который нужны специальные драйвера. Драйвера устанавливаются за секунду и практически никогда не вызывают каких-либо проблем.

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

Нет возможности купить?

Если вы живете в Антарктиде или у вас действительно не хватает средств даже на самые простые наборы, то не отчаивайтесь – можно начать изучение Ардуино на виртуальных тренажерах. Самый мощный, простой и популярный сегодня вариант – это онлайн сервис Tinkercad от известной компании Autodesk. Вы сможете создавать электронные схемы, подключая множество разнообразных компонентов, а затем «включать» питание и измерять все электрические показатели. В библиотеке устройств есть и плата Ардуино, и даже встроенный редактор для программирования (включая визуальный!). Вы можете найти на нашем сайте отдельную статью

При установке Arduio IDE должны автоматически поставиться драйверы, необходимые для работы с оригинальными платами Arduino. Но фишка в том, что на китайских платах стоит более дешёвый контроллер интерфейса USB, для работы с ним нужен специальный драйвер. Китайский контроллер ничем не хуже, он просто дешевле =)

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


Далее подключить Arduino к компьютеру, подождать, пока Windows её распознает и запомнит (первое подключение).
P.S. Вылезет окошечко, сообщающее, что устройство опознано и подключено к COM порту с определённым номером отличным от номера 1

По умолчанию в linux можно прошивать китайские ардуинки без дополнительного оборудования. Но вначале ничего не получается и Arduino IDE выдает ошибку.
Дело вот в чем. Linux (в моем случае linux mint) определяет ардуинку как устройство ttyUSB*. Обычно это ttyUSB0. Это можно узнать командой dmesg в терминале.
То есть, в системе появляется интерфейс /dev/ttyUSB0 . Но чтобы с ним работать, нужны права доступа. Читать и писать на устройство /dev/ttyUSB0 имеет пользователь root и пользователи группы dialout. Работы с правами суперпользователя лучше избегать, поэтому следует занести своего пользователя в группу dialout. Это можно сделать следующей командой(обратите внимание, команда whoami в обратных кавычках)
sudo usermod -a -G dialout `whoami`
После этого нужно перелогиниться. Дальше запускаем Arduino IDE и в меню «Инструменты-Порт» ставим галочку напротив /dev/ttyUSB0 .

За инфу спасибо Владу Шеменкову




Top