Arduino Robot

Robot - вид сверху Robot - вид снизу

Общие сведения

Arduino Robot - первая официальная версия Ардуино, в конструкции которого предусмотрены колеса. Робот состоит из двух плат, каждая из которых содержит свой микропроцессор. Плата приводов (Motor Board) контролирует работу двигателей, в то время, как управляющая плата (Control Board) считывает показания датчиков и принимает решения о дальнейших операциях. Каждая из двух плат представляет собой полноценное устройство Ардуино, программируемое с помощью среды разработки Arduino IDE.

Обе платы построены на базе микроконтроллера ATmega32U4 (datasheet), выводы которого связаны с различными приводами и датчиками на плате.

Процесс прошивки Arduino Robot полностью аналогичен Arduino Leonardo. Оба микропроцессора ATmega32U4 имеют встроенный USB-контроллер, что исключает необходимость в дополнительном процессоре. Благодаря этому, при подсоединении к компьютеру Robot может определяться как виртуальный (CDC) последовательный COM-порт.

По традиции, любой элемент платформы Ардуино - будь то аппаратные, программные средства либо документация - имеет открытый исходный код и полностью бесплатен. Благодаря этому у вас есть возможность не только детально изучить устройство Arduino Robot, но и создавать своих роботов на основе его проекта. Ардуино Robot - результат совместных усилий людей из разных стран, желающих сделать процесс познания науки доступным и захватывающим. Теперь Ардуино на колесах, поехали!

Характеристики управляющей платы (Control Board)

Микроконтроллер ATmega32u4
Рабочее напряжение
Напряжение питания 5В через шлейф
Цифровые входы/выходы 5
Каналы ШИМ 6
Аналоговые входы 4 (на цифровых выводах)
Аналоговые входы (мультиплексируемые)  8
Максимальный ток одного вывода 40 мА
Flash-память 32 КБ (ATmega32u4) из которых 4 КБ используются загрузчиком
SRAM 2.5 КБ (ATmega32u4)
EEPROM (внутрення) 1 КБ (ATmega32u4)
EEPROM (внешняя) 512 Кбит (I2C)
Тактовая частота 16 МГц
Клавиатура 5 кнопок
Регулятор Потенциометр, соединенный с аналоговым входом
Полноцветный LCD-экран через интерфейс SPI
SD-кардридер для карт, отформатированных в FAT16
Динамик 8 Ом
Цифровой компас показывает отклонение от географического севера в градусах 
I2C распаечные площадки 3
Области для прототипирования 4

Характеристики платы приводов (Motor Board)

Микроконтроллер ATmega32u4
Рабочее напряжение
Напряжение питания 9В для зарядного устройства
AA батарейный отсек 4 щелочных или NiMh-аккумуляторов
Цифровые входы/выходы  4
Каналы ШИМ 1
Аналоговые входы 4 (на цифровых выводах)
Максимальный ток одного вывода  40 мА
DC-DC преобразователь генерирует 5В для питания всего робота
Flash-память 32 КБ (ATmega32u4) из которых 4 КБ используются загрузчиком 
SRAM 2.5 КБ (ATmega32u4)
EEPROM 1 КБ (ATmega32u4)
Тактовая частота 16 МГц
Подстроечный резистор для калибровки движения
ИК датчики для отслеживания линии  5
I2C распаечные площадки 1
Области для прототипирования 2

Схема и исходный проект

Файлы EAGLE для управляющей платы и платы приводов: arduino-robot-reference-design.zip

Питание

Arduino Robot может быть запитан от USB либо от 4 AA-аккумуляторов - тип источника выбирается автоматически.

Батарейный отсек рассчитан на 4 NiMh-аккумулятора формата AA.

Примечание: для питания робота используйте только перезаряжаемые аккумуляторы.

С целью безопасности, в системе предусмотрено автоматическое отключение двигателей во время питания робота от USB.

Помимо этого, в Arduino Robot встроено зарядное устройство для аккумуляторов. Питание зарядного устройства осуществляется от внешнего источника питания (сетевого AC/DC адаптера) с выходным напряжением 9В. Для включения зарядного устройства необходимо вставить штекер адаптера (диаметр - 2.1 мм, центральный контакт - положительный) в соответствующий разъем питания на плате Motor Board. Зарядное устройство не будет работать во время питания робота от USB.

От источников питания, расположенных на плате приводов (Motor Board), также запитывается и управляющая плата (Control Board) Arduino Robot.

Память

Объем памяти программ микроконтроллера ATmega32U4 составляет 32 КБ (из них 4 КБ отведены под загрузчик). Помимо этого, он имеет 2.5 КБ оперативной памяти SRAM и 1 КБ EEPROM (для взаимодействия с которой служит библиотека EEPROM.

На управляющей плате расположена дополнительная EEPROM-память объемом 512 Кбит, доступ к которой осуществляется по протоколу I2C.

В качестве дополнительного запоминающего устройства выступает внешний SD-кардридер (совмещен с GTFT-экраном), контролируемый микропроцессором управляющей платы.

Входы и выходы

Робот поставляется с несколькими впаянными разъемами. Вместе с тем, на плате Ардуино предусмотрено несколько областей, позволяющих при необходимости допаять в схему свои детали.

Все разъемы на плате промаркированы и с помощью библиотеки Robot ассоциированы с портами микроконтроллера, что обеспечивает программисту возможность работы со стандартными функциями Ардуино. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА при напряжении 5В.

Помимо основных, некоторые выводы Arduino Robot могут выполнять дополинтельные функции:

  • Выводы TK0 - TK7 на управляющей плате: данные выводы соединены с общим аналоговым входом микроконтроллера через мультиплексор. Могут использоваться в качестве аналоговых входов для различных датчиков, таких, как дальномеры, аналоговые ультразвуковые датчики, механические переключатели для обнаружения столкновений и др.
  • Выводы TKD0 - TKD5 на управляющей плате: это цифровые выводы, соединенные непосредственно с процессором. Для работы с данными выводами можно применять функции Robot.digitalRead() и Robot.digitalWrite(). С использованием функции Robot.analogRead() выводы TKD0 - TKD3 могут работать в качестве аналоговых входов.

Примечание: в первых версиях Arduino Robot выводы TKD* обзначены на плате как TDK*. Правильным названием является TKD* - именно оно используется при написании программ.

  • Выводы TK1 - TK4 на плате приводов: на этапе программирования эти выводы следует называть B_TK1 - B_TK4 соответственно. Данные выводы могут работать как в качестве цифровых, так и в качестве аналоговых входов, и взаимодействуют с функциями Robot.digitalRead(), Robot.digitalWrite() и Robot.analogRead().
  • Последовательная связь: обе платы взаимодействуют друг с другом по последовательному интерфейсу, контроллер которого встроен непосредственно в микропроцессор. Для соединения двух плат используется 10-выводной разъем, по которому передаются последовательные данные, питание и другая вспомогательная информация (например, текущий уровень заряда аккумуляторов).
  • SPI на управляющей плате: интерфейс SPI используется для управления GTFT и взаимодействия с SD-картой памяти. Поэтому, для перепрошивки процессора с помощью внешнего программатора, необходимо вначале отсоединить экран.
  • Светодиоды на управляющей плате: на управляющей плате расположено 3 светодиода. Один из них (PWR) показывает наличие питания, остальные два - процесс передачи данных через USB-порт (LED1/RX и TX). Помимо этого, состояние светодиода LED1 может изменяться программно.
  • На обеих платах предусмотрены разъемы I2C: 3 - на управляющей плате и 1 - на плате приводов.

Расположение выводов управляющей платы (Control Board)

ARDUINO LEONARDO ARDUINO ROBOT CONTROL ATMEGA 32U4 ФУНКЦИЯ РЕГИСТР
D0 RX PD2 RX RXD1/INT2
D1 TX PD3 TX TXD1/INT3
D2 SDA PD1 SDA SDA/INT1
D3# SCL PD0 PWM8/SCL OC0B/SCL/INT0
D4 MUX_IN A6 PD4   ADC8
D5# BUZZ PC6 ??? OC3A/#OC4A
D6# MUXA/TKD4 A7 PD7 FastPWM #OC4D/ADC10
D7 RST_LCD PE6   INT6/AIN0
D8 CARD_CS A8 PB4   ADC11/PCINT4
D9# LCD_CS A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
D10# DC_LCD A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
D11# MUXB PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
D12 MUXC/TKD5 A11 PD6   T1/#OC4D/ADC9
D13# MUXD PC7 PWM10 CLK0/OC4A
A0 KEY D18 PF7   ADC7
A1 TKD0 D19 PF6   ADC6
A2 TKD1 D20 PF5   ADC5
A3 TKD2 D21 PF4   ADC4
A4 TKD3 D22 PF1   ADC1
A5 POT D23 PF0   ADC0
MISO MISO D14 PB3   MISO,PCINT3
SCK SCK D15 PB1   SCK,PCINT1
MOSI MOSI D16 PB2   MOSI,PCINT2
SS RX_LED D17 PB0   RXLED,SS/PCINT0
TXLED TX_LED PD5    
HWB   PE2   HWB

Расположение выводов платы приводов (Motor Board)

ARDUINO LEONARDO ARDUINO ROBOT CONTROL ATMEGA 32U4 ФУНКЦИЯ РЕГИСТР
D0 RX PD2 RX RXD1/INT2
D1 TX PD3 TX TXD1/INT3
D2 SDA PD1 SDA SDA/INT1
D3# SCL PD0 PWM8/SCL OC0B/SCL/INT0
D4 TK3 A6 PD4   ADC8
D5# INA2 PC6 ??? OC3A/#OC4A
D6# INA1 A7 PD7 FastPWM #OC4D/ADC10
D7 MUXA PE6   INT6/AIN0
D8 MUXB A8 PB4   ADC11/PCINT4
D9# INB2 A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
D10# INB1 A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
D11# MUXC PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
D12 TK4 A11 PD6   T1/#OC4D/ADC9
D13# MUXI PC7 PWM10 CLK0/OC4A
A0 TK1 D18 PF7   ADC7
A1 TK2 D19 PF6   ADC6
A2 MUX_IN D20 PF5   ADC5
A3 TRIM D21 PF4   ADC4
A4 SENSE_A D22 PF1   ADC1
A5 SENSE_B D23 PF0   ADC0
MISO MISO D14 PB3   MISO,PCINT3
SCK SCK D15 PB1   SCK,PCINT1
MOSI MOSI D16 PB2   MOSI,PCINT2
SS RX_LED D17 PB0   RXLED,SS/PCINT0
TXLED TX_LED PD5    
HWB   PE2   HWB

Связь

Arduino Robot предоставляет ряд возможностей для связи с компьютером, еще одним Ардуино или другими микроконтроллерами. В ATmega32U4 имеется приемопередатчик UART (уровень напряжения TTL 5В), позволяющий осуществлять связь по последовательному интерфейсу через цифровые выводы 10-контактного межплатного разъема. Микроконтроллер 32U4 поддерживает последовательную (CDC) связь через USB и при подключении к компьютеру может определяться как виртуальный COM-порт. При этом микросхема использует стандартные USB-COM драйвера и может работать в режиме USB 2.0 Full Speed. На платформе Windows необходим только соответствующий .inf-файл. В пакет программного обеспечения Ардуино входит специальная программа, позволяющая считывать и отправлять на Ардуино простые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать светодиоды RX (LED1) и TX. (При последовательной передаче данных между платами данные светодиоды не задействуются).

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

В микроконтроллере ATmega32U4 также реализована поддержка последовательных интерфейсов I2C (TWI) и SPI. В программное обеспечение Ардуино входит библиотека Wire, позволяющая упростить работу с шиной I2C; для получения более подробной информации см. документацию. Для работы с интерфейсом SPI используйте библиотеку SPI.

Программирование

Arduino Robot программируется с помощью программного обеспечения Ардуино (скачать). Для этого из меню Tools > Board необходимо выбрать "Arduino Robot Control Board" или "Arduino Robot Motor Board". Для получения более подробной информации см. справку и примеры.

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

Тем не менее, микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик; более подробно об этом см. соответствующие инструкции.

Автоматический (программный) сброс и запуск загрузчика

Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Robot спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Сброс срабатывает после закрытия виртуального COM-порта, который предварительно был открыт на скорости 1200 бод. При срабатывании этого условия, процессор сбросится, разорвав USB соединение с компьютером (при этом виртуальный COM-порт исчезнет). После перезагрузки процессора, запускается загрузчик, оставаясь активным на протяжение приблизительно 8 секунд. Помимо этого, инициировать загрузчик можно, нажав кнопку сброса на плате Arduino Robot. Обратите внимание, что при первом включении устройства вместо запуска загрузчика, контроллер сразу перейдет к выполнению пользовательской программы (если таковая есть).

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

Защита USB от перегрузок

В обеих платах Arduino Robot есть восстанавливаемые предохранители, защищающие USB-порты компьютера от коротких замыканий и перегрузок. Большинство компьютеров имеют собственную защиту USB от перегрузок, тем не менее, такие предохранители позволяют дополнительно повысить степень защиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.

Физические характеристики

Диаметр Arduino Robot составляет 19 см, высота - до 10 см (с учетом колес, GTFT-экрана и различных разъемов).

Дополнительная информация

См. также: начинаем работу с Arduino Robot и описание библиотеки Robot.