28.01.2010

Сторожевая Собака

Недавно в руки мои попало вот такое чудо:


Позвольте представить: разработка ООО "ЛисКо", сторожевой таймер для платежного терминала LDog.


Думаю, всем приходилось сталкиваться с платежными терминалами. Достаточно оглянуться по сторонам - и обязательно где-то в метро, переходе, магазине или даже просто на улице отыщется услужливый железный истукан с большим цветным тачскрином. Двумя легкими движениями пальцев можно изобразить платеж любому оператору связи или перевести деньги Яндекс.Кошелек. Но готовьтесь к поборам - подлый автомат никогда не даст сдачи и не раскроет точной суммы комиссии, а в службе поддержки очень тяжело получить внятные ответы на простые вопросы типа "а сколько же на самом деле комиссия?". Впрочем, оставим моральные аспекты проблемы на доработку государственной Думе: пока нет законов в этой области, произвол будет продолжаться. Нас же с вами интересуют вопросы технического характера.

Платежный терминал, как и любой компьютер, может "зависать", доставляя финансовые неприятности хозяину. Основная задача LDog - уметь сбрасывать компьютер по команде или по истечению интервала отклика основной программы. Также, платежный терминал часто имеет выход в сеть через GPRS-модем, который тоже может зависнуть: LDog умеет и его перегружать, ненадолго разрывая цепь питания. Наконец, он оснащен двумя датчиками вскрытия, которые реагируют на разрыв цепи. Конечно, программное обеспечение, работающее на "большом брате" умеет много другого, типа отслеживания баланса на счету контракта GPRS-модема но это уже не особенно интересно.


Плавно подвожу к главному. Внутри LDog притаилась... классическая начинка Arduino! ATmega8-16AU тактируется от кварца 8МГц, а его порт USART подключен к COM-порту через драйвер RS232 от Analog Devices AD232 (тоже самое, что и популярная микросхема MAX232). Есть и гребенка ISP, только классическая 10-ти контактная.

Теперь немного об отличиях. Разумеется, все пины наружу не выведены. Мы ограничены двумя входами, двумя выходами и еще тремя линиями из разъема ISP (MOSI, MISO, SCK). Но зато выходы имеют оптронные развязки, а на одной из них висит MOSFET - специальный полевой транзистор, пропускающий через себя линию питания модема - 12 Вольт. Кстати, питание подается на плату через разъем питания IDE HDD, но есть и место для L7805, в качестве альтернативы.


Лучше один раз увидеть, чем 0x100 раз услышать. Именно поэтому я  нарисовал принципиальную схему:


(кликабельно). Может пригодиться тем, кто занимается постгарантийным ремонтом изделия собственными силами, но учтите: я мог запросто ошибиться. Если найдете ляп - умоляю, черкните комментарий.

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





А как насчет попрбовать использовать LDog с ArduinoIDE?

Для начала отредактируем файл boards.txt и добавим секцию LDog, созданную на основе Arduino NG or older w/ Atmega8. Меняем тактовую частоту и скорость, на которой bootloader принимает скетч. Измените 16000000L на 8000000L, а 19200 на 9600 или скачайте готовый файл. Не забудьте перезапустить ArduinoIDE, чтобы изменения вступили в силу.

Если содержимое памяти ATmega8 надо сохранить, самое время сделать это (вариант для программатора usbasp):

avrdude -C avrdude.conf -c usbasp -p m8 -U flash:r:ldog.hex:i



Для справки, значения fuses: LFUSE=0xff, HFUSE=0xd9.

Вот теперь можно смело зашивать bootloader через ArduinoIDE. После успешного завершения этой операции мы получили ArduinoCompatible-плату, и можем загружать в нее скетчи.

Итак, с точки зрения Arduino, у нас есть:
  • 3 универсальных цифровых пина: digital 11,12,13;
  • выход digital8 со светодиодом. Обратите внимание, что он притянут к VCC -  "зажигайте" его по команде digitalWrite(8, LOW). Одно непринужденное движение паяльника и мы лишеамся светодиода, но получаем еще один универсальный пин
  • 2 входа: digital2 и digital3;
  • выход digital14 с оптронной развязкой;
  • выход digital15 c оптронной развязкой и хексфетом.
Для проверки загрузите пример Digital|Blink и исправьте в самом начале значение ledPin c 13 на 8. Через 10 секунд после загрузки светодиод  должен начать мигать.

И поскольку некоторое количество пинов утратило свою универсальность, можно заготовить скетч-шаблон для LDog:

void setup() {
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
}

Подведем краткие итоги: устройство создано в России, в 2006 году, является закрытой коммерческой разработкой. Приобрести его можно и по сей день, за 1000 рублей (правда, сразу партией в 10 штук). Совместимость с Arduino кажется забавным и одновременно практичным фактом, позволяющим превратить LDog в то устройство, которое подскажет ваша фантазия (в пределах 8К flash, разумеется ;)

В статье использованы материалы сайтов liscom.ru, watchdogs.ru и фото из статьи журнала "Новости Электроники".

26.01.2010

Нанопаяльник

Недавно у меня случилось горе неудача: мой паяльник с регулировкой температуры CT-Brand CT-95A приказал долго жить: иными словами, прекратил регулировать температуру, постоянно нагреваясь, раскаляясь и обжигая мою руку.

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

Таким образом, я плавно подошел к мысли о паяльной станции. Воображение рисовало суперагрегат с парой паяльников и термопинцетом для выпайки, вакуумом и дымоулавливателем. Однако, довольно скоро я понял, что бедному студенту это не по карману.
Мне предстояло выбирать между гирляндой паяльников разного калибра и простой паяльной станцией. Победила идея взять паяльную станцию для безсвинцовой пайки: не то, чтобы я собирался действительно паять без свинца, просто сейчас их навалом, а верхний предел температуры нагрева может регулироваться до 430...490 C, что иногда крайне удобно.

На работе у нас стоит Weller WD2, двухканальный:



Он оснащен термопинцетом, которым не только выпаивают, но и паяют:



У этого инструмента есть замечательная особенность: при укладывании на подставочку, в которую встроен магнитик, срабатывает размещенный в корпусе геркон, после чего нагрев сразу прекращается. Разогрев до прежней температуры происходит за 5-7 секунд, что зверски удобно. Как заметил мой хороший знакомый: "Weller - Мерседес в мире паяльников".

Плохая новость состоит в том, что стоит это счастье около 200 Евро - но только блок питания, без паяльника! Загрустив, я решил поискать что-то подешевле.

И это оказалось самым мучительным занятием.

Есть много разных CT, Luckey, CT-Brand. Чуть выделяется Solomon, но станция этой фирмы у нас на работе тоже есть, и с Weller ее не сравнить. Потом я перебрал Quick, АйОй ;) и прочие шедевры китайской инженерной мысли, не уставая удивляться, как они местами совершенно беззастенчиво копируют дизайн друг у друга. Цена на более-менее приемлемую по качеству и  функционалу станцию была около 4000 рублей, но сколько она прослужит? Вопрос не в том, насколько красиво она снаружи выглядит, а во внутренностях, не говоря уже об удобстве и надежности. А как это проверить в магазине? Я живу хоть и в провинциальном, но достаточно большом городе, где есть возможность "пощупать живьем", однако разбирать паяльную станци уж точно ни один продавец не позволит. Следовательно, снова приходим к вопросу о чем-то качественном: немецкого или японского изготовления.

В отчаянье я посетил сайт Ersa и покрутил картинки от их последней модели массового потребления I-Con Nano. Посмаковав подробности, я практически тут же забыл про нее - это было тоже дороговато: она стоила столько же, сколько и Weller WD1, правда за эти деньги к ней прилагался паяльник.

Вскоре, при очередном посещении одного из своих дилеров, я в завершение беседы обмолвился, что мне нужен хороший инструмент для пайки. В ответ я услышал стандартный вопрос "а какая конкретно модель вам нужна?". И тут я вспомнил про перламутровые пуговицы Nano - все равно на сайте  Ersa.ru было написано, что эта модель появится в продаже только в феврале 2010 года. Но... неким волшебным образом она оказалась на складе и была немедленно вручена мне на просмотр. Опуская подрбности, скажу - я взял только третью, первые две пришлось забраковать - виной треснутое пластиковое прижимное колечко паяльника i-tool nano (а вы думали, что раз вещь сделана в Германии, то она не может дойти до России с дефектом? увы, это горькая правда!). В итоге, я стал счастливым обладателем Lötstation №441:



При весе всего в килограмм, эта станция кажется совсем крохотной (видимо этим объясняется nano в названии), но умеет "разгоняться" до максимальной температуры на 9 секунд, при максимальном нагреве 450 C и мощности 68 Вт.

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



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

Паяльник имеет шнур около 90 см. длиной, который прикреплен разъемом в области днища блока питания станции (и, следовательно, не предназначен для оперативной замены). Сетевой шнур вообще несъемный.



Сам паяльник напоминает авторучку, длиной около 16 см, довольно легкий. Чуть выпуклой анатомической формы, он идеально сбалансирован и прочно сидит в руке, как хорошее оружие или фирменное письменное перо. Могу сказать одно - при укладывании его на подставку испытываешь легкое сожаление.



Жало в комплекте - это 0102CDLF16, имеет форму "лопатка" и выглядит приблизительно так (на чертеже размеры 0102CDLF20, которое шире на 0,4 мм):



Любое другое жало - под заказ. Стоит 25 USD, заказ обрабатывается 2-3 недели. Не сочувствуйте, я знал, на что шел ;) Правда, в каталоге есть и конусы, и "волна", и "клюв"... глаза просто разбегаются.



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

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



145 х 80 х 103 мм.

Ну а вот так устроено днище - вверху сетевой провод, внизу - провод паяльника.



Теперь о функциях. Кроме вспоминания температуры нагрева после включения, есть калибровка, а также установка времени режима ожидания (0-60 минут). Если станция обнаруживает в течение заданного диапазона отсутствие значимых потерь энергии, она дает остыть паяльнику до 250 C и поддерживает уже эту температуру. Для выхода надо либо охладить жало на 5 градусов, либо нажать на одну из кнопок. Герконовый контакт термопинцета Weller ведет себя по-другому: взял в руку, а он уже и нагревается; пока несешь к месту пайки - уже и нагрелся. Процесс входа в ожидание делает Nano нечувствительным к охлаждению: немедленно выйти из него можно только нажав на кнопку (имеется ввиду тот интервал времени, пока он остывает до 250 С - это секунд 30).

Еще для этого паяльника есть софт. Да, вы не ослышались! Его можно скачать на странице ersa.com/nano, общается он с паяльником через microSD-карту:



Как видите, можно задать не только время входа в режим ожидания, но и температуру остывания, а также время до отключения (по умолчанию, после входа в режим ожидания, через 10 минут неиспользования паяльник и вовсе выключится). Еще можно задать режим работы - по умолчанию температура изменяется свободно, но можно определить три фиксированных значения, которые быстро переключаются кнопками на лицевой панели. В дополнении можно еще и keylock включить - тогда кнопками вообще ничего нельзя будет поменять (защита от шутниковвредителей на производстве). Также можно выставить предельную мощность нагрева в виде энергетического уровня от 1 до 3: от него зависит скорость нагрева, а также ее точность. Если запаиваемые элементы чувствительны к перегреву, надо установить в единицу.

После выставления всех параметров нажимаете Write, они записываются в корень SD-карты в виде файла NANO.CFG. Карту с файлом надо вставить в станцию и подождать, пока она будет прочитана. Дальше можно ее смело изымать - параметры сохранятся в энергонезависимой памяти I-Con Nano.

Сколько она мне прослужит - покажет время, но надеюсь больше гарантийного срока, который на нее определен аж в целых 12 месяцев ;)

25.01.2010

Уроки Wiring (3)

Урок 3. Из чего сделан скетч?

(продолжение, начало см. Урок 2. ArduinoIDE)

В предыдущем уроке мы даже толком не разобрали текст нашего скетча "Blink". Присмотримся к нему повнимательнее:

/*
  Blink
 
 Turns on an LED on for one second, then off for one second, repeatedly.
 
 The circuit:
 * LED connected from digital pin 13 to ground.
 
 * Note: On most Arduino boards, there is already an LED on the board
 connected to pin 13, so you don't need any extra components for this example.
 
 
 Created 1 June 2005
 By David Cuartielles
 
 http://arduino.cc/en/Tutorial/Blink
 
 based on an orginal by H. Barragan for the Wiring i/o board
 
 */

int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts

void setup()   {                
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);     
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()                     
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}

Поспешу оговориться: если вы уже программировали на C/С++, разобраться не составит труда. Остальным придется потрудиться, но помните: язык создавался с оглядкой на дизайнеров (людей гуманитарного склада ума), что вынудило авторов сто раз думать о простоте и понятности, прежде чем вводить новый оператор в синтаксис.

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

Пока что запомните: если в строке встретилось два слеша //, то они, вместе со всеми символы правее, до конца этой строки компилятору глубоко безразличны. Если в комментарий надо превратить сразу несколько строк, то его начинают с  /* и заканчивают */.   Таким образом, вышеприведенный код для компилятора будет значительно проще и короче:

int ledPin =  13;

void setup()   {                
  pinMode(ledPin, OUTPUT);     
}

void loop()                     
{
  digitalWrite(ledPin, HIGH);   
  delay(1000);                  
  digitalWrite(ledPin, LOW);   
  delay(1000);                  
}


Кстати, комментирование применяют и для отладки, чтобы временно "выключить" фрагмент скетча. В ArduinoIDE для этого есть горячая клавиша Ctrl+/, которая позволяет быстро закомментировать или раскомментировать выделенный фрагмент текста.

Итак, первая строка скетча:

int ledPin =  13;

Это объявление переменной с именем ledPin. Компилятор забронирует в памяти микроконтроллера пару байт для хранения целого числа, позволяя вам начиная с этого места обращаться к нему по имени 'ledPin'. Заодно он присвоит ему начальное значение 13.

Следующая конструкция обязательно должна присутствовать в любом сектче:

void setup() {
}

Забегая вперед - это определение функции. Однако, функция setup особенная: она исполняется один раз после старта скетча (по включению питания Arduino или после сброса). Туда можно смело вынести все действия, которые должны выполниться один раз, например - настройка скорости последовательного порта или выбор режима работы универсальных пинов (на ввод или на вывод). Все эти действия должны быть вписаны между открывающей и закрывающей фигурными скобками { }.

И, кстати, сейчас там только одна строчка:

pinMode(ledPin, OUTPUT);

Оператор языка Wiring 'pinMode' устанавливает для одного из указанных пинов режим ввода или вывода. В данном случае номер пина берется из переменной ledPin (напоминаю, что там было число 13, а следовательно - речь про digital13, к которому подключен тестовый светодиод L), режим задается константой OUTPUT, что логически подготавливает нас к тому, что через этот пин будет что-то выводиться.

Если понадобится сделать из тринадцатого пина вход, используйте константу INPUT. Но по умолчанию все цифровые пины после старта скетча и так уже находятся в режиме ввода. И еще одно важное замечание: режим вход/выход можно переключать в процессе работы скетча, сколько угодно раз! Главное, чтобы схема была для этого предназначена.

void loop() {
}

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

Разберем, из чего состоит тело loop:

digitalWrite(ledPin, HIGH);

Это еще один оператор языка Wiring, который переключает состояние пина в одно из двух возможных. HIGH соответствует логической единице (она же - напряжение питания микроконтроллера, для Duemilanova это +5 Вольт), LOW - логическому нулю, это меньше +0,5 В.

Светодиод L подключен в Arduino следующим образом:



Анатомию этой схемы мы разберем позже, пока стоит запомнить, что если на пине Ардуино установить напряжение 5В, светодиод начнет светиться - как говорят, он "откроется" и через него потечет ток. Если же на этом входе будет меньше 1,5В, то этого напряжения не хватит для его открывания, и он обидится светиться не будет.

Итак, оператор digitalWrite(ledPin, HIGH) формирует +5В на выходе 13 и зажигает таким образом светодиод L.

delay(1000);

Эта команда delay заставляет микроконтроллер остановиться и ничего не делать целую 1000 миллисекунд - безумно много! Кстати, 1000 мс = 1 с ;)

digitalWrite(ledPin, LOW);

Этой командой светодиод отключается (см. выше).
Дальше снова происходит задержка в одну секунду.
А потом... тело loop заканчивается, но поскольку он вызывается беспрерывно, то управление снова переходит на начало - исполняется digitalWrite(ledPin, HIGH), и так далее.

Визуально можно представить так:



Если бы у нас под руками был специальный прибор осциллограф, то подключив его к digital13 мы увидели бы примерно такую картину:



Говоря строгим языком, мы добились на этом выходе колебаний с частотой 0,5 Гц ( 1 Гц  соответствует одному полному колебанию в секунду). Меняя две величины задержки в delay, можно добиваться другой частоты мигания, а если они начать менять их отношение, то изменится скважность сигнала (сейчас мы получили то, что обычно называют меандр).

Но чтобы пользоваться Arduino все это знать необязательно. Все мигает, как и задумано, не так ли? ;)

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

В следующем уроке мы подробнее разберем основные конструкции языка Wiring.

21.01.2010

Arduino и Android

Сегодня наткнулся на проект Arduino+Android: www.amarino-toolkit.net.




Состоит из приложения Amarino для Android и библиотеки MeetAndroid, которую надо подключать к скетчу в Arduino. Пока предполагается, что связь будет устанавливаться с ArduinoBT или с обычным Arduino через bluetooth-шилд, поэтому сами понимаете, насколько сужается диапазон применения проекта.

Общий смысл - унификация взаимодействия с подключаемыми к Arduino схемами. В приложении Amarino надо задать события и получаемые от скетча сообщения. В самом скетче надо унаследоваться от класса MeetAndroid ( в свою очередь, он унаследован от класса Print и немного расширяет его функции, работая через Serial ). Дальше пишите callback-функцию опроса устройства и регистрируете ее в экземпляре MeetAndroid. Это дает возможность Amarino асинхронно дергатьопрашивать через Arduino схему и получать данные (в основном, числа). Например:

#include <meetandroid.h>

// you can define your own error function to catch messages
// where not fuction has been attached for

MeetAndroid meetAndroid(error);

void error(uint8_t flag, uint8_t values){
  Serial.print("ERROR: ");
  Serial.print(flag);
}

int onboardLed = 13;

void setup()  
{
  // use the baud rate your bluetooth module is configured to 
  // not all baud rates are working well, i.e. ATMEGA168 works best with 57600
  Serial.begin(57600); 

  // register callback functions, which will be called when an associated event occurs.
  // - the first parameter is the name of your function (see below)
  // - match the second parameter ('A', 'B', 'a', etc...) with the flag on your Android application
  meetAndroid.registerFunction(compass, 'F');  
  pinMode(onboardLed, OUTPUT);
  digitalWrite(onboardLed, HIGH);
}


void loop() 
{
  meetAndroid.receive(); // you need to keep this in your loop() to receive events
}


/*
 * This method is called constantly.
 * Compass events are sent several times a second.
 *
 * note: flag is in this case 'F' and numOfValues is 1 
 * since compass event sends exactly one single int value for heading
 */

void compass(byte flag, byte numOfValues)
{
  // we use getInt(), since we know only data between 0 and 360 will be sent
  int heading = meetAndroid.getInt(); 
  flushLed(heading); // silly, you should have better ideas
}

void flushLed(int time)
{
  digitalWrite(onboardLed, LOW);
  delay(time);
  digitalWrite(onboardLed, HIGH);
}


Здесь определяется функция compass, которая получает от Android целое число и зажигает светодиод L на соответствующее ему число миллисекунд.

Можно также отправлять непрерывные потоки данных - видимо, для построения графиков.

Проект находится в зачаточном состоянии, поддерживает 1.5 и 1.6 версии платформы Android, а вот 2.0 - нет, но она на подходе. Все исходники, естественно, доступны. Думаю, порадует фанов Arduino и Android - я пока что гуглофоном не обзавелся, увы :( А пока - пожелаю ему всяческих успехов!

20.01.2010

Уроки Wiring (2)

Урок 2. ArduinoIDE

(продолжение, начало см. Урок 1. Что внутри Arduino?)

Чтобы программировать, нам потребуется ArduinoIDE. Хорошая новость состоит в том, что она абсолютно бесплатная, с открытым исходным кодом. Отправляемся на страницу http://arduino.cc/en/Main/Software и выбираем самую-самую последнюю версию под нужную операционную систему. На момент написания статьи это была сборка 0017, официально поддерживались Windows, MacOS и Linux, энтузиасты сделали пакеты для OpenSolaris.

Для Windows архив занимает чуть больше 80 Мбайт, зато там есть всё необходиме, в том числе драйвера.

Итак, что делает программист, получая в распоряжение свежехакнутуюустановленную IDE? Первым делом - пишет программу HelloWorld, которая только и делает, что выдает на экран "Hello, world!". Зато, после этого можно расслабиться: две трети дела сделано - осталось всего лишь написать программный продукт, который потрясет мир.

Итак, распаковываем arduino-0017.zip в какую-либо папку (в этом поможет свободный PeaZip). Инсталляция не требуется, поэтому просто запускаем из этой папки arduino.exe (можете набраться храбрости и сделать ярлык на рабочем столе ;).

После запуска мы увидим что-то наподобие этого:



Вверху привычно маячит строка меню, ниже - спартанский тулбар для вызова наиболее частых операций; белое поле - собственно область редактора, где надо писать программу (в терминах Ардуино - "набросок" или sketch). Черное поле - информационный экран для выдачи ругани диагностических сообщений ArduinoIDE.

Пусть в качестве "Hello World" наша Duemilanova помигает своим тестовым светодиодом L. Создатели дистрибутива заботливо разместили необходимый нам скетч в секции примеров, остается только загрузить:



Самое время подключить Arduino к нашему компьютеру с помощью кабеля USB A-B. Если все верно, загорится светодиод PWR, а остальные слегка мигнут. Дотошные могут понажимать на кнопку сброса и посмотреть, как светодиод L вспыхивает при каждом нажатии. Если он будет вспыхивать и без нажатия - не пугайтесь, именно так и происходит, когда в Arduino еще не загружено ни одной рабочей программы.

Единственный момент - надо утрясти вопрос с драйверами. Обычно, после подключения последовательно обнаруживаются два устройства: FT232R USB UART и USB Serial Port:





Устанавливать надо, естественно, оба устройства. В ответ на удивленные возгласы Windows надо послать ее за драйверами в каталог:

arduino-0017\drivers\FTDI USB Drivers

В итоге вы должны добраться до такой страницы:



Если это произошло, то теперь при подключении Arduino в диспетчере устройств будет появляться еще один COM-порт. Если у вас их много, то надо зайти в

Панель управления -> Система -> Оборудование -> Диспетчер устройств

...и поискать USB Serial Port (не отключайте Arduino!). При желании его можно здесь же изменить (Свойства | Port Settings | Advanced Settings):





ОК, номер порта выяснили, теперь возвращаемся обратно в ArduinoIDE и сообщаем ей об этом  через меню Tools | Serial Port:



Затем, чтобы компилятор правильно оттранслировал скетч в исполняемый код, надо установить тип платы и микроконтроллера. Внимательно прочитайте название микроконтроллера на своей плате Ардуино, затем выберите свой вариант в меню Tools | Board:



Если вы на этом шаге перепутаете тип микроконтроллера, то скетч просто не загрузится в Arduino после компиляции. А вот если вы спутаете тип платы, возможен легкий курьез - скетч будет работать либо в два раза быстрее, либо в два раза медленнее, чем задумано ;) Для простоты, будем предполагать, что у нас Duemilanova с ATmega328, так как именно этот вариант наиболее распространен. Если у вас на чипе написано ATmega168-20PU или ATmega8-16PU, можете купить ATmega328P на замену (никаких переделок в схеме - вынули старый, поставили новый). Таким образом, памяти под скетч станет гораздо больше.

Все готово, теперь выбираем меню Upload to I/O Board или нажимаем кнопку Ctrl+U:





Ждем. Произойдет следующее:
  • скетч будет скомпилирован (сначала преобразован из Wiring в язык C, потом в объектный код и наконец в загрузочный файл);
  • ArduinoIDE сбросит плату, что приведет к остановке работающего в настоящий момент скетча и старту специальной микропрограммы-bootloader-а;
  • Загрузочный файл будет передан в Arduino (мигают светодиоды L, Rx - чуть ярче, Tx - чуть слабее);
  • Память Arduino будет прочитана и произойдет сравнение с исходным файлом - верификация (мигают светодиоды L, Rx - чуть слабее, Tx - чуть ярче);
  • Bootloader нехотя передаст управление скетчу.
Итак, если все верно, светодиод L начнет мигать, приветствуя мир и сообщая о том, что наш первый скетч заработал:




Что дальше? В следующем уроке мы разберем скетч "Blink" более подробно.