чем ардуино лучше с
На распутье — Ардуино, Cи или Ассемблер?
Понятно, что на потреблении устройства в целом сказывается слишком много факторов таких, как энергопотребление подключенных модулей, потребление самого контроллера, который управляет периферией, не последнюю роль тут играет оптимальное построение самого кода и алгоритм работы устройства.
Приступая к задаче, для меня было очевидно одно – вряд ли программы промышленных автономных устройств составлены на платформе Arduino IDE. Где все спрятано в громоздкие тяжеловесные библиотеки, а простые коды (скетчи) занимают в редакторе несколько десятков строк, делая работу в этой среде комфортной и не требующей особых усилий. Уточню сразу – дальше речь о выборе языка программирования между Ардуино, Си или Ассемблером. «Язык Ардуино»- это сленг для краткости. Нет такого языка программирования. Если увидите тут и дальше «язык Ардуино», то — это «Arduino IDE — интегрированная среда разработки для Windows, MacOS и Linux, разработанная на Си и C ++»(Википедия).
В начале пути меня оптимистично настроила статья Почему многие не любят Arduino. Ниже, для наглядности, картинка оттуда с кодом «мигалки».
Пример слева написан в платформе Arduino IDE, а справа — работа непосредственно с регистрами. Скетч выглядит несколько компактней, чем та же «мигалка», но с использованием регистров.
На изображении ниже — компиляция кода «мигалки» на Ассемблере. Как видно, былая компактность испарилась – количество строк в 3 раза больше, чем в Ардуино.
Итак, с 2 картинок выше видно – размер памяти, занимаемой в контроллере кодом «мигалки» одним светодиодом, написанным в платформе Ардуино, составляет 1030 байт, на Си – 176 байт, на Ассемблере – 42 байта.
Теперь взглянем на более сложный код. Поскольку в своих проектах использую модуль давления-температуры BMP280, составил код барометра-термометра на Си, чтобы заодно была какая-то польза.
В проект входят следующие компоненты: контроллер ATMEGA328P, модуль давления-температуры BMP180 и дисплей Nokia 3110. ATMEGA328P принимает инфу с датчика BMP180 и после преобразований отображает ее на дисплее Nokia 3110, затем спит. Сон задается сторожевым таймером Watchdog. Проект собирается в Atmel Studio 7 и эмулируется в Proteus 8 Pro. Этот проект Atmel Studio был создан для отладки кода в Proteus’e. В библиотеке Proteus 8 Pro модуля BMP280 нет, поэтому пришлось составить код с включением BMP180. Светодиод в коде — для наглядности, чтобы придать динамику статичной картинке.
Ниже — электрическая схема устройства. При монтаже схемы обращайте внимание на функциональное назначение выводов контроллера и модулей. Подключение кварца — XTAL1, XTAL2 (ATMEGA328P). Уточню, схему барометра-термометра на BMP180 я «в железе» не собирал, поэтому тут могут проявиться проблемы, которые не видны при эмуляции в Proteus’e.
Для скачивания zip-файла проекта в Atmel Studio 7 перейдите по ссылке – тут все виртуальные проекты и коды программ из этой публикации.
Файлы прошивок *.hex находятся в папках Debug соответствующего проекта Atmel Studio 7. В архиве есть проект барометра-термометра на BMP280. Его электрическая схема такая же, как и у барометра-термометра на BMP180. Проект успешно собирается в Atmel Studio 7 и работает «в железе». Для работы «в железе» пришлось внести изменения в строке #define BMP280_ADDR 0x77 файла библиотеки bmp280.c, а именно: заменить начальный адрес 0x77 на 0x76. Не забудьте сделать эту корректировку, если будете использовать в своих проектах код барометра-термометра на BMP280, с подключенной библиотекой bmp280.c.
Ниже — код этого же барометра-термометра в платформе Arduino IDE. Естественно, с другими библиотеками.
Ресурсы, потребляемые программой барометра-термометра на Си и в Arduino IDE наглядно показаны на картинке:
Как видно, эти примеры потребляют 5954 байт (С) и 12956 байт (Arduino IDE) в Flash. Соотношение изменилось с 6-ти раз для «мигалки» до 2-х с небольшим. К сожалению, линейной зависимости нет – чем объемней код, тем меньше соотношение размеров памяти Ардуино к Си. В идеале на этой картинке должен присутствовать 3 столбец с кодом на Ассемблере, но такого кода в Интернете я не нашел, а составить код самому мне пока не под силу.
Попутно замечу, что использование компилируемых в Arduino IDE библиотек и функций на С/С++ особо имеет смысл в тех случаях, когда размер занимаемой памяти превышает или близок к размеру памяти контроллера. Мне, например, часто удается уходить от предупреждения: Недостаточно памяти, программа может работать нестабильно.
Теперь посмотрим еще один вариант – это цифровой термометр-гигрометр на AM2302 (DHT22), ATtiny13 и MAX7219, код которого составлен на Ассемблере.
Автор статьи задался целью разработать простой термометр-гигрометр выполненном на одном из самых «маленьких» микроконтроллеров — ATtiny13 с весьма скромными характеристиками – 1Кб программной памяти, 64 байтами ОЗУ и 5 интерфейсными выводами. Он решил эту непростую задачку, выбрав Ассемблер, заодно вспомнив те далекие времена, когда код можно было составлять на низкоуровневых языках, используя машины типа ZX-Spectrum.
Ниже скриншот со сборкой данного кода в Atmel Studio 7.
Код устройства на Ассемблере занимает 738 байт памяти в контроллере. Безусловно, программа барометра-термометра, о котором шла речь выше, будь ее код составлен на Ассемблере, заняла бы больше места. По нескольким причинам — в схеме реализовано управление дисплеем Nokia3110 по интерфейсу SPI (это 5 линий связи, тут – 3), связь с датчиком BMP280 осуществляется по протоколу I2C (2 линии, тут – 1) и дополнительные символы, которые позволяют не гадать – температура это или другой параметр.
Из того, что я нашел в Интернете, можно утверждать, Ассемблер даст выигрыш в размере кода для относительно больших проектов процентов 10-20 по сравнению с Си. Но надо учитывать, что в больших проектах Си может уменьшить размер кода за счёт лучшей оптимизации.
Код Ассемблера выполняется практически на машинном уровне: один цикл – одна команда. В качестве аргумента приведу пример из справочника по командам ассемблера AVR. Установка бита в регистре ввода/вывода — SBI A, b. Эта команда устанавливает заданный бит в регистре ввода-вывода. На выполнение этой операции контроллерами megaAVR потребуется 2 цикла и на tinyAVR, XMEGA — 1 цикл. Для схемы с контроллером ATtiny13 и резонатором 9,6 МГц выполнение команды займет один цикл, то есть 1/9600000 Гц = 0,104 мксек.
Выполнение похожей операции на языке Си, например, задать состояние порта — PORTB = 32; займет в этой же схеме не меньше времени. А о Ардуино и говорить нечего – там придется выполнить объемную функцию void digitalWrite(uint8_t pin, uint8_t val);. Подробно о размерах кода в Си и Ардуино читайте тут.
Поэтому разработчики простых в управлении серийных продуктов (холодильник, кофеварка без наворотов, другое — оглянитесь вокруг себя дома), как правило, пишут коды на низкоуровневых языках. С тем, чтобы разместить программу в контроллере с меньшей памятью. Тут работают законы экономики — контроллер с меньшими ресурсами стоит дешевле, следовательно себестоимость изделия становится ниже.
Теперь о энергосбережении немножко издали. Вспомним, что код Ассемблера выполняется на машинном уровне: один цикл – одна или несколько команд. в зависимости от типа контроллера. Это — десятые доли микросекунды. То есть, на выполнение программы с размером несколько десятков байт уйдут единицы-десятки микросекунд. Дальше контроллер бесконечно будет крутить этот набор «0» и «1», затрачивая энергию на перезаряд емкости затворов сотен полевых транзисторов, на которых построен кристалл контроллера, а также чтение и записи данных в его память. Длительность периода повтора будет зависеть только от размера кода в памяти контроллера, неважно на каком языке он составлен. Просто на Assembler’е он будет наименьшим, а в Arduino IDE – наибольшим. Соответственно, период цикла для кода на Assembler’е – наименьший, в Arduino IDE – наибольший.
Уменьшить эти затраты можно остановив процессор или программно уменьшив частоту его работы. В Ассемблере переход в «спящий» режим сна выполняет функция управления контроллером SLEEP. В других можно использовать функцию WDT (WatchDog Timer), а в Ардуино еще и функцию LowPower.powerDown (SLEEP_1S, ADC_OFF, BOD_OFF), заодно отключив все лишнее, что не используется в конкретной задаче. В эффективности этой функции сможет убедиться каждый, заменив в скетче «мигалки» (скетч — на картинке вначале статьи) функцию отсчета времени delay(1000); этой функцией и включив в разрыв питания контроллера амперметр. Да, не забудьте подключить библиотеку LowPower.h. На Си это сделал автор этой статьи. Ток в цепи питания attiny13a с паузой — 1,5мА, со сном — 240мкА. Потребление в 6(!) раз меньше.
Допустим, вы намерены собрать барометр-термометр и задумываетесь о энергосбережении. Понятно, что давление/температура в заданной разрядности не изменятся за несколько минут, которые для контроллера целая вечность. Ему можно выделить это время для сна. После сна он снова выполнит свою работу: примет информацию с датчика, преобразует в понятные для человека циферки и выведет все это на дисплей. И в таком режиме «работа-сон» он будет крутиться, пока не сядут батарейки. Объем «работы» контроллера, вернее время, которое контроллер будет занят выполнением работы, зависит от того, на каком языке составлена программа барометра-термометра. Если есть возможность загрузить в контроллер код на выбор – ArduinoIDE, C, Assembler, с одинаковым временем «сна», то в каком из трех предложенных вариантов батарейки сядут раньше (позже)? Мой ответ – ArduinoIDE (Assembler).
Так куда же идти? На мой взгляд, для любителей, как я, – это платформа Arduino IDE с низкоуровневыми вставками. Тем же, кому тесно в Arduino IDE, — в С. Хотя коды на С можно оптимизировать иногда до размеров не намного больше, чем в Assembler’е, все-таки для понимания работы контроллера стоит напрячься и освоить азы Assembler’а. Ведь полезность знаний – это аксиома.
Лучшие Ардуино с АлиЭкспресс
Микроконтроллеры – это специальные микросхемы, используемые для управления электронными системами, например, персональным компьютером. Их главная особенность заключается в сочетании процессора, ПЗУ и периферии в небольшом корпусе или на плате. В основном встречаются почти одинаковые модели, различающиеся лишь скоростью работы ЦПУ и объемом памяти.
В нашем рейтинге собраны устройства, получившие лучшие отзывы пользователей интернет-площадки AliExpress.
Как выбрать микроконтроллер
При покупке микроконтроллера необходимо определиться с платформой. Одна из самых популярных на рынке – Arduino. Устройства Ардуино продаются с уже готовой прошивкой – пользователю нужно добавить библиотеки или использовать встроенные. На модулях Arduino имеется порт USB для простого подключения.
От библиотек, которые будут загружены на микроконтроллер, зависит его назначение. Для плат Ардуино предусмотрены готовые плагины, созданные другими пользователями. Они доступны в интернете. Однако код, написанный для библиотеки, может быть нестабилен – его качество никто не гарантирует.
Обучиться работе с Arduino просто – не нужно иметь специальных знаний и навыков. Большинство доступных библиотек написаны на общеизвестных языках программирования и имеют интуитивно понятный интерфейс при подключении к стороннему устройству. Для управления микроконтроллером достаточно знать базовый уровень английского и хоть немного разбиться в электронной технике.
Чем больше модулей на микроконтроллере, тем шире его возможности при загрузке готовых библиотек. Платы могут быть оснащены датчиком дыма, освещенности, либо иметь в конструкции небольшой динамик для воспроизведения сигналов. Так как микроконтроллеры зачастую улучшают сами пользователи, в сети можно найти модернизированные устройства по небольшой цене.
Помимо Ардуино существует еще одна популярная платформа микроконтроллера – NodeMcu, основанная на чипе ESP8266. Главная особенность данного устройства заключается в наличии Wi-Fi модуля. Загрузив библиотеки через порт microUSB, пользователь сможет управлять проектом через быстрое интернет-соединение, что упрощает создание радиоуправляемых моделей, разработку системы «Умный дом» и т.д.
Еще один популярный тип микроконтроллеров – ATtiny. Восьмибитные модели ATtiny 85 и ATtiny 167 отличаются небольшими габаритами и малой мощностью. Встроенный центральный процессор данных устройств имеет эффективный программный код и существенно превосходит по производительности обычные CISC-микроконтроллеры. Благодаря встроенной отладочной системе DebugWIRE пользователь может отслеживать и устранять ошибки кода в режиме реального времени.
При выборе микроконтроллера стоит обратить внимание на устройство STM32 BLUE PILL. В этой отладочной плате китайского производства реализована поддержка трех языков программирования. Новичку работать с STM32 BLUE PILL будет довольно сложно, так как для выгрузки библиотеки нужно каждый раз переключать микроконтроллер в режим программирования через системный загрузчик, находящийся в ROM.
① Микроконтроллер Arduino Uno R3
Достоинства:
- хорошее качество пайки.
Недостатки:
- если использовать как программатор, не всегда с первого раза прошивает другую плату Ардуино.
Вблизи
② Контроллер Arduino Nano
Достоинства:
- легко и хорошо прошивается; есть конвертер питания.
Недостатки:
- на плате может быть не отмыт флюс.
③ Плата разработки Arduino Pro Mini
Достоинства:
- прошивается без проблем; не распаян – удобно, если не нужна гребенка.
Недостатки:
- отсутствует автоматический загрузчик.
В каком виде приходит
④ Программируемый модуль Arduino Strong
Достоинства:
- простое подключение к устройству через microUSB; совместимость с платформой NodeMCU; встроенный Wi-Fi.
Недостатки:
⑤ Аппаратная платформа Arduino Mega
Достоинства:
- высокое напряжение питания; встроенная память 256КВ, 4 КВ из которой использовано для загрузчика; подключение к ПК через USB-порт.
Недостатки:
- может потребоваться драйвер CH340 для корректной работы.
⑥ Контроллер Arduino MEGA 2560 Pro
Достоинства:
- компактный размер; совместимость со стандартной платой Arduino Mega 2560; подключение через microUSB.
Недостатки:
- отсутствует опция с припайкой штырей.
Вблизи
⑦ Макетная плата Arduino Leonardo
Достоинства:
- быстрое подключение к компьютеру через USB; может быть использован в качестве клавиатуры или мыши; 20 цифровых выводов
Недостатки:
- сложный процесс прошивки.
⑧ Программируемый контроллер Arduino Micro
Достоинства:
- компактный размер; форм-фактор позволяет легко разместить контроллер на печатной плате; наличие 20 цифровых контактов; есть светодиоды питания; встроенный восстанавливающийся предохранитель защищает компьютерные USB-порты от короткого замыкания.
Недостатки:
⑨ Модуль контроллера Arduino Pro Micro
Достоинства:
- может эмулировать клавиатуру, мышку и игровой контроллер; 22 цифровых порта; наличие встроенного USB.
Недостатки:
- отсутствие микросхем USB-UART.
⑩ Плата WAVGAT LilyPad Arduino
Достоинства:
- автоматический сброс для более легкого программирования; большие соединительные платы для прошивки.
Недостатки:
- сложное подключение к ПК.
⑪ Программируемая платформа ATTINY85
Достоинства:
- прошивается, работает стабильно; высокое качество исполнения.
Недостатки:
- плата поставляется со старой прошивкой.
C нижней стороны
⑫ Микроконтроллер ATTINY167
Достоинства:
- легкая установка библиотек с помощью прописанных драйверов; 14 контактов ввода/вывода; мощные светодиодные датчики.
Недостатки:
- неполноценный аппаратный SPI, который не позволяет работать с некоторыми устройствами.
⑬ Системная плата STM32 BLUE PILL
Достоинства:
- простая загрузка библиотек; быстрая прошивка загрузчика Bootloader.
Недостатки:
- на плате может быть не отмыт флюс; невысокое качество комплектующих.
Какую Ардуину выбрать новичку?
Мы познакомимся с самыми популярными платами Arduino, расскажем какую Ардуину выбрать начинающим, предостережем от некоторых ошибок в работе.
Сегодня нет никаких ограничений в том, чтобы освоить новый микрочип. Достаточно покопаться в документации и понять логику и назначение каждого вывода микроконтроллера. Неужели это так тяжело? Конечно, тяжело, особенно, если вы новичок, и с самого начала этой статьи вас уже клонит в уныние от мысли, что вы никогда не начнете разбираться в электронике.
На рынке присутствует множество контроллеров, но среди всех лидирующую позицию занимает Arduino со своей уникальной линейкой плат.
Введение
Эти устройства более правильно называть «совместимые Arduino».
На стороне программного обеспечения есть «ядро» и «IDE». Ядром является библиотека C ++, называемая «ядром Arduino», которая уникальна для каждого типа процессора. Эта (обширная) библиотека позволяет использовать общие функции, такие как digitalRead() или digitalWrite(), для работы со множеством разных архитектур.
На аппаратной стороне трудно охватить все возможные варианты в сжатом виде. Таким образом, здесь основное внимание уделяется таким популярным вариантам, как: Uno, Mega, ESP8266, Zero и MKR. Некоторые из них мы упоминаем ниже.
8 или 32 бита
Основные сражения происходят между 8 и 32 битными платами.
8-бит: Uno, Nano, and Mega
32-бит: Zero, MKR, ESP8266 и ESP32
В отличие от ранних видеоигровых консолей, выбор процессора не так прост, и не ограничивается только выбором количества бит. В целом, 8-битные процессоры предлагают базовые возможности при потреблении более низкой энергии.
Более простые архитектуры означают, что регистры прямого программирования, как правило, относительно легки. 32-разрядные процессоры предлагают более высокие тактовые частоты вместе с большим количеством ОЗУ, ПЗУ и последовательной периферии. Их архитектура может усложнить программирование. К счастью, такие структуры, как библиотека Arduino и CircuitPython, зарывают большую часть этой сложности.
Выбор микропроцессора только потому, что он является 8-битным или 32-битным, может быть, скажем так, довольно «близоруким». Поэтому важно подумать о том, как вы планируете использовать его.
Допустим, вы уже в курсе, как обращаться с проводами, контактами и микросхемами. Поэтому разберемся с самыми популярными платами на сегодняшний день.
Arduino Uno Rev3
Arduino Uno Rev3 – один из наиболее популярных контроллеров.
Оригинальная плата имеет 20 цифровых пинов, 6 из которых можно использовать, как аналоговые контакты. Этих выводов вполне достаточно, чтобы собрать несложный рабочий проект. На панели в плате стоит микропроцессор ATmega328P.
Если в процессе экспериментов вы убьете контроллер, заменить его будет дешевле, чем покупать новую плату целиком.
Arduino Nano
Arduino Nano – одна из самых крохотных плат семейства Arduino. На борту у нее все тот же микрочип ATmega328.
Это значит, что возможности Arduino Nano схожи с Arduino Uno, хотя пинов у нее чуть больше (8 аналоговых на Nano против 6 на Uno). Подключение к плате осуществляется с помощью microUSB.
Плата годится в первую очередь для законченных проектов, где программа уже отлажена, и необходимо только спаять компоненты вместе и уместить их в корпус.
Arduino Lilypad
Arduino Lilypad выполнена в виде круга, контакты для подключения находятся на краях. Со всеми контактами используется микроконтроллер ATmega328.
Здесь придется подпаивать провода к плате, так как специальных пинов не предусмотрено. Самое время подружиться с паяльником.
Arduino Mega
Популярность Arduino Mega 2560 Rev3 обусловлена наличием большого количества цифровых входов-выходов (54 цифровых + 16 аналоговых).
Сердцем ее является восьми-битный чип ATmega2560.
Нередко плата используется в масштабных проектах по типу 3D-принтера, поскольку выводов в ней хватает, чтобы подключить многочисленную периферию. Контроллер имеет 256 килобайт флэш-памяти + 8 килобайт SRAM. Чувствуете в себе силы творить? Смело покупайте данную плату.
Arduino Leonardo
Arduino Leonardo на базе микроконтроллера ATmega32u4 идентична Uno, за исключением разъема подключения microUSB (в UNO это USB type-B).
Arduino Micro
Arduino Micro – очередная миниатюрная плата, ее габариты сопоставимы со стандартным USB-накопитель.
Используемый микроконтроллер ATmega32u4 имеет все те же 32 кб оперативки + 2,5 SRAM. Цифровыми и аналоговыми пинами плата не обделена (20 цифровых +7 аналоговых). Отлично подойдет для миниатюрных проектов.
Плату можно запрограммировать, как клавиатуру и мышь, подключив в проект соответствующие библиотеки, и использовать внешние кнопки.
Arduino Due
Arduino Due – одна из самых популярных плат.
Работает на 32-битном процессоре с частотой 84мГц.
На борту установлен AT91SAM3X8E контроллер, во многом превосходящий все вышеперечисленные платы. 512 кб постоянной памяти, 96 кб оперативной. Имеются 54 цифровых пина, 12 из которых могут использовать ШИМ. Также есть пара 12-битных цифро-аналоговых преобразователей: они позволяют микропроцессору выдавать звук без дополнительных расширений.
Arduino Due и Arduino Mega 2560 очень похожи друг на друга, поэтому может показаться, что и шилды для этих плат взаимозаменяемые, но на самом деле это не так. Логические уровни на Mega 5-вольтовые, тогда как на Due – 3,3 вольта. Будьте осторожны с расширениями плат, в противном случае Due безвозвратно сгорит.
Платы разные, но с большей частью задач они справляются все. Лишь экзотические проекты требуют наличие определенной фичи. Тогда придется окунуться поподробнее в спецификацию контроллера и Datasheet. Разумеется, и о программировании придется немножко почитать.
Какая Ардуино лучше
Вы все еще можете задаться вопросом: какая из этих плат является лучшей среди Arduino?
Как вы можете видеть, каждая из этих плат отлична от других и имеет некоторые преимущества для разных ситуаций. Вопрос «что лучше подходит» не является полным вопросом, вам нужно его дополнить «. для моего приложения или проекта».
Хотя невозможно охватить все типы и варианты плат, эта статья должна дать вам достаточно информации для рассмотрения основы для вашего проекта.