28.07.2010

Arduino и Python

Теперь можно использовать Arduino из программ на Python. Сказать спасибо за это надо г-ну SingAlong, выложившему свой код  на сайте github.com.

Для использования надо загрузить специальный скетч prototype.pde в Arduino и подключить библиотеку к скрипту. После этого можно писать так:

#the blink program 


#import the lib 
from arduino import Arduino 

import time 

#specify the port as an argument 
my_board = Arduino('/dev/ttyUSB1') 

#declare output pins as a list/tuple 
my_board.output([11,12,13]) 

#perform operations 
i=0 
while(i<10): 
  my_board.setHigh(13) 
  time.sleep(1) 
  my_board.setLow(13) 
  i+=1

Пока что библиотека находится в самой ранней стадии - версия 0.1, умеет мапить вызовы pinMode, digitalWrite и digitalRead, а также analogRead и analogWrite. Собственно, я бы на месте товарища взял бы сразу библиотеку Firmata - хотя бы не надо изобретать велосипед собственный скетч с протоколом обмена. 

Сам предпочитаю Perl, и если для него еще не сделана адаптация - может быть так и придется поступить (если руки дойдут, конечно же :)

26.07.2010

Arduino 1.0

Вот, оказывается, с чем связан более чем полугодовой перерыв в выпуске ArduinoIDE - полным ходом идет подготовка к версии ArduinoIDE 1.0. Полный список предлагаемых изменений можно посмотреть в google Code. Авторы упоминают, что есть досадные раздражающие мелочи, которые они давно хотели "подчистить", но на самом деле некоторые из них мелочами вовсе и не выглядят. Мало того, в ближайшей перспективе нам грозит потеря 100%-ой совместимости синтаксиса (что вообщем-то не смертельно). 

Итак, вот что планируется по поводу самой IDE:
  • сменить расширение файла '.pde', доставшееся по наследству от Processing, чтобы наконец внести ясность и перестать в них путаться;
  • облагородить тулбар, перерисовав иконки;
  • добавить возможность загружать скетчи и через ISP-программатор (пока так можно только зашивать бутлоадер), а также из командной строки;
  • сделать автоопределение последовательного порта и причесать не совсем логичное (а зато - какое привычное ;) меню выбора платы;
  • возможность добавлять, линковать и распространять с проектом HTML-документацию;
  • улучшенная диагностика, если плату все-таки перепутали (выбрали одну, а подключили другую).
Грядущие изменения языка:
  • добавить функцию sleep() для приложений, вынужденных экономить энергию (я и сам подумывал о подобном, поскольку расточительное потребление холостого loop категорические несовместимо с батарейным питанием);
  • оптимизировать digitalWrite() - споры про это идут давно; в общем случае, она отвечает за трансляцию номера пина Arduino в конкретный порт и пин ATmega;
  • новое API для работы с временем - hour(), second(), minute() и т.п;
  • добавить новые функции для манипулирования аппаратными таймерами - пока что таймеры распределяются под тики и pwm и это полностью скрыто от скетчеписателя;
  • переименовать analogWrite() в pwm();
  • добавить специальные функции для отключения / подключения подтягивающих резисторов типа pullup() / noPullup();
  • добавить функции чтения / записи порта целиком portWrite() / portRead() (правда, не совсем понимаю - зачем, такая возможность заложена в самом avr-gcc);
  • возможность callback-функций для последовательного порта - наподобие serialEvent() в Processing, сделать write() неблокирующим.
Ну и по поводу библиотек:
  • добавить в Ethernet поддержку DHCP и DNS;
  • добавить библиотеку SPI;
  • переименовать LiquidCrystal в LCD;
  • переименовать Wire в что-то другое ;)
  • вынести Sprite и Matrix из ядра;
  • сделать автовычисление зависимостей между библиотеками.
На этот список еще пока можно повлиять, если есть такое желание - подпишитесь на список рассылки разработчиков и внесите свои 5 копеек ;) ибо сила сообщества суммируется из усилий каждого его участника ;) 

23.07.2010

Уроки Wiring (5)

Урок 5. Нажми на кнопку!

(продолжение, начало см. Урок 4, Немного о синтаксисе Wiring)

... получишь результат!" - пела когда-то группа "Технология". На Ардуино, к сожалению, всего одна кнопка: бесспорно важная, но малоинтересная.  Нажимая на нее, мы просто перезапускаем скетч с самого начала.

На практике довольно трудно обойтись без кнопки, которая является источником события в  скетче, поэтому этот вопрос неизбежно замаячит перед начинающим аппаратным хакером. Давайте разберем его, тем более, что ничего сложного тут нет. Правда, зайти придется немного издалека.

21.07.2010

AVR-Doper

До недавнего времени я пользовался для программирования своих МК USBasp и не знал никаких проблем. Но однажды приключилась необходимость запрограммировать ATmega1280 на плате Arduino Mega, и каково же было мое удивление, когда avrdude... выругался на несовпадение записанных и считанных данных в процессе верификации.


При этом зашитый в Mega бутлоадер функционировал корректно, скетчи заливались и исправно работали -  скорее всего ошибку можно было игнорировать, но - с другой стороны - а что, если при программировании случится настоящая ошибка? Как я об этом узнаю?

Пришлось лезть в интернет и искать что-то для самостоятельного изготовления. Честно говоря, мне хотелось двух вещей - программное управление скоростью прошивки и совместимости с AVRStudio. Первый пункт - весьма важная деталь, когда надо программировать партию МК: чтобы это произошло быстро, на USBasp надо сначала поставить перемычку "SLOW SCK", зашить фьюзы - чтобы МК перешел с внутренней RC-цепочки 1МГц на внешний кварц, потом снять эту перемычку и шить на нормальной скорости. Вот именно это "снять-поставить" слегка раздражало. Ну а про AVRStudio - тут все ясно, чтобы не страдало удобство работы в родной для МК ATMEL среде. Бывает нужно крайне редко, но все-таки полезная вещь.

В такой ситуации многие посоветовали бы мне схему Андрея Рыжкова, использующую libusb и релизующую функционал AVR910. Спору нет, отличная конструкция (даже в наборах МастерКит видел), но лично меня она в свое время опечалила скоростью работы. Однако стоит учесть тот момент времени, когда Андрей опубликовал свою разработку - это было очень сильно востребовано. Поэтому я еще раз мысленно поблагодарил его за труд, но поиски - продолжил.

К моему сильному удивлению, необходимое мне устройство нашлось на просторах все того же проекта V-USB, и называется это чудо техники  AVRDoper:


Первое и самое главное - он совместим с протоколом STK500 v2, а значит будет работать с AVRStudio. Далее, кроме внутрисхемного последовательного программирования, он умеет последовательное высоковольтное - было бы актуально, если бы я собирал схемы на ATtiny. Программное управление скоростью программирования - есть. Есть даже возможность считывания через USB отладочной информации с подключенного МК - именно это хотел сделать автор USBasp Thomas Fischl, но так у него, видать, руки и не дошли.

Вот схема с выброшенным из нее узлом высоковольтного программирования:



Программное обеспечение у него построено в любимом стиле Objective Development - блоками. То бишь, фичи можно включать и отключать выборочно, "втискивая" в доступный объем памяти МК необходимый набор. В классическом варианте есть режимы STK500 и USB-HID, но нет возможности обновить прошивку самого программатора без извлечения из схемы его МК. Однако, можно чем-то пожертвовать (например, функцией прозрачной передачи последовательных данных для отладки МК) и включить возможность обновления прошивки по USB через bootloader (требует навыков обращения с компилятором avr-gcc ;)

Кстати, это еще не всё ;) Предусмотрены программные конфигурации для работы AVRDoper-а внутри родственных ему проектов USBasp и metaboard. Правда, для этого надо, чтобы USBasp был собран на ATmega8. Готовые прошивки лежат в тарболле с исходниками - остается только залить и протестить ;)

Построить прототип на макетке, к сожалению, не представлялось возможным - авторы использовали микруху 74AC126, которую мне не удалось достать в DIP-корпусе. Так что сразу пришлось травить плату, которая, по счастью, оказалась полностью работоспособной.

Краткий итог: по скорости AVRDoper не уступает USBasp, шьет ATmega1280 "на ура", схема без  высоковольтной части влезла на одностороннюю плату под корпус GAINTA 403:


Единственное, не смог заставить работать в режиме STK500 под Linux - есть какие-то заморочки с  /dev/ttyACM0. Разбираться лень, тем более, что под Windows оно работает во всех режимах, а под Linux я пользую avrdude и меня вполне устраивает USB HID.

Основную часть скриптов уже переделал - наслаждаюсь отсутствием надобности передергивать SLOW SCK ;)

Купить AVRDoper можно, например, здесь.

18.07.2010

Систематизация

После очередных вопросов от читателей решил просмотреть блог и понял, что написал я уже порядочно, но кроме тегов заметок всё это никак не систематизировано. Решил завести статические страницы, в которых буду группировать информацию для более удобного доступа - типа тематических оглавлений - ссылки на них расположены в шапке страницы (прямо под названием блога). Также наметил несколько новых статей-уроков по Arduino, для совсем начинающих и не только ;)

17.07.2010

Уроки Wiring (4)

Урок 4. Немного о синтаксисе Wiring

(продолжение, начало см. Урок 3. Из чего состоит скетч?)

Чтобы освоить следующие уроки, придется позанудствовать  уделить немного внимания самому языку программирования Arduino - Wiring. На самом деле, он является надмножеством C++ для микроконтроллеров AVR: это такой "хитрый" язык, когда объекты использовать еще можно, а вот распределять динамическую память при помощи оператора new - уже нельзя. Мы рассмотрим объекты позже, когда будем учиться работать с библиотеками. Если вы уже знакомы с синтаксисом С/C++, можете смело забить пропустить этот урок и переходить к следующему.

Всем остальным хочу порекомендовать учебники по языкам: для C рекомендую Кернигана и Ритчи, а по C++ - Страуструпа или Шилдта. Сам по ним учился и гарантирую, что после прочтения этих книг вы как минимум получите грамотное и развернутое представление о языке. Я же, на свой страх и риск, попробую изложить необходимый на мой взгляд минимум.

15.07.2010

V-USB жив!

Почти год прошел с момента предыдущего релиза V-USB, драматически выросло число опубликованных гаджетов, улучшился раздел документации. Поэтому, встречайте новый релиз 2010-07-15, ChangeLog:
  • совместимость для новых МК с суффиксом "P" - например, ATmega328P
  • поддержка устройств, у которых более 64К флеша через USB_CFG_DRIVER_PAGE
  • теперь надо обязательно определять USB_CFG_CLOCK_KHZ в usbconfig.h
  • мелкие фиксы
Новую версию можно скачать здесь.

05.07.2010

Arduino FIO

Название: Arduino Fio
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами: нет
Авторы-разработчики: SparkFun Electronics & Shigeru Kobayashi
Страница проекта: http://arduino.cc/en/Main/ArduinoBoardFio
Дата первого упоминания: 18.03.2010

Изучая список оригинальных плат Arduino неожиданно для себя обнаружил новую строку - Arduino FIO:


Эта плата стоит особняком от остальных Arduino. И дело даже не в том, что она разработана SparkFun, а в родстве с проектом Funnel.cc, задуманном в конце 2007 года и поддерживаемом японцами Shigeru Kobayashi, Takanori Endo и Ichitaro Masuda. Общая идеология Funnel выражается так:



Funnel - это свободный toolkit, состоящий из программной и аппаратной части. Обратите внимание на Server - он и является по большому счету центральной частью этого проекта, хотя и совершенно прозрачной для программиста. При написании программы вы просто добавляете к своей среде разработки (ActionScript3, Processing или Ruby) соответствующие библиотеки Funnel и манипулируете физическими объектами через экземпляры объектов аналогично тому, как это делается в Processing+Arduino.  Но в данном случае можно взаимодействовать сразу с несколькими платами, причем различных типов.

И если при помощи Arduino вы прототипизируете устройство, то Funnel дает возможность "быстренько набросать" целую сеть датчиков и исполнительных устройств. Удобно, не правда ли? ;) Бесспорно, Funnel заслуживает отдельной статьи, поэтому снова вернемся к FIO.

Что отличает Arduino FIO от других плат?

В первую очередь - ориентация на батарейное питание, что вылилось в контроллер подзарядки MAX1555, тактовую частоту 8 МГц и рабочее напряжение 3.3В. Трехпозиционный переключатель на плате служит для отключения питания; также есть и отверстия для  внешнего выключателя.


C тыльной стороны платы нас ожидает "сюрприз" - сокет для XBee. Это и есть вторая особенность FIO: беспроводные коммуникации.

Пины Rx, Tx и DTR уже соединены с соответствующими ножками ATmega, что дает возможность загружать скетчи прямо "по воздуху" (правда, потребуется специальный wireless-bootloader). Плюс, выведены сигналы CTS и SLEEP_RQ, но никуда не подключены - автор схемы может самостоятельно решать, когда и как переводить XBee в "сонное" состояние. Под XBee-сокетом можно разглядеть несколько дополнительных отверстий: если по каким-то причинам нет возможности использовать батарейный разъем и разъем miniUSB с лицевой стороны, можно заряжать через CHG и подавать питание с внешней батареи через BAT.


И, кстати - разъем miniUSB здесь только для подзарядки. Для работы в обычном режиме надо использовать т.н. FTDI cable, место подключения которого также нанесено на тыльной стороне.

На сайте разработчиков плата стоит 25 USD. Это на целых 5 USD дороже, чем Arduino Pro, которая обладает идентичным набором возможностей, но без сокета XBee. Зато решение более чем компактное, да и на дополнительный шилд тратиться не надо. С другой стороны, по отношению к стоимости самой XBee пять баксов не так уж и заметны.

Добавлю, что первая версия FIO появилась еще в 2008 году, и, видимо, ей потребовалось  вырасти до 2.1, прежде чем получить заветный префикс Arduino.

01.07.2010

Getting Started With Processing

Купить Getting Started With Processing
В дополнении к статье о Processing: в издательстве O'Relly вышла в свет книга "Getting Started With Proessing", своим названием и дизайном перекликающаяся со знаменитым "Getting Started With Arduino". На сайте издательства можно полистать солидное по объему Preview, и там же - купить в электронном виде всего за 13 USD. 

Конечно же, это далеко не первая книга о Processing, на полный список можно полюбоваться на сайте processing.org. К сожалению, русских переводов пока мною не замечено...