24.11.2013

ARCAdaptor или Игра в Продукт

Сегодня будет не совсем обычная статья - уважаемый znoxx поделится опытом о том, как проделать путь от макета железки до полноценного коммерческого продукта. Быть может, он найдет единомышленников, или, что будет еще круче, вдохновит кого-то по его примеру поделиться с общественностью своей разработкой. Приятного чтения! -- ведущий блога MK90 - id. 



Наверное, каждый, кто увлекается разработкой различных железок на микроконтроллерах, задавался подобными вопросами:
  • А что дальше? 
  • Как сделать из прототипа законченный продукт?
  • Смогут ли им пользоваться другие люди?
  • Зачем мне вообще всё это?

25.07.2013

Freeduino One c microUSB

Однажды, в комментах мне попеняли на "любовь к большим разъемам USB". В другой раз услышал в личной беседе пожелание использовать microUSB, потому что "к нему проще найти кабель".

"Ну что же..." - подумал я, и:


Старшие товарищи тут же меня обсмеяли, заметив, что microUSB - крайне ненадежный и хлипкий разъем, который обязательно сломается или сгорит. То ли дело, например, такой:


Но если серьезно, меня сильно порадовало высвободившееся на плате место, это дает определенный простор для творчества (в прямом и переносном смысле).

07.06.2013

TV-out для Arduino

Если вы когда-нибудь почувствуете, что вашему Arduino-проекту стало тесно на алфавитно-цифровом дисплее 1602, обязательно обратите внимание на проект TellyMate Shield. Он позволяет выводить ту же алфавитно-цифровую информацию на обычный телевизор, через видео-вход.

При определенном везении можно заполучить весьма внушительных размеров дисплей (если телевизор имеет прилично дюймов в диагонали), работающий в режиме телетайпа  38 x 25 знакомест. Впрочем, бросив первый взгляд на схему, ловишь себя на мысли о розыгрыше. В самом деле:


Обычный ATmega8 на тактовой частоте 16 МГц формирует два компонента видеосигнала, которые смешиваются нехитрой схемой из двух резисторов и двух диодов. Группой переключателей S1 устанавливаются режимы работы; согласующий резистор 75 Ом подключается через перемычку и добавлен, скорее, для универсальности (думаю, в большинстве случаев не понадобится).



Arduino выводит информацию для отображения через последовательный порт - пины RX/TX. Если вас смущает, что по ним же происходит загузка скетча и во время этого процесса на экране появляется некая "ерунда", можно уйти на любой пин с помощью библиотеки SoftwareSerial. Поддерживаются разные скорости, а также есть возможность автоопределения. Простейший скетч выглядит так:


        Serial.begin(57600); //57k6 baud
        Serial.println("Hello, world!");


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


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


Кроме вывода обычных символов, поддерживаются так называемые ESCAPE-последовательности, которые управляют курсором, удваивавают высоту и/или ширину символов и даже переключают банки шрифтов и переопределяют символы (что, впрочем, возможно только на ATmega328P, где памяти гораздо больше, чем у ATmega8). Таким же образом можно получить версию прошивки и прочую диагностическую информацию.

Чем-то все это напоминает LoL-Shield, особенно приложениями - взгляните на список доступных .ino. Здесь найдется не только классика Life и Snake, но и более изощренные - Maze и даже простейший "графический редактор"!

Поскольку все материалы доступны и открыты для доработки, мы решили немного поэкспериментировать и создать на базе этого шилда русифицированный вариант. Имя "TellyMate", подобно Arduino, является торговой маркой - поэтому пришлось назвать наш вариант Freeduino Teleсhat:


Все детали - PTH, поскольку шилд задумывался изначально в формате кита для самостоятельной сборки - и что может быть лучше, чем собрать всё самостоятельно? ;) Пины RX/TX имеют перемычки под пайку с обратной стороны платы, так что при желании их можно перерезать и подпаять к любым другим пинам. Аналогичным способом  отключается и кнопка сброса - если не хотите, чтобы МК шилда сбрасывался синхронно со  скетчем Arduino.

Краткое руководство по сборке шилда:


Шутка, конечно ;) просто там действительно все элементарно. На howtomakekit.blogspot.ru, как всегда, выложена подробная пошаговая инструкция.

Русифицированный шрифт мы разместили точно таким же способом, что и автор - в виде ссылки на документ в GDocs, копию которого при необходимости можно сохранить у себя. В открытом документе надо зайти на последнюю закладку, генерирующую hex, и скопировать ее содержимое в файл  fontbank0.c, подменив его в исходниках (можно скачать со страницы проекта). После компиляции получите прошивку c поддержкой кодовой страницы 866. Именно она и зашивается в ATmega8, входящие в комплект наборов Freeduino TeleChat. 

Для вывода русского текста потребуется еще кое-что сделать. Как известно, ArduinoIDE хранит все символы в кодировке UTF-8, и для нормальной работы потребуется их транслировать в кодировку 866. Делать это в оригинальной прошивке нам показалось святотатством - авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:

byte c1 = 0;

void tele_print_char(char cd) {
  byte c = cd;
  if (  c >= 0x80) { // UTF-8 handling
    if (!c1) {
      c1 = c;
    } else {
      if (c1 == 0xd0) { 
       if (c == 0x81) Serial.print(char(0xf0)); // Ё
        else Serial.print( (char) (c - 0x10));
      }
      if (c1 == 0xd1) {
       if (c == 0x91) Serial.print(char(0xf1)); // ё
        else Serial.print( (char) (c + 0x60));
      }
      c1 = 0;
    }
  } else Serial.print(cd);
} 

void tele_print_str(char *s) {
  for(int i=0;i<strlen(s);i++) tele_print_char(s[i]);
}

void setup()
{
  char letter[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
  Serial.begin( 57600 ) ;
  Serial.println( "Hello World!" ) ;
  tele_print_str( "Привет, мир!\n\r" ) ;
  tele_print_str( letter );
}

void loop()
{
    // do nothing!
}


Купить шилд в собранном виде или в виде комплекта деталей можно здесь.

Для тех, кто любит почитать оффлайн - про TellyMate упоминается в книге У. Соммера "Программирование микроконтроллерных плат Arduino/Freeduino".

07.05.2013

Web-термометр

"Погодная станция своими руками" - вот как можно было бы назвать статью, но я решил пока просто рассказать о том, как соорудить web-термометр, подключить его к домашней LAN  и наблюдать показания через браузер ;)

Для этого нам потребуется Arduino-совместимая плата, поддержка Ethernet и несколько температурных датчиков.


17.04.2013

ArduinoIDE 1.0.4

Новая ArduinoIDE 1.0.4 вышла 11.03.2013, и почти весь ее смысл - исправление ошибок.

Лично мне видится три главных момента:

  • Добавлена новая библиотека GSM, для работы с Arduino GSM Shield. С ее помощью можно не только передавать данные с использованием конструкции Client/Server по аналогии с Ethernet, но и отправлять/получать SMS-сообщения, а также голосовые вызовы;
  • Все драйверы собраны в один пакет, с цифровой подписью для Windows 8. По идее, это упрощает процесс установки, избавляя вас от лишних вопросов и подозрений со стороны операционной системы;
  • Официально исправлены накопившиеся (видимо, за все время) ошибки в бутлоадере Mega2560. Ошибки это были знаменитые, ко многим давно существовали патчи - взять, например, ошибку с незагрузкой скетча, в котором встречается комбинация "!!!". Разумеется, аналогичные изменения войдут и в бутлоадер, прошитый во Freeduino Mega2560.
Впереди - слияние ветки 1.5.x и 1.0.x, но когда именно оно произойдет, пока сказать трудно...