Arduino — это микрокомпьютер размером меньше ладони. На базе МК с частотой 16МГц и памятью 32Кб.
На мой взгляд Arduino -- это прекрасный мостик в мир микроконтроллеров для начинающих. Воспользовавшись этим мостиком можно затем легко перейти на тот берег, где Arduino будет уже не нужна и где программируют "голые" микроконтроллеры внутри собственных устройств.
Arduino для начинающих -- это лучший выбор, на мой взгляд. Плата предназначена в первую очередь для обучения программированию микроконтроллеров и созданию микроконтроллерных устройств людьми без суровой инженерной подготовки. Arduino — это плата + среда разработки, с помощью которой можно написать, скомпилировать и загрузить в память платы готовую программу. Причем загрузка программы также проста как копирование файла на флешку.
На борту у Arduino 28 выводов для связи с внешним миром. К ним можно подключать лампочки, датчики, моторы, чайники, роутеры, магнитные дверные замки и множетсво других электрических штучек какие только взбредут в голову.
Стартануть с этой платформой достаточно легко. Надо только купить плату. Можно купить китайскую копию, а можно купить оригинальную (которая произведена всё в том же Китае=) ).
Давай поссмотрим изкаких блоков и деталей состоит, к примеру, Arduino UNO.
Часть выводов я подписал на схеме, а часть обозначил цифрами. Прежде всего хочу обратить внимание на то, что на плате мало деталей. Она действительно состоит из примерно 2-х десятков компонентов. Такую, кстати можно легко собрать самому, если есть навык прошивки МК. Как я уже писал выше на плате имеется 28 выводов для общения с внешним миром и управления Arduino. Рассмотрим их попорядку:
У Arduino UNO их всего 6: А0-А5. На плате они отмечены соответственно. Для чего их можно использовать? Например для того, чтобы считывать аналоговые величины. Как это работает? Ну так у нас же в МК AVR есть встроенный 10 битный АЦП.
Каждый вывод А0-А6 может быть сконфигурирован как запись, так и на чтение. Это значит, что можно указать конкретно что он должен делать: считывать значения аналоговой величны, подающиеся на него или наоборот выдавать их во внешних мир. (Подсказка. Всё это связано с портами ввода/вывода в AVR)
Кстати, несмотря на всё выше сказанное, эти выводы могут конфигурироваться как цифровые I/O выводы. Вот что говорит об этом документация:
It is important to note that vast majority of Arduino (Atmega) analog pins, may be configured, and used, in exactly the same manner as digital pins.
Этот контакт служит для подачи опорного напряжения для аналогово-цифрового преобразователя. Его можно использовать, чтобы подать опорное напряжение отличное от 5В, которое используется по умолчанию для верхней границы значений АЦП.
Это значит, что если хочется использовать АЦП для обработки сигнала, амплитуда болтается в промежутке от 0 до 1.2В, то чтобы получить полномасштабный результат, можно подать 1.2В на AREF.
Кстати, больше 5 вольт напрямую на AREF подавать нельзя.
Вообще, Arduino поддерживает несколько режимов работы этого вывода:
О различиях между режимами можно прочитать здесь
Кстати, следует помнить, что так как у нас имеется на борту 10 битный АЦП, который преобразует аналоговую величину в промежутке между 0В и 5В в целые числа между 0 и 1023, то разрешение получаемых величин получается примерно 4.8 мВ.
Выше я упоминал, что Arduinno имеет 14 цифровых выводов 6 из которых являются выводами с функцией PWM (pulse width modulation или по-русски ШИМ). Эти 6 особенно полезны, так как позволяют управлять мощной нагрузкой. Конечно, напрямую подключить к ним какой-нибудь двигетель или нагреватель не получится, но зато это можно сделать, в самом простом варианте, через транзистор. В итоге получим средство для регулировки отдаваемой нагрузкой мощности. Подключим двигатель -- сможем управлять скоростью его вращения. Удобно.
Выводы без ШИМ-режима как и другие могут настраиваться как на вход, так и на выход. При этом используется положительная логика, т.е. когда HIGH (высокий уровень) отвечает за 1, а LOW (низкий уровень) за 0. Другими словами HIGH=истина (True), LOW=ложь (False).
Arduino вооружена 32 КБ flash-памяти.Данные в этой памяти нельзя изменять во время работы устройства. Она хранит только статичные данные: программу и ресурсы. Из них 0,5 КБ зарезервировано под загрузчик.Это благодаря ему Arduino UNO можно прошить с обычного компьютера через USB.
Память в микронотроллерах AVR имеет гарвардскую архитектуру. Она разделена на память программ и память данных. В памяти программ хранятся программы и константы, которые зашиваются в неё при программировании МК, а память данных служит хранилищем данных во время работы МК.
Преимуществом такого подхода является невозможность испортить саму программу во время её исполнения. Но и минусы у такой архитектуры также есть.
Практически все современные компьютеры оснащены защитой USB, но платформа Arduino имеет дополнительную защиту USB в виде встроенного предохранителя, который обрывает соединение с компьютером, если ток через USB-порт превысит 500 мА.
С внешним миров Arduino UNO умеет общаться как штатными средствами (через USB кабель) с помощью последовательного соединения (Serial UART). На плате установлен дополнительный чип, который представляет USB-соединение компьютеру как последовательное. Именно поэтому соединение с Arduino определяется компьютером как последовательное.
Существует отдельная библиотека, которая позволяет организовать последовательное соединение с использованием любых пинов МК, а благодаря множеству плат расширения можно организовать взаимодействие с помощью ethernet, радиоканала, Wi-Fi, bluetooth и т.д.
Микроконтроллер | ATmega328 |
Рабочее напряжение | 5V |
Входное напряжение (recommended) | 7-12V |
Входное напряжение (limits) | 6-20V |
Цифровые I/O пины | 14 (6 пинов умеют PWM ) |
Аналоговые пины | 6 |
Постоянный ток через 1 I/O пин | 40 mA |
Постоянный ток через 3.3V пин | 50 mA |
Флэш память | 32 KB (ATmega328) из них 0.5 KB используется загрузчиком |
SRAM | 2 KB (ATmega328) |
EEPROM | 1 KB (ATmega328) |
Частота | 16 MHz |
Позже я расскажу про устройство AVR, на базе которого строится Arduino, так что есть смысл подписаться на рассылку =)