29.06.2010

Гибкий Seeeduino

Seeedstudio еще в середине весны намекала, что в ее недрах зреет гибкая Arduino-совместимая плата, и вот теперь, кажется, дело дошло и до прототипа:


Такой Arduino и в щель под дверью можно пропихнуть, и в рукаве зашить. Пионерами в области wearable-решений принято считать Sparkfun с их Lilypad-ами, на базе которых существует уже довольно много проектов. Однако, платы хоть и предназначались для ношения и сшивания специальной токопроводящей нитью, но были все-таки жесткими. А тут - практически полная гибкость - в прямом и переносном смысле этого слова:


Ключевые особенности грядущей новинки:

  • можно сгибать, разрезать на фрагменты и стыковать из фрагментов (посередине проходит 20-пинвая шина);
  • наружу выкинуты все выводы ATmega168/328;
  • по умолчанию полностью совместима с Arduino (можно отрезать ненужные части);
  • интерфейс USB-Serial (и разъем miniUSB, судя по фото);
  • встроенная цепь для зарядки аккумулятора.

Таким образом, авторы получили маленькую, тонкую, гибкую, легкую, но хрупкую development board. Так что стирать одежду с такой платой под подкладкой все равно надо крайне осторожно ;)

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

27.06.2010

Arduino PLC

Идея создать на базе Arduino открытый PLC (программируемый логический контроллер) уже давно витает в воздухе. Некто Антон из Англии выпускает уже вторую версию своей PLC Shield: специальной шилд-платы для подключения Arduino к страшному миру внешних датчиков и силовых нагрузок.


Шилд имеет отдельную схему питания на стабилизаторе 7805, восемь защищенных стабилитронами 4V7 и RC-цепочками входов, четыре цифровых оптронных входа, 485-ый интерфейс на MAX3082CPA и восемь выходов, управляемых релюшками.

Каких размеров будет шилд-плата, как она будет скомпонована и заведется ли всё это хозяйство в принципе - неизвестно:  ничего кроме схемы пока нет. Зато у автора есть желание и целеустремление продолжать работу.

Редакция будет внимательно следить за развитием проекта ;)

24.06.2010

Diavolino

Название: Diavolino
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами: почти
Авторы-разработчики: Evil Mad Scientist Laboratories
Страница c новостью проекта: http://www.evilmadscientist.com/article.php/diavolino
Дата первого упоминания: 23.06.2010

Как всегда, по средам, EMSL представила свой новый проект: Diavolino.



Общая идея проекта обозначена как самая дешевая Arduino-совместимая плата для обучения. Авторы постарались по возможности исключить традиционные узлы Arduino  или сделать их опциональными:
  • полностью отсутствует USB-TTL мост, вместо него вилка для USB-TTL модуля;
  • опциональный регулятор 78L05 для питания от внешнего источника;
  • возможность питания от USB или источника +5В;
  • только один светодиод L.
В отличие от других xDuino-совместимых плат, эта изначально предлагается в виде kit-а (всего 13 USD). На мой взгляд, Devilduino занимает промежуточное положение между Arduino minimum и Metaboard. Первый - это просто набор деталей без печатной платы, в то время как второй все-таки умеет получать скетч по USB, но за счет этого совместим с Arduino на 98%. Вот так выглядит минимальное количество напаянных деталей:



Зато в Devilduino мы получаем возможность подключать Shield-платы, плюс - практически полный простор для творчества по поводу питания. На фото выше можно разглядеть пару выводных резисторов-перемычек (с одной черной полоской). Манипулируя ими, можно добиваться разных результатов, например, если под рукой есть блок питания +5В (а такие часто идут в комплекте с USB-хабами):



Надо установить резистор-перемычку, которая напрямую соединит разъем питания с внутренней шиной Vcc. Если же блок питания на 9 или 12 В, то вместо перемычки устанавливаем регулятор и конденсаторы:



Авторы недвусмысленно указывают на возможность батарейного питания от трех алкалиновых AA (в сумме 4,5В). Не знаю, насколько долго можно прожить от трех алкалиновых батарей, но такие же аккумуляторы могут и не заработать - 3,6 Вольта подойдет не для всякой ATmega, и уж тем более не на тактовой 16МГц (хотя, Seeeduino 2.12 все-таки работает):



Кстати, из схемы удален защитный диод, поэтому при подключении питания не рекомендуется проявлять рассеянность по поводу полярности.

Ну и напоследок хочется обратить внимание на брутальную разводку печатной платы и ее внешний вид:







Смотрится, бесспорно, круто.

Резюме: неплохой вариант печатной платы для Arduino minimum, по дизайну схожий с Arduino Pro, но для самостоятельного through-hole монтажа. Однако, авторам пришлось отступить от некоторых традиций:

  • на плате отсутствует источник 3,3В, для него нет места, только одна контактная площадка;
  • смещена вилка ICSP, что вызовет неизбежную несовместимость с Shield-платами, которые ее используют;
  • максимальный потребляемый ток ограничен 100 мА;
  • нет защитного диода для внешнего питания.

Насколько эти минусы действительно являются минусами для вашего проекта - решать только вам ;)

Файлы:

20.06.2010

Ультразвуковой сенсор GH-311

Мне пришла небольшая партия ультразвуковых датчиков GH-311, которая с успехом запустилась с Arduino/Freeduino:


Общеизвестно, что принцип ультразвукового обнаружения объектов входит в состав летучей мыши ;) Несчастное животное посылает короткие импульсы на частоте ~40 КГц и прислушивается к тому, насколько быстро появляется эхо - чем быстрее, тем ближе объект, от которого отразился звук.

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


Модель GH-311 обладает следующими характеристиками (наткнулся на них в крайне лаконичном даташите):

  1. Power Voltage: DC 6-12V
  2. Quiescent current : Less than 2mA
  3. output Level: High 5V
  4. output Level: Low 0V
  5. Sensing Angle: no greater than 15°
  6. Sensing distance: 2mm-3m

Увы, GH-311 не умеет определять расстояние до объекта, а только сообщать: обнаружено что-то или нет - в зависимости от этого меняется состояние выхода OUT (5В/0В). В интернете можно найти однотипные вопли несчастных людей, натыкающихся на одни и те же грабли - они хотят измерять расстояние, а им говорят - нельзя. Нашел я и просьбу одного "студента", который просил исходный код микроконтроллера с тем, чтобы его усовершенствовать (конечно же, безответную). Это заставило меня присмотреться повнимательнее к схеме:


Модуль собран на кусочке двустороннего гетинакса размером 46 х 19 мм. Внешний слой - полностью "земляной", поэтому схему можно рассмотреть довольно подробно. "Сердцем" поделки является восьмибитный RISC-микроконтроллер HT48R05A, разработанный фирмой Holtek.


Некоторые просто обожают HT48xx и HT46xx, хотя, конечно же, возможности этих серий более чем скромные. Гарвардская архитектура включает 0,5К памяти программ (14 битная), 32 байта памяти программ и целых две (!) ячейки стека вызовов - это означает что третий вызов вложенной подпрограммы окажется волшебным (читаем - последним ;). Система команд очень урезана - нет даже умножения. Зато есть источники прерываний, watchdog и даже один таймер.

Память программ может быть либо масочным ROM (программируется на заводе), либо OTP (именно такой МК установлен в модуле), то есть - однократно программируемая. Это вам не Arduino, когда можно заливать программу во время отладки хоть по десять раз в минуту. После этого совершенно логичным выглядит наличие бесплатной IDE, в которой можно писать и отлаживаться на ассемблере и C, а также программно эмулировать микроконтроллеры в реальном времени и даже некоторые периферийные устройства, типа LCD.

Ну и напоследок - вопрос цены. Нашел в розничной продаже HT48RC06A за 26 рублей, а ведь в нем в два раза больше памяти программ и ОЗУ ;)

Весьма непонятным мне показалось решение с питанием - чтобы подключить GH-311 к Arduino, надо запитать последний от внешнего источника, соединить VIN с "+"-ом на модуле, GND - с "-", а OUT к любому цифровому входу, например к 12-му. Фокус в том, что от 5В модуль просто не заработает, потому что на нем использован стабилизатор HT7550-1 разработки все той же Holtek:



По схеме наглядно видно, что внешнее питание через диод и конденсаторы поступает на регулятор, а уже оттуда уходит на схему. Поэтому, увеличение питания никак не скажется на дальности обнаружения объектов, а лишь на температуре стабилизатора. Зато такой датчик можно использовать без микроконтроллеров или Arduino, скажем в охранных системах. Пример подобной схемы есть в документации:



Но вернемся к Arduino. Подключив модуль вышеописанным методом, пишем скетч, зажигающий светодиод L:

int led = 13;       // Arduino led
int sensorPin = 12; // Digital Pin In
int sensorValue;    // Value for sensor output
int d = 250;        // Delay

void setup() {
}

void loop() {
  sensorValue = digitalRead(sensorPin);
  digitalWrite(led,sensorValue);
  delay(d);  
}

Как видите, как всегда - проще некуда.

Резюме: GH-311 можно использовать в охранных системах или датчиках присутствия, когда необходимо просто обнаружить объект.

17.06.2010

Китайские сервоприводы

Как известно, китайцы - самые плодовитые плагиаторы в мире. Например, недавно они скопировали наш  истребитель СУ-33. Неудивительно, что в области ширпотреба они начинают уже копировать у самих себя ;) например, марки TowerPro и Towardpro ;)

Итак, недавно мне приехали сервоприводы ( или просто - "сервы" ), которые были заказаны месяца два с половиной назад, видать добирались на верблюдах до границы с Россией. Заказал я их чисто из спортивного интереса - мне хотелось понять, чем отличаются различные модели:
  • TowerPro MG945
  • TowerPro MG995
  • Towardpro MG996R
Серва (иногда употребляют термин R/C servo) - это такое устройство, в которое входит три проводочка - GND, Uпит и ШИМ-управление. Скважность импульсов определяет угол поворота вала с актуатором, который, например, может быть соединен с рулевым управлением автомодели или с ручкой регулировки нагрева термопечки (конкретное применения ограничена только вашей фантазией).  Прелесть состоит в простоте подключения - можно просто запитать его от +5В и спокойно управлять через Arduino, подключив его к выходам с пометкой PWM и выдавая нужное число в analogWrite или, предпочтительнее, через специальную библиотеку Servo, входящую в состав ArduinoIDE.

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

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


Сразу заметно, что это практически близнецы-братья. Ради интереса я полазал со штангенциркулем - но еще раз убедился, что зрение меня не обмануло - редуктор везде одинаковый:


Может отличаться внешний вид основного подшипника - и только. Следовательно, передаточный коэффициент у всех будет тоже одинаковый. Быть может, они отличаются моторчиками, но без деструктивных методов вскрытия этого не проверить - да и не факт, что на моторе есть маркировка. Поэтому, дальше я обратил внимание на плату микроконтроллера, у MG945 и MG995 она полностью идентична:


На ней установлен PIC16F676-I/SL в корпусе SO. Рядом видим кварц 16 МГц в корпусе типа "лодочка". Зато в MG996R наблюдается совершенно иная "аппаратная платформа":


Вместо PIC использована ATmega8-16AU, а также трехпиновый резонатор (написано T400s - не смог идентифицировать).

Собственно, тут напрашивается единственный вывод - при условии, что моторчики одинаковые, отличия могут быть только в управлении. Это может сказываться на скорости или точности позиционирования,  но никак не на усилии. Косвенно, подтверждение этому можно найти на этом видео:



Таким образом, частично я совое любопытство удовлетворил. Но теперь мне интересно: будут ли все сервы с надписью Towardpro содержать внутри ATmega, а TowerPro - PIC? ;)

И, кстати, почему-то про эти модели пишут "55g", хотя на самом деле они стабильно весят 62 грамма. То ли это специальные китайские граммы, то ли техническим характеристикам производителей этих серв надо доверять с дикой осторожностью, например - перепроверять усилие собственными средствами ;)

12.06.2010

Behindduino

Название: Behindduino
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами: нет
Страница c новостью проекта: http://blog.makezine.com/archive/2010/05/behinduino.html
Дата первого упоминания: 26.05.2010

Японцы не устают меня удивлять своей любовью к Arduino-совместимым клонам. На этот раз Такуми Фунада (Takumi Funada) додумался надругаться над макеткой:


Переворачиваем, а там - самый минимальный набор деталей Arduino:


Не хватает надписей на макетке, но в целом - ничего лишнего, если под рукой есть конвертер USB-TTL.

10.06.2010

Amarino 2.0


Проект Amarino продолжает свое развитие - в настоящий момент вышла версия 2.0, авторы собрались с духом и опубликовали исходники приложения для Android. Немного изменился веб-сайт проекта, улучшилась секция документации. Безусловно, всё это не может не радовать глаз ;) Краткий список изменений:

  • одновременная работа с несколькими Arduino-устройствами;
  • визуализация событий;
  • возможность написания собственных плагинов для событий;
  • добавлена поддержка устройств Android 2.x

Ранее я уже писал об этом проекте в статье Arduino и Android.

08.06.2010

Processing vs Arduino

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

Самый простой способ - использовать библиотеку Serial, которая доступна по умолчанию. При помощи операторов Serial.print() можно передать произвольные данные через USART МК ATmega в реальный или виртуальный COM-порт (текущие модели Arduino/Freeduino используют  USB-to-TTL мост на чипе FT232RL). Естественно, можно не только получать, но и  отправлять, организовав таким образом полноценный интерактив.

Написание собственного протокола обмена, пусть даже не очень сложного - весьма скучное занятие. В поисках того, как реализовать его просто и непринужденно, вы обязательно наткнетесь на Processing: он примечателен тем, что именно от его IDE была унаследована ArduinoIDE.

Что же такое Processing?

Если кратко - еще один язык программирования, порожденный от Java и позволяющий быстро создавать программы построения изображений и анимации, а также делать все это интерактивным. При этом Arduino как раз и может стать тем самым элементом, который эту интерактивность обеспечивает.

Скачав, распаковав и запустив последнюю версию PDE (Processing Development Evironment), вы найдете сходство с ArduinoIDE настоль очевидным, что руки сами начнут автоматически набирать "setup":


Здесь программы тоже называются скетчами. Однократно выполняемая часть оформляется в setup, повторяемая циклически - в draw (аналог loop). Меню Sketch | Run вызывает компиляцию скетча в полноценное Java-приложение и его запуск в отдельном окне, куда оно старательно отображает свою картинку. После окончательной отладки можно нажать Export (соответствует пиктограмме Upload для ArduinoIDE) - и тогда создается html-код страницы с java-апплетом, готовый к размещению в www.


Для быстрого ознакомления с различиями Processing и Wiring создана вот эта страничка. По большому счету, все сводится к отличиям C++ от Java, которые обычно подробно описываются в любом учебнике по Java.

Вернемся к Arduino, точнее к его библиотеке Firmata. Она берет на себя "черную работу" по поддержке механизма обмена между скетчем и программой на "большом брате". Разработчику остается только продумать логику работы этого небольшого АПК, определить поведение нужных callback-функций и вставить вызовы библиотеки в setup и loop. Если вы уже пробовали реализовывать интерактив средствами Serial - попробуйте как-нибудь с Firmata - должно получиться проще, лучше и быстрее.

Именно с помощью Firmata можно "прикрутить" Arduino к Processing-у, для этого:
  • скачайте библиотеку для Processing-а и распакуйте ее в папку libraries/arduino в каталоге для скетчей Processing (создайте каталоги при необходимости) - но имейте ввиду, что в версии 1.1 она уже включена в состав дистрибутива, так что скорее всего можно обойтись без этого шага;
  • запустите ArduinoIDE, откройте скетч из Examples | Firmata | StandardFirmata, откомпилируйте и загрузите его в свою Arduino-совместимую плату (и не отключайте её после этого);
  • запустите Processing, откройте пример из папки libraries/arduino/examples/arduio_output через File | Open;
  • запустите скетч на выполнение.
Если в ответ на попытку компиляции Processing ругается на невозможность найти cc.arduino.*, сходите в меню Sketch | Add file..., добавьте файл libraries/arduino/library/Arduino.jar и повторите попытку компиляции.

Результатом работы скетча является вот такое нехитрое окно состояния цифровых выходов: 



Каждый кубик обозначает один цифровой выход от 13 до 0. Щелкая по нему, мы переключаем состояние межу HIGH и LOW. Как минимум, к выходу 13 подключен светодиод L, так что изменение его состояния можно наблюдать вполне визуально.

Вот как это выглядит внутри скетча Processing:

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;

color off = color(4, 79, 111);
color on = color(84, 145, 158);

int[] values = { Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW };

void setup() {
  size(470, 200);
  
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  
  for (int i = 0; i <= 13; i++)
    arduino.pinMode(i, Arduino.OUTPUT);
}

void draw() {
  background(off);
  stroke(on);
  
  for (int i = 0; i <= 13; i++) {
    if (values[i] == Arduino.HIGH)
      fill(on);
    else
      fill(off);
      
    rect(420 - i * 30, 30, 20, 20);
  }
}

void mousePressed()
{
  int pin = (450 - mouseX) / 30;
  
  if (values[pin] == Arduino.LOW) {
    arduino.digitalWrite(pin, Arduino.HIGH);
    values[pin] = Arduino.HIGH;
  } else {
    arduino.digitalWrite(pin, Arduino.LOW);
    values[pin] = Arduino.LOW;
  }
}


Сначала в функции setup() происходит создание объекта Arduino, через вызов его конструктора:

  arduino = new Arduino(this, Arduino.list()[0], 57600);

Первым аргументом в списке идет this - так уж принято. Далее указывается порт, к которому подключен Arduino, например /dev/ttyUSB0 для Linux. Для его получения существует функция Arduino.list() - статическая (можно использовать без привязки к экземпляру объекта), возвращающая список плат. Подключение будет выполнено к первой из этого списка (элемент с номером 0).  Последним идет скорость порта, для этой версии Firmata она фиксирована и составляет 57600.

После создания объекта можно вызывать привычные операторы Wiring, не забывая предварять их именем объекта arduino (например - перевод всех цифровых пинов в режим вывода):

  for (int i = 0; i <= 13; i++)
    arduino.pinMode(i, Arduino.OUTPUT);

Циклически вызываемый метод draw() занимается перерисовкой кубиков по текущим значениям выходов, хранимых в промежуточном массиве values (инициализирован в начале значениями константы Arduino.LOW).

И, наконец, обработчик событий от мыши mousePressed() - вычисляет по координатам клика нужный кубик, инвертирует соответствующую ему ячейку массива values и вызывает digitalWrite, чтобы актуализировать состояние выхода нашего Arduino.

Попробуем наваять скетч самостоятельно, например - пусть при помощи потенциометра будет регулироваться насыщенность красным. Схема подключения переменного сопротивления до безобразия тривиальна:





А вот скетч Processing:

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;

void setup() {
  size(200, 200);  
  arduino = new Arduino(this, Arduino.list()[0], 57600);
}

void draw() {
  background(255 * arduino.analogRead(0) / 1024,0,0);
}

Всю отрисовку выполняет функция background(value1, value2, value3) - где valueN соответствуют составляющим красного, зеленого и синего. Зная, что analogRead вернет число от 0 до 1023, нехитрой операцией масштабируем этот диапазон в 0..255.

Как видите - запредельно просто, почти как с ArduinoIDE. Наиболее выдающиеся скетчи Processing можно посмотреть на openprocessing.org. Все они, конечно же, доступны под лицензией CC-SA.

 В статье использованы материалы из Playground:
 
http://www.arduino.cc/playground/Interfacing/Processing

05.06.2010

МБС-9

На днях получил выигранный на интернет-аукционе микроскоп МБС-9. Экземпляр, конечно, "видавший виды", но все равно - если брать в полной комплектации, например вот такой:



...то можно выложить до 15000 рублей.

Я некоторое время пользовался таким микроскопом на работе, поэтому представлял себе довольно четко - биологический микроскоп для пайки не подходит, нужно большое поле обзора и обязательно - два глаза (потому что держать один из них постоянно зажмуренным - это как минимум преждевременные морщины  на лице ;) Реального стереоскопического эффекта, правда, тут нет - но те микроскопы, которые это умеют, стоят уже в два раза дороже. А вот бывших в употреблении МБС-9 существует великое множество, поэтому достать подешевле вполне приличный вариант представляется весьма реальным. Зато по сравнению с ним головолупа кажется примитивной палкой-копалкой.

Мне досталась самая ценная часть - сама оптическая головка, на которой написано ОГМЭ-П2, с двумя окулярами 8х, без надглазников и подставки.



Подставка отдельно стоит 1500..1700 рублей, но при сильном желании ее можно соорудить самостоятельно. Мой рецепт:


  1. Доска деревянная, толщина - 18 мм, ширина - 130 мм, глубина - 25 мм;
  2. Шпилька M14 длиной 30 см;
  3. Две гайки M14;
  4. Две шайбы M14;
  5. Четыре ножки высотой 20 мм (ножке достаточно просто быть толще, чем гайка + шайба). 




Шпилька должна быть не более 14 мм в диаметре, иначе не войдет в отверстие для крепления головки. Часто в продаже можно встретить штангу с резьбой длиной 1 метр - самый оптимальный вариант, ножовкой по металлу отрезаем нужную длину.

В деревянном основании сверлим отверстие - у меня в арсенале нашлось сверло фоснера 15 мм, которое легко крепится в любую домашнюю дрель:



После его применения получается аккуратное отверстие (если только не надавливать в самом конце сверления - на противоположной стороне может получиться слом).

Ножки можно закрепить произвольным образом - да хоть и на шуруп, после чего законтрогаить две гайки M14 на вставленной в отверстие шпильке. Получается приблизительно так:



Даже по нашим провинциальным ценам, материалов набегает не более, чем на 350 рублей.