Arduino Fio
Примечание
Эта страница относится к продукту, снятому с производства.
Обзор
Arduino Fio — это микроконтроллерная плата на базе ATmega328P (datasheet), работающая на напряжении 3.3 В и частоте 8 МГц. Она имеет 14 цифровых входов/выходов (из которых 6 могут использоваться как выходы ШИМ), 8 аналоговых входов, встроенный резонатор, кнопку сброса и отверстия для монтажа штыревых разъёмов. Плата имеет разъём для литий-полимерной батареи и включает схему зарядки через USB. На нижней стороне платы расположен разъём для модуля XBee.
Arduino Fio предназначена для беспроводных приложений. Пользователь может загружать скетчи с помощью кабеля FTDI или переходной платы Sparkfun. Кроме того, используя модифицированный адаптер USB-to-XBee, например XBee Explorer USB, пользователь может загружать скетчи по беспроводному каналу. Плата поставляется без предустановленных разъёмов, что позволяет использовать различные типы коннекторов или прямую пайку проводов.
Arduino Fio была разработана Shigeru Kobayashi и SparkFun Electronics, и произведена SparkFun Electronics.
Схема и эталонный дизайн
Файлы EAGLE: arduino-fio-reference-design.zip
Схема: Arduino-Fio-schematic.pdf
Характеристики
Микроконтроллер |
ATmega328P |
Рабочее напряжение |
3.3 В |
Входное напряжение |
3.35–12 В |
Входное напряжение для зарядки |
3.7–7 В |
Цифровые входы/выходы |
14 (из них 6 с ШИМ) |
Аналоговые входы |
8 |
Постоянный ток на вывод |
40 мА |
Flash-память |
32 КБ (из которых 2 КБ используются загрузчиком) |
SRAM |
2 КБ |
EEPROM |
1 КБ |
Тактовая частота |
8 МГц |
Ширина |
28 мм |
Длина |
65 мм |
Вес |
9 г |
Питание
Arduino Fio может питаться от кабеля FTDI или переходной платы, подключённой к шестиконтактному разъёму (как указано на нижней стороне), или от стабилизированного источника питания 3.3 В на выводе 3V3, или от литий-полимерной батареи на выводах BAT.
Выводы питания:
BAT — для подключения литий-полимерной батареи к плате.
3V3 — стабилизированное напряжение 3.3 В.
GND — выводы земли.
Память
ATmega328P имеет 32 КБ flash-памяти для хранения кода (из которых 2 КБ используются загрузчиком). Она также имеет 2 КБ SRAM и 1 КБ EEPROM (которую можно читать и записывать с помощью библиотеки EEPROM).
Входы и выходы
Каждый из 14 цифровых выводов Fio может использоваться как вход или выход с помощью функций pinMode(), digitalWrite() и digitalRead(). Они работают на напряжении 3.3 В. Каждый вывод может обеспечивать или принимать максимум 40 мА и имеет внутренний подтягивающий резистор (по умолчанию отключён) номиналом 20–50 кОм. Кроме того, некоторые выводы имеют специализированные функции:
Serial: RXI (D0) и TXO (D1). Используются для приёма (RX) и передачи (TX) последовательных данных TTL. Эти выводы подключены к выводам DOUT и DIN разъёма XBee-модема.
Внешние прерывания: 2 и 3. Эти выводы могут быть настроены на срабатывание прерывания при низком уровне, по нарастающему или спадающему фронту, или при изменении значения. Подробности см. в функции attachInterrupt().
ШИМ: 3, 5, 6, 9, 10 и 11. Обеспечивают 8-битный ШИМ-выход с помощью функции analogWrite().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Эти выводы поддерживают SPI-связь, которая, хотя и обеспечивается аппаратно, в настоящее время не включена в язык Arduino.
LED: 13. Встроенный светодиод подключён к цифровому выводу 13. Когда вывод имеет значение HIGH, светодиод включён; когда LOW — выключен.
Fio имеет 8 аналоговых входов, каждый из которых обеспечивает разрешение 10 бит (т.е. 1024 различных значения). Аналоговые входы измеряют напряжение от земли до Vcc. Кроме того, некоторые выводы имеют специализированные функции:
I2C: 4 (SDA) и 5 (SCL). Поддержка I2C (TWI) связи с использованием библиотеки Wire.
На плате есть ещё несколько выводов:
AREF — опорное напряжение для аналоговых входов. Используется с analogReference().
DTR — понижение этой линии сбрасывает микроконтроллер. Обычно используется для добавления кнопки сброса к шилдам, которые блокируют кнопку на плате.
На плате также есть 8 незапаянных отверстий:
BAT + и BAT - — для подключения батареи. Обычно используется, когда не нужно подключать батарею к разъёму.
CHG 5V и CHG - — для подключения зарядных клемм. Обычно используется для добавления внешнего разъёма для зарядки.
SW — подключён к выключателю питания на плате. Обычно используется для добавления внешнего выключателя питания.
CTS — подключён к выводу #CTS/DIO7 разъёма XBee. Обычно используется для управления спящим режимом XBee-модема.
DTR — подключён к выводу #DTR/SLEEP_RQ/DI8 разъёма XBee. Обычно используется для управления спящим режимом XBee-модема.
Связь
Arduino Fio имеет ряд средств для связи с компьютером, другим Arduino или другими микроконтроллерами. ATmega328P обеспечивает последовательную связь UART TTL, доступную на цифровых выводах 0 (RX) и 1 (TX). Программное обеспечение Arduino включает монитор порта, который позволяет отправлять и получать простые текстовые данные на плату Arduino Fio через внешнее последовательное соединение. Рекомендуется использовать FTDI Basic или кабель FTDI. Встроенный разъём mini-USB используется только для зарядки и не обеспечивает последовательную связь.
Библиотека SoftwareSerial позволяет осуществлять последовательную связь на любом из цифровых выводов Fio.
ATmega328P также поддерживает I2C (TWI) и SPI связь. Программное обеспечение Arduino включает библиотеку Wire для упрощения использования шины I2C; подробности см. в справке. Для использования SPI-связи обратитесь к даташиту ATmega328P.
Физические характеристики
Размеры печатной платы Fio составляют приблизительно 1.1» x 2.6» (28 x 66 мм).
Полезные советы по программированию Fio
Arduino Fio не так проста, как стандартные модули Arduino, поскольку программирование через беспроводной канал XBee имеет некоторые сложности. Однако если вы знаете об этих сложностях, плата проста в использовании. Вот несколько советов, которые облегчат работу.
Используйте скорость загрузчика, когда это возможно
Загрузчик ATmega328P работает на скорости 57600 бит/с. Именно поэтому вам нужно настроить радиомодули XBee на 57600 бит/с в приведённых выше примерах. Если ваши скетчи будут обмениваться данными по радиоканалу XBee на другой скорости, вам придётся перенастроить радиомодули на эту скорость после программирования. Поэтому, если вы программируете по беспроводному каналу и можете выбрать скорость для своего приложения, используйте скорость загрузчика 57600 бит/с. Это сэкономит вам время на перенастройку радиомодулей.
Если вам необходимо использовать другую скорость для вашего приложения, рассмотрите возможность программирования Fio через проводное соединение. При программировании через проводное соединение удалите радиомодуль XBee, чтобы избежать конфликтов.
Используйте ASCII-кодированную связь, когда это возможно
Радиомодули XBee имеют два режима: режим данных, в котором данные передаются прозрачно, и командный режим, в котором они настраиваются через последовательный порт. Для переключения из режима данных в командный режим отправляется строка:
+++
Отправка значений датчиков в двоичном формате может случайно переключить XBee из командного режима в режим данных. Например, представьте, что вы отправляете аналоговое значение так:
int sensorReading = analogRead(0) /4;
Serial.print(sensorReading, BYTE);
Если значение датчика три раза подряд окажется равным 43 (что соответствует ASCII-символу „+“), это переведёт радиомодуль Fio в командный режим. Чтобы избежать этого, используйте ASCII-связь с Fio, когда это возможно.
Помните об автоматическом (программном) сбросе
Как и другие Arduino, Arduino Fio не требует физического нажатия кнопки сброса перед загрузкой. Она может быть сброшена программно с компьютера. Когда Fio подключена к компьютеру под управлением Mac OS X или Linux, она сбрасывается каждый раз при установлении последовательного соединения из программного обеспечения (через USB). Чтобы избежать проблем, убедитесь, что Fio отправляет начальное сообщение любой программе, которая общается с ней через последовательный порт.
Приведённый ниже скетч отправляет байт при запуске. Принимающая программа должна ожидать это сообщение и не отправлять данные на Arduino до его получения.
void setup() {
Serial.begin(57600);
Serial.print(255);
}
void loop() {
int sensorReading = analogRead(0);
Serial.println(sensorReading, DEC);
}
Если вы используете этот скетч как основу при разработке последовательных приложений для Fio, у вас будет меньше проблем.
Вот почему это важно:
Один из выводов на разъёме программирования FTDI подключён к линии сброса ATmega328P через конденсатор ёмкостью 100 нФ. Этот вывод подключён к одной из линий аппаратного управления потоком любого конвертера FTDI USB-to-serial: RTS при использовании кабеля FTDI, DTR при использовании переходной платы Sparkfun. При понижении этой линии линия сброса опускается достаточно надолго для сброса чипа. Программное обеспечение Arduino использует эту возможность для загрузки кода простым нажатием кнопки загрузки в среде Arduino. Это означает, что загрузчик может иметь меньшее время ожидания, так как понижение линии сброса может быть синхронизировано с началом загрузки.
В течение следующей половины секунды на Fio работает загрузчик. Хотя он запрограммирован игнорировать неправильные данные (т.е. всё, кроме загрузки нового кода), он перехватит первые несколько байтов данных, отправленных на плату после открытия соединения. Если скетч, работающий на плате, получает одноразовые данные конфигурации или другие данные при первом запуске, убедитесь, что программное обеспечение, с которым он связывается, ждёт секунду после открытия соединения и перед отправкой этих данных.