Примеры использования ШИМ на Ардуино
Широкополосная широтно-импульсная модуляция является способом кодирования напряжения на фиксированную несущую частоту. Он обычно используется для радиоуправляемых устройств. Каждый тип схемы модуляции имеет свои преимущества и недостатки.
AM-модуляция была первым типом модуляции, используемой для радиопередач. Самая простая схема модуляции для реализации требует только одного транзистора или усилителя вакуумной трубки, как это было сделано в первые дни с момента создания радио.
С необходимостью цифровой связи был изобретен новый метод модуляции – ШИМ. Этот метод обладает той же помехоустойчивостью, что и радиоволны. Самая большая разница – простота и цифровая природа модуляции. Вместо того, чтобы изменять частоту модуляции с напряжением, выход просто включается и выключается с фиксированной частотой. Процент времени включения пропорционален сигнальному напряжению.
Размеры Уно
Arduino Uno R3 – самая популярная плата, построенная на базе процессора ATmega328. В зависимости от конкретной модели платы этой линейки используются различные микроконтроллеры, на момент написания статьи самой распространённой является версия именно R3.
Плату используют для обучения, разработки, создания рабочих макетов устройств. Ардуино, по своей сути, – это AVR микроконтроллер с возможностью упрощенного программирования и разработки. Это достигнуто с помощью специально подготовленного загрузчика, прошитого в память МК, и фирменной среды разработки.
Плата Ардуино Уно
Размеры платы представлены на схеме ниже. Общие размеры Уно составляют 53,4 мм на 68,6 мм.
Начало работы с Ардуино
Говоря бытовым языком, Ардуино – это электронная плата, в которую можно воткнуть множество разных устройств и заставить их работать вместе с помощью программы, написанной на языке Ардуино в специальной среде программирования.
Чаще всего плата выглядит вот так:
На рисунке показана одна из плат Ардуино – Arduino Uno. Мы изучим ее подробнее на следующих уроках.
В плату можно втыкать провода и подключать множество разных элементов. Чаще всего, для соединения используется макетная плата для монтажа без пайки. Можно добавлять светодиоды, датчики, кнопки, двигатели, модули связи, реле и создавать сотни вариантов интересных проектов умных устройств. Плата Ардуино – это умная розетка, которая будет включать и выключать все присоединенное в зависимости от того, как ее запрограммировали.
Вся работа над проектом разбивается на следующие этапы:
- Придумываем идею и проектируем.
- Собираем электрическую схему. Тут нам пригодится макетная плата, упрощающая монтаж элементов. Безусловно, понадобятся навыки работы с электронными приборами и умение пользоваться мультиметром.
- Подключаем плату Arduino к компьютеру через USB.
- Пишем программу и записываем ее в плату буквально нажатием одной кнопки на экране в специальной среде программирования Arduino.
- Отсоединяем от компьютера. Теперь устройство будет работать автономно – при включении питания оно будет управляться той программой, которую мы в него записали.
Программа и среда программирования выглядят вот так:
На экране показана программа (на сленге ардуинщиков текст программы называется “скетч”), которая будет мигать лампочкой, подсоединенной к 13 входу на плате Ардуино UNO. Как видим, программа вполне проста и состоит из понятных для знающих английский язык инструкций. В языке программирования Arduino используется свой диалект языка C++, но все возможности C++ поддерживаются.
Есть и другой вариант написания кода – визуальный редактор. Тут не нужно ничего писать – можно просто перемещать блоки и складывать из них нужный алгоритм. Программа загрузится в подключенную плату одним нажатием кнопки мыши!
Визуальную среду рекомендуется использовать школьникам младших классов, более старшим инженерам лучше сразу изучать “настоящий” Ардуино – это довольно просто, к тому же знания C++ никому не повредят.
В целом все выглядит довольно понятно, не так ли? Осталось разобраться в деталях.
4Чем может управлять Arduino
В итоге такое количество «рук» у Arduino позволяет подключать к нему огромное количество различных периферийных устройств. Среди них, например:
- кнопки, герконы и джойстики,
- светодиоды и фотодиоды,
- микрофоны и динамики,
- электродвигатели и сервоприводы,
- ЖК дисплеи,
- считыватели радиометок (RFID и NFC),
- bluetooth, WiFi и Ethernet модули,
- считыватели SD карт,
- радиоприёмники и радиопередатчики,
- GPS и GSM модули…
А также десятки различных датчиков:
- освещённости,
- магнитного поля,
- ультразвуковые и лазерные дальномеры,
- гироскопы и акселерометры,
- датчики дыма и состава воздуха,
- датчики давления, температуры и влажности…
И ещё многое, многое другое
Разнообразные датчики, которые можно подключить к Arduino
На фотографии показана лишь крохотная часть периферийных устройств, которые можно подключить к Arduino. На самом деле их гораздо, гораздо больше.
Распространённые марки контроллеров
Качество выполнения команд и функциональность любой системы интеллектуального дома напрямую зависит от контроллера и его производителя.
Овен
Этот контроллер для умного дома модификации ПЛК 100 является базовым решением. Особенностью которого можно выделить применение протокола Modbus. Именно он выполняет организацию обменом информации между каналами связи. Рассчитан контролер «Овен» для использования и создания автоматических систем жилых домов и коттеджей с этажностью не более двух, уличного освещения, обогрева напольного, и устройств сигнализации. Логический контроллер связан с панелью оператора и аппаратом ввода-вывода через интерфейс RS-485. Программирование происходит самим владельцем, если, конечно, у него есть такое желание. Меню состоит из шести информативных блоков управления, каждый из которых отвечает за определённый сегмент. Есть функция отправки СМС с помощью элемента GSM-контроллера. Оповещение происходит в случае аварийных ситуаций энергоснабжением или неисправности питающих контуров отдельных ключевых элементов системы «умный дом».
VeraEdge
Модель семейства Vera отличается большим запасом доверия пользователей, из-за применения их аппаратуры в данной отрасли уже многие годы. Основные преимущества данной модели это:
- Высокая производительность;
- Эргономика;
- Компактность;
- Надёжность.
Разработчики применили здесь новую платформу, дающую высокие показатели производительности под названием SoC, её частота составляет 600 МГц, а оперативная память увеличена до 128 Мб. Основное нововведение реализовано на чипе Z-Wave Plus являющимся пятым поколением данных микросхем. Пользователь одновременно может контролировать и управлять механизмами количество которых доведено до 200 устройств. Оборудован контроллер VeraEdge модулем связи через Wi-Fi. Одним из недостатков которые всё же имеются в любой системе можно считать отсутствие интегрированного блока бесперебойного питания, который можно докупить и установить дополнительно.
Arduino
Контролер Arduino предлагает довольно необычное, но довольно логичное решение для управления «умным домом». Некоторые умельцы с лёгкость выполняют подключение и установку своими руками, это возможно из-за простоты работы с ним. Логический контроллер имеет очень небольшие габариты. И также в комплекте есть датчики, сенсоры, а также всевозможные индикаторы. Разработчикам почти удалось довести оптимизацию устройства до совершенства. Все датчики имеет беспроводную связь и отличаются минимальными погрешностями в работе, а для управления служат блоки которые отличаются необычным внешним видом, с удобной и уникальной веб-страницей. Она же доступна и в качестве мобильного приложения.
Siemens
Эти системы немецкого качества применяются не только для автоматизации систем в быту, но и на производстве, в промышленности. Контроллер этой компании выражен линейкой LOGO, участвующей в создании “умного дома”. Это традиционная двухкомпонентная модель. Один, из которых, выполнен в виде клавиатуры с дисплеем и являющийся системой ввода-вывода, а второй позволяет выполнять манипуляции и подключение к контролеру через удобный и надежный проводной интерфейс. Компания предлагает также самостоятельную разработку определённых режимов в работе, для чего прилагается специальная программа Soft Comfort. Когда LOGO используется как центральный контроллер, то с помощью него можно создавать целые алгоритмы работы схем. Постоянно новые введения и модификация повышают эксплуатационные качества этого аппарата.
Проверка работы схемы
После того как мы загрузили программу на нашу плату Arduino самое время проверить корректность ее работы. Схема соединений представлена выше. Чтобы проверить корректность работы программы необходимо нажать кнопку и проверить загорится ли при этом светодиод. Затем, когда мы отпустим кнопку (прекратим ее нажимать), светодиод должен погаснуть.
Полный текст программы выглядит следующим образом:
Arduino
void setup()
{
pinMode(2,INPUT_PULLUP);
pinMode (3,OUTPUT);
}
void loop() {
if (digitalRead(2) == LOW)
{
digitalWrite(3,HIGH);
}
else
{
digitalWrite(3,LOW);
}
}
1 |
voidsetup() { pinMode(2,INPUT_PULLUP); pinMode(3,OUTPUT); } voidloop(){ if(digitalRead(2)==LOW) { digitalWrite(3,HIGH); } else { digitalWrite(3,LOW); } } |
Codim
Arduino позволяет детям и взрослым выйти за рамки виртуального компьютерного мира в физический и взаимодействовать с ним. Устройства на базе Arduino могут получать информацию об окружающей среде посредством различных датчиков, а также могут управлять различными устройствами.
На курсе учащийся научится:
- Основам электроники
- Самостоятельно собирать электрические схемы
- Программировать на языке Си++
- Самостоятельно собирать и программировать роботов
- Создавать устройства интернета вещей
- Управлять роботом и устройствами интернета вещей с помощью смартфона
- Воплощать свои самые фантастические идеи в жизнь
- Технической грамотности
- Разовьет образное мышление
- Раскроет свой творческий потенциал.
Начало работы с Ардуино
Для того, что бы начать использовать Arduino необходимо приобрести плату Arduino или стартовый набор Arduino. Я советую выбрать стартовый комплект ардуино, так как он включает в себя не только микроконтроллер ардуино, но и беспаечную макетную плату, соединительные провода, кнопки, светодиоды и дополнительные детали. С таким набором вы сможет выполнить примеры из уроков по Arduino для начинающих. Это позволит вам быстро разобраться с принципами работы с Arduino.
После прохождения уроков вы будите знать как программировать Arduino, как обмениваться сигналами с другими модулями и устройствами. Вы сможете проектировать, а так же создавать ваши собственные устройства.
Arduino IDE
Для начала работы с Ардуино вам понадобится специальное программное обеспечение. Это среда для разработки прошивок Arduino IDE. В этой программе легко и удобно писать скетчи и загружать их на ваш микроконтроллер Ардуино. В среде разработки уже предустановленно большое количество примеров и дополнительных библиотек.
Ссылки на скачивание, инструкции по установке и настройке среды разработки есть на странице Arduino IDE.
Условия в тексте программы Arduino
Что такое условие
Самый простой вариант, приходящий в голову, выглядит так:
- Получить предмет из рук человека.
- Определить цвет.
- Если цвет оранжевый, то взять.
- Иначе (если цвет не оранжевый), то не брать, но сказать спасибо.
В этом тексте мы с вами использовали слово «если», входящее в русском языке в состав любого условия. Если идет дождь, надо взять зонт. Если у светофора горит красный, надо стоять и ждать. Если нажать на выключатель, станет светло. Мы пользуемся условиями постоянно, они помогают нам выработать какое-то правило поведения, когда есть несколько вариантов действий, а мы должны выбрать один из них. В нашем конкретном примере у нас два варианта действий после проверки условия. Первый вариант возникает когда условие выполнилось (цвет оранжевый) – мы запускаем последовательность действий по приемке предмета. Если условие не выполнилось (цвет любой, но не оранжевый), то запускаем процесс возврата и благодарности.
Как же теперь отразить эти условия в программе для ардуино?
Условие и ветвление в тексте программы
Если представить алгоритм действий как последовательность команд, то в момент возникновения условия нам надо как-то разделить эту одну последовательность на две. Конечно, в момент выполнения команд контроллер всегда выполняет только одну цепочку команд. Но вот какой именно программный блок выбрать – он определяет сам, исходя из каких-то данных, полученных из окружения: сигналов датчиков, значений переменных и т.д. Каждый раз при запуске программы внешние сигналы будут разные, поэтом и выбираемая последовательность будет отличаться.
Вариантов условий и наших ответных действий может быть множество и все они должны быть в тексте нашей программы. Мы должны придумать какой-то способ, чтобы пометить в этом тексте, какие команды в какой ситуации нужно выбрать.
Самым простым вариантом записи условий было бы использование графических методов. На языке блок-схем мы бы просто провели линию для каждого из вариантов.
На одном листе можно нарисовать множество веток и изобразить логику принятия решения. Но когда мы пишем программу в Arduino IDE, графического способа у нас нет. Разбить текст на несколько колонок мы тоже не можем. Единственный остающийся вариант – как-то пометить те или иные последовательности команд с помощью специальных конструкций. Именно для этих целей и служат блоки if и else.
С помощью if и else мы «разделяем» список команд на те, которые будут выполняться при одних условиях и те, которые будут выполнять при других. Мы разветвляем программу, именно поэтому блок условий часто называют реализацией ветвления.
Рассмотрим еще раз синтаксис и поясним значение каждого оператора:
if(условие){
}else{
}
- if (условие) – здесь мы формулируем условие, которое при запуске программы может выполниться (тогда результат будет TRUE или любое число, не равное 0) или нет (тогда результат будет FALSE или 0).
- В случае TRUE будут выполнены команды из первого блока в фигурных скобках.
- Если условие вернет FALSE, то будет выполнен блок в фигурных скобках после слова else.
Давайте же рассмотрим примеры использования if else в реальном коде ардуино.
Объяснение работы программы
Для того, чтобы полноценно использовать АЦП в Arduino Uno, необходимо сделать следующие вещи:
Прежде всего необходимо отметить что каналы АЦП Arduino Uno имеют по умолчанию опорное значение 5 В (опорное напряжение). Это означает, что максимальное входное значение напряжения для каждого канала АЦП Arduino составляет 5 В. Но некоторые датчики имеют выходное напряжение в диапазоне 0-2,5 В, поэтому если мы будем использовать опорное напряжение по умолчанию (5 В), то мы потеряем в точности измерений. В связи с этим полезно иметь возможность изменения значения опорного напряжения, для Arduino Uno это делается с помощью команды “analogReference();”.
По умолчанию мы имеем разрешающую способность АЦП, равную 10 бит, разрешение АЦП мы также можем изменить используя команду “analogReadResolution(bits);”. Это может быть полезно в ряде случаев.
Теперь, если все установки параметров работы АЦП нами сделаны, мы можем считать значение АЦП с канала ‘0’ просто используя инструкцию “analogRead(pin);”, где “pin” означает контакт (вывод), на который мы подаем аналоговый сигнал, в нашем случае это будет контакт “A0”. Значение с выхода АЦП может быть преобразовано в число типа integer, например, с помощью инструкции “int ADCVALUE = analogRead(A0);”, в результате выполнения этой инструкции значение с используемого канала АЦП после проведения преобразования (то есть АЦП) сохраняется в переменной целого типа (integer) под названием “ADCVALUE”.
Теперь несколько слов о работе с ЖК дисплеем 16×2. Сначала мы должны подключить необходимый заголовочный файл с помощью команды ‘#include <LiquidCrystal.h>’, этот заголовочный файл содержит все необходимые функции для работы с ЖК дисплеем. По умолчанию функционал этого файла настроен для работы с ЖК дисплеем в 4-битном режиме. С помощью этого заголовочного файла нам не нужно будет заботиться о том, чтобы передавать данные в ЖК дисплей бит за битом и писать какие либо собственные функции для работы с ЖК дисплеем.
Далее мы должны указать какой именно тип ЖК дисплея мы будем использовать. Существуют различные типы ЖК дисплеев, например, 20×4, 16×2, 16×1 и т.д. Мы в нашем проекте будем использовать ЖК дисплей 16×2, поэтому мы должны будем записать команду ‘lcd.begin(16, 2);’. А если бы у нас был дисплей 16×1, то нам бы пришлось использовать команду ‘lcd.begin(16, 1);’.
Далее мы Arduino Uno должны указать, к каким ее контактам мы подключили ЖК дисплей. В нашем случае мы к Arduino Uno подключили следующие выводы ЖК дисплея: “RS, En, D4, D5, D6, D7”. Мы подключили их к контактам 0, 1, 8, 9, 10, 11 Arduino Uno, поэтому в нашем случае соответствующая команда будет иметь следующий вид: “LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”.
После всего этого мы можем приступит к передаче данных на ЖК дисплей. Сделать это можно, к примеру, с помощью следующей команды: “lcd.print(«hello, world!»);”. В результате выполнения этой команды на экран ЖК дисплея будет выведена строка ‘hello, world!’.
Аналоговые, цифровые и шим пины Ардуино
Все пины можно разделить на несколько видов, различие будет только в количестве данных выводов на различных платах. Например, на Arduino Mega 2560 цифровых и аналоговых портов, значительно больше, чем на Uno или Nano из-за большего размера платы и производительности микроконтроллера. В остальном характеристики и способы программирования пинов не отличаются друг от друга.
- Power Pins — порты питания, режим их работы нельзя запрограммировать или изменить. Они выдают стабилизированное напряжение 5V или 3,3V, Vin выдает напряжение от источника питания, а GND — это заземление (общий минус);
- PWM Pins — порты с ШИМ модуляцией, которые можно запрограммировать, как цифровой выход/вход. Данные порты обозначены на плате знаком тильда (˜);
- Analog In — порты, принимающие аналоговый сигнал от датчиков, работают на вход. Данные порты тоже можно запрограммировать, как цифровой вход/выход. Данные пины не поддерживают ШИМ модуляцию.
Режим пинов назначается в процедуре void setup с помощью pinMode(), например:
void setup() { pinMode(10, OUTPUT); // объявляем пин 10 как выход pinMode(A2, OUTPUT); // объявляем пин A2 как выход pinMode(12, INPUT); // объявляем пин 12 как вход pinMode(A1, INPUT); // объявляем пин A1 как вход }
Пояснения к коду:
- к выходу 10 и A2 можно подключить светодиод, который будет включаться и выключаться при вызове команды в программе;
- пин 10 может использоваться для ШИМ сигнала, например, чтобы плавно включить светодиод, а пин A2 может выдавать только цифровой сигнал (0 или 1);
- к входу 12 и A1 можно подключить цифровой датчик и микроконтроллер будет проверять наличие сигнала на этих пинах (логический нуль или единицу);
- к входу A1 можно подключить аналоговый датчик тогда микроконтроллер будет получать не только сигнал но и узнавать характеристику сигнала.
Мы не случайно разделили пины с ШИМ модуляцией (PWM Pins) и аналоговые. PWM пины создают аналоговый сигнал, к ним подключают сервопривод, шаговый двигатель и другие устройства, где требуется подавать сигнал с разными характеристиками. Аналоговые пины (Analog In) используются для подключения аналоговых датчиков, с них входящий сигнал преобразуется в цифровой с помощью встроенного АЦП.
Ардуино Uno пины: шим, аналоговые, цифровые
Arduino UNO распиновка платы на русском
ШИМ (PWM) порты (Analog Out) |
3, 5, 6, 9, 10, 11 |
Аналоговые порты (Analog In) |
A0, A1, A2, A3, A4, A5 на некоторых платах: A6, A7 |
Цифровые порты (Digital In/Out) |
все порты со 2 по 13 пин можно использовать: A0 — A7 |
Из таблицы видно, какие пины на Arduino UNO поддерживают шим. Аналоговые пины (Analog In) используют, как цифровые если недостаточно портов общего назначения, например, вы хотите подключить к плате 15 светодиодов. Кроме того, на плате Arduino Uno и Nano порты A4 и A5 используются для I2C протокола (SDA и SCL пины) — они работают параллельно с пинами A4 и A5. Об этом мы расскажем чуть позже.
Ардуино Nano пины: шим, аналоговые, цифровые
Arduino Nano распиновка платы на русском
ШИМ (PWM) порты (Analog Out) |
3, 5, 6, 9, 10, 11 |
Аналоговые порты (Analog In) |
A0, A1, A2, A3, A4, A5 на некоторых платах: A6, A7 |
Цифровые порты (Digital In/Out) |
все порты со 2 по 13 пин можно использовать: A0 — A7 |
Если вы заметили, то пины на Arduino Nano и Uno имеют одинаковое количество и назначение. Платы отличаются лишь своими габаритами. Nano — более компактная и удобная плата, для экономии места на нее не ставят разъем питания, для этого используются пины Vin и GND на которое подается питание от источника.
Ардуино Mega пины: шим, аналоговые, цифровые
Схема распиновки платы Arduino Mega 2560 r3
ШИМ (PWM) порты (Analog Out) |
все порты со 2 по 13 пин дополнительно: 44, 45, 46 пин |
Аналоговые порты (Analog In) |
с A0 до A15 |
Цифровые порты (Digital In/Out) |
все порты со 2 по 13, со 22 по 52 пин можно использовать: A0 — A15 |
Пины коммуникации нежелательно использовать, как обычные цифровые порты. Особенно при таком количестве портов общего назначения, как на Mega 2560. Более подробную информацию о рассмотренных платах, а также о других микроконтроллерах семейства Arduino (Pro Mini, Leonardo, Due и пр.): характеристики, описание пинов, габариты и т.д. можно узнать в разделе Микроконтроллеры на нашем сайте.
Мозговой центр системы «Умный дом»
В действительности данные системы имеют все необходимое оснащение, а при помощи технических контроллеров осуществляется обработка полученной от него информации, благодаря которой можно руководить каждым процессом по отдельности. В наших уроках мы будем за основу брать микроконтроллеры Arduino, Wemos, Raspberry и другие, доступные для покупки по низним ценам.
Специализированные питательные элементы дают возможность для использования бесперебойного снабжения электричеством, а при задействовании особых элементов осуществляется управление и регулировка работы бытовых приборов, находящихся под контролем системы.
Наличие в системе оборудования с дистанционным управлением дает возможность совершения общего контроля над всеми приборами, которые находятся в управлении системы. Бывают они в виде стационарных либо переносных модулей. Переносной модуль более практичный, поскольку позволяет совершать дистанционное управление при помощи любого электронного устройства, например телефона или ноутбука.
В то же время, хозяин может совершать управление, любым, процессом, который происходит в помещение, на расстояние от жилища, где непосредственно данная система установлена. Благодаря такой функции, владелец может задать любую программу выполнения действий умному дому на длительный срок, и как последствие просто контролировать выполняемые процессы. Сюда могут входить как кондиционирование помещения, так и его автоматическое освещение в определенный интервал времени, и прочие подобные автоматизированные функции, включая охранную систему.
Основные варианты конфигураций
Постоянно, стремясь к совершенству и автоматизации, человек изобретает всё новые и новые механизмы для этого. Также это стремление направлено и на уменьшение габаритов устройств без потерь их функциональных особенностей.
Для контроллера управляющего механизмами так и для всей системы умный дом есть основные требования это:
- автоматизм;
- самоконтроль;
- чёткость управления, без совершения ошибок.
Варианты конфигурации любой такой системы зависят от многих факторов, о который уже говорилось выше, вот варианты систем которое могут подключаться к контроллеру:
- Регулировка и управление освещением как в самом помещении, так и на придомовой территории, и в местах архитектурных сооружений;
- Климатические установки (кондиционирование, вентиляция, обогрев);
- Закрывание и блокировка дверей, ворот и окон;
- Аудиосистемы, и телевидение, домашний кинотеатр;
- Управление шторами, жалюзи и солнцезащитными роллетами;
- Системой водоснабжения;
- Кормление домашних животных и аквариумных рыбок.
То есть всё заключается в желании клиента и его материальных возможностей.
Определение и назначение
Если официально, Ардуино — это платформа для создания прототипов электроники. Но что это значит? Для нас это как маленький компьютер, который можно программировать, и он взаимодействует с миром с помощью электронных датчиков, источников света, двигателей. По сути, это делает по-настоящему полезные проекты в области электроники доступными для всех. Это идеальный инструмент для мастеринга! Эта платформа стала довольно популярной среди людей, только начинающих заниматься электроникой, и на то есть веские причины:
- В отличие от большинства предыдущих программируемых плат, Ардуино не требует отдельного аппаратного обеспечения (называемого программатором) для загрузки нового кода — вы можете просто использовать USB-кабель.
- Кроме того, в среде Arduino IDE используется упрощённая версия C ++, что облегчает обучение программированию.
- Ввиду большой популярности этой платформы, в интернете полно готовых программ (скечей), что вообще освобождает от программирования новичков.
- Также в продаже имеются множество готовых датчиков, модулей, шилд расширяющих возможности платы.
Так зачем нужно Arduino и что можно сделать? Да практически всё, от простых мигалок светодиодом, роботов до системы умный дом. Подробнее с проектами можно ознакомиться здесь.
Какова же альтернатива?
Я думаю, что приведенных аргументов вполне достаточно для недовольства. Ваш следующий вопрос должен быть таким: как же научиться программировать в хорошей среде разработки? Я могу предложить несколько вариантов, любой из которых либо не лишен определенных недостатков, либо сложен для начального обучения. Я помог довольно многим людям выбрать другие инструменты для начального изучения программирования, и хотя поначалу их немного раздражала трудоемкость освоения, в конце концов, они были счастливы, когда начинали понимать, что происходит внутри.
-
Scratch []. Это веселый и легкий инструмент для детей и подростков, желающих освоить программирование, который даже поддерживает возможность разбиения кода. Конечно же, он не предназначен для встраиваемых систем, но для детей это хороший способ понять, что такое программа.
-
Mbed . Онлайн компилятор с открытым кодом, поддерживающий множество модулей и плат на микроконтроллерах различных производителей, включая NXP, Analog Devices, STMicroelectronics, Nordic Semiconductor, Ublox, который отлично подходит для новичков, так как не требует установки инструментальных средств. С компилятором предлагается огромный архив примеров, которые можно легко импортировать в свой проект. Да, речь именно о проектах. Вам дается возможность полного контроля над исходным кодом и его структурой, включая онлайн управление версиями. Предоставляемый mbed код – это Си++, использующий классы и перегрузку операторов, что лично меня, воспитанного на ANSI-C, первоначально немного сбивало с толку, однако документация, которую вы тоже найдете в своем проекте, прозрачна и доступна. Использование периферии нельзя назвать простым, но можно косвенно использовать таймеры для генерирования прерываний по времени, и, опять же, все это хорошо документировано. Вам не нравятся онлайн сервисы? Хорошо, можно работать оффлайн. Единственный, на мой взгляд, недостаток mbed – отсутствие возможности отладки с использованием точек останова и наблюдения.
- Компилятор AVR-GCC/WinAVR с микроконтроллерами серии Xmega. Пакет программ AVR-GCC (с библиотеками avr-libc) имеет солидную репутацию и очень хорошую базу пользователей . Причина, по которой я рекомендую серию Xmega, – это «фантастическая» документация. Правда, из-за того, что для каждого периферийного устройства есть отдельное указание по использованию, Atmel Studio имеет очень «раздутые» размеры, но зато предоставляет реальный набор мощных инструментов для разметки кода, отладки (точки останова) и симуляции (просмотр и изменение битов регистров периферии). При использовании отладчика Dragon (переоцененного) можно работать с устройствами, имеющими память программ до 32 Кбайт. Конечно, начинать с такого набора без каких-либо знаний в области программирования будет тяжело, но всегда можно найти информацию в Интернете или попросить помощи у знающего друга. При чтении указаний по применению у меня возникает ощущение, что можно создать систему, которая после настройки все будет делать самостоятельно: DMA будут отправлять полученные значения АЦП в память, система событий будет запускать таймеры для запуска ЦАП, и тому подобное. Поработать придется довольно много, но вы сделаете действительно встраиваемую систему. Это как самостоятельно приготовить суши вместо того, чтобы идти в Макдональдс…
- Использовать отладочные платы Launchpad/STM32/… []. Другие ARM платы. И да, и нет… Конечно, ARM – это будущее, но начинать с этого, думаю, довольно сложно. Кроме того, при использовании бесплатных инструментальных наборов вам придется потратить уйму времени на их настройку. Правда, это полезно; оценочная плата с интегрированным отладчиком (8 евро за плату серии STM32F0 Discovery – не сравнить с продуктами Atmel/Microchip), и еще что-то, и в своем резюме вы сможете указать, что работали с ARM. Однако документация в основном посредственная и пугающе объемная. Кроме того, набор опций в компиляторах и средах разработки настолько велик, что порой трудно разобраться, почему программа не компилируется.
Прошивка Arduino
Для того, чтоб залить скетч на Arduino нам необходимо сначала просто сохранить его. Далее, во избежание проблем при загрузке, необходимо проверить настройки программатора. Для этого на верхней панели выбираем вкладку «Инструменты». В разделе «Плата», выберете Вашу плату. Это может быть Arduino Uno, Arduino Nano, Arduino Mega, Arduino Leonardo или другие. Также в разделе «Порт» необходимо выбрать Ваш порт подключения (тот порт, к которому вы подключили Вашу платформу). После этих действий, можете загружать скетч. Для этого нажмите на стрелочку или во вкладке «Скетч» выберете «Загрузка» (также можно воспользоваться сочетанием клавиш “Ctrl + U”). Прошивка платы завершена успешно.
3Цифровые и аналоговые выводы
Не все выводы у Arduino одинаковые. Есть выводы цифровые, а есть аналоговые. Принципиальная разница между ними в том, что на цифровых выводах может быть только два значения: либо логическая «1» (TRUE, от 3 до 5 вольт), либо логический «0» (FALSE, от 0 до 1,5 вольт), а на аналоговых выводах диапазон от логической «1» до «0» поделён на множество мелких участков.
Зачем это нужно? Давайте рассмотрим такой наглядный пример. Если подключить к цифровому выводу Arduino светодиод и подать на вывод логическую «1», то светодиод загорится с максимальной яркостью; если подать «0» – светодиод погаснет. Никаких промежуточных вариантов нет. Если светодиод подключить к аналоговому выводу, то яркостью светодиода можно управлять плавно. На практике к аналоговым выводам чаще всего подключаются какие-либо аналоговые датчики.