Показаны сообщения с ярлыком arduino. Показать все сообщения
Показаны сообщения с ярлыком arduino. Показать все сообщения

2009-03-12

NTP для Arduino

Недавно наткнулся на упоминание о протоколе SNTP в контексте его использования для Arduino - проект аналоговых часов 3MeterClock.

В описании говорится, что часы используют для получения времени Simple NTP. Сначала я прочел это как SNMP, затем SMTP. Потом прочел по буквам и понял, что требуется man, а именно: как поднять сервер SNTP, потому что ну очень хочется написать скетч для Arduino для синхронизации по сети.

Из RFC2030 выяснилось, что никакого отдельного сервера SNTP не надо. Для NTP или SNTP сервера клиенты NTP и SNTP неразличимы, также как и для NTP или SNTP клиента неразличимы NTP и SNTP сервера. Алилуйя!

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

Каково же было мое удивление, когда в исходниках все того же 3MeterClock-а я обнаружил... обращение к порту 13! Опять внимательно покопавшись в RFC, пришел к выводу, что у Arduino есть как минимум ТРИ разных варианта получения информации о времени по сети:
  1. SNTP/NTP - при помощи UDP по порту 123. Клиенту надо послать пакет запроса, в ответ сервер его заполнит различными временными метками, и, если клиент озаботился засечь время отсылки запроса, можно относительно просто получить время с учетом RTT (RFC2030, RFC1305). Время в метке NTP отсчитывается в секундах с 01.01.1900 (еще есть fraction part в 1/65535-х долях секунды, но такая точность лично мне пока не нужна).
  2. Time protocol - при помощи TCP или UDP на порт 37. Клиенту надо послать пустой пакет, в ответ вернется 32-битное время, формат тот же (RFC868).
  3. DayTime protocol - при помощи TCP или UDP на порт 13. Клиенту надо послать также пустой пакет, но в ответ вернется дата и время в виде ASCII-строки (RFC867).
Забавно, но уже после копания в RFC нашел это же в тексте книги К. Джамса, К. Коуп. Программирование для Internet в среде Windows, которую издательство Питер-пресс опубликовало на своем сайте.

Получается, реально в 3MeterClock используется вовсе не SNTP, а DayTime. Логично, ведь не нужно корпеть над переводом мегачисла секунд, натикавших с 01.01.1900, в текстовую дату и время. Одна беда: стандарт протокола не заставляет строго форматировать возвращаемую строку. Неудивительно, поскольку протокол предназначен в основном для дебаговых целей, в отличие от NTP/SNTP.

То есть, можно увидеть как Tuesday, February 22, 1982 17:37:43-PST, так и 02 FEB 82 07:59:01 PST. Ясно дело, что если "заточиться" под определенный сервер, то будет вам счастье (однозначный парсинг текстовой строки). Вот авторы и "прибили гвоздем" свой sketch к серверу time.nist.gov, который отвечает 54901 09-03-11 10:44:51 50 0 0 831.6 UTC(NIST).

Следовательно, авторы проекта немного схалявили, что вполне простительно :) Однако, можно было бы не путать DayTime и SNTP, вводя читателей в заблуждение. Впрочем, пытливый читатель все равно разберется :)

Мысль про SNTP изначально правильная, потому что шансов получить время по NTP гораздо больше, чем через Time или DayTime. И даже если заранее неизвестен сервер времени, то можно попробовать спросить спросить время в режиме anycast (если не страшно, что вас обманут). Однако, как же быть с вычислениями?

Для начала, надо преобразовать время NTP в эпоху UNIX, т.е. получить число секунд, натикавших не с 01.01.1900, а с 01.01.1970. По счастью, эта разница уже подсчитана: надо вычесть из NTP 2208988800UL. Во многих случаях, одного этого уже достаточно, чтобы Arduino мог правильно общаться с внешним миром. Но что, если хочется немного больше - например, поддерживать время в МК или индицировать его на дисплее?...

Была бы под руками <time.h>, можно было бы ей воспользоваться. Но, увы, её нет среди библиотек avr, и придется обратиться к GNUтым исходникам glibc. Выдирается с мясом процедура __offtime, выносится пара структур и... готово:

2009-02-27

Realnet и Arduino

Вчера сидел дома, ждал монтажников из Realnet, чтобы они вернули сигнал в мой сетевой кабель (неожиданно пропавший 21.02.2009 в 15:51 MSK).

Для демонстративного тестирования сигнала в кабеле я использовал Arduino+Ethernet Shield, чем полностью поразил воображение одного из болтливых монтажников (цитирвал мне Марка Аврелия).

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

2009-01-15

HTTP для Arduino

В середине рабочего дня решил попробовать "в деле" Ethernet Shield:





Написал несложный sketch и предложил пообщаться с ним через браузер:



Общественность восприняла с интересом ;) Более подробно - в моем блоге mk90.blogspot.com.

2009-01-11

Посылка из Smart Projects

Получил на праздниках посылку из SmartProjects (был очень удивлен, что итальянский интернет-магазин отправил мне посылку не из Италии, а из Испании):



В посылке было некоторое количество печатных плат Arduino Serial (уже начал раздавать желающим через Молоток.Ру):



А также Ethernet Shield, который управляется при помощи Ethernet library. Первый раз держу в руках Shield, который сделан на т.н. pin-extender-ах, т.е. штырьки и розетки в одном флаконе. Это позволяет "навешивать" на этот Shield еще один Shield и при желании создать многослойный бутерброд ;)







Пока что я усвоил, что на этом Shield-е установлен Wiznet W5100 с поддержкой IP (TCP и UDP), может обслуживать целых два (!) соединения одновременно ;) Бросается в глаза незапянный SD-слот, джамперы WP, PROG и INT, последний, как и SD-слот, не поддерживается Arduino, хотя, как я понимаю, могут быть использованы, если написать собственную библиотеку.

Надо нести на работу и подключать к локалке: получится бюджетный сервер ;)

2009-01-04

Электронный градусник

Довел до ума свой первый проект на Arduino: семисегментный дисплей. Получилось вполне работоспособно, хотя и немного стремно:



(подробнее о том, как я все это собирал)

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

2008-11-30

Посылка из Adafruit

На днях получил заказ из магазина Adafruit Industries, чтобы наконец обзавестись настоящим Ardiono, а не самодельным, который я спаял самостоятельно. Зато на самопальном можно проводить совсем бесчеловечные эксперименты, не опасаясь испортить хорошую вещь ;)

На деле, Arduino Diecimila оказался практически крошечным. Хоть и рассматривал фотографию на сайте, но когда вскрывал посылку, сначала расстроился - я его не нашел с первого раза:



Конечно, существует самая распоследняя - Arduino Duemilanove. Но там мелкие отличия - джампер выбора питания (внешнее / USB) ликвидирован, осуществляется автоматически. Ну да ладно, главное - итальянская вещь, всем хвастаюсь обратной стороной:



Заодно купил маленькую макетку-непайку, заколебало по каждому чиху доставать паяльник:



С обратной стороны - двойной клейкий скотч. Да и к самому Arduino в комплекте шли резиновые ножки. Я сначала не оценил, но потом... ;) В целом, если много элементов налепить, тесновато:



Еще купил два Shield-комплекта "сделай сам" - Adafruit Motor/Stepper/Servo и Adafruit Ethernet (XPort/WIZnet). И тот, и другой бесполезны без моторов и без Ethernet-модуля, что характерно. Может как-нибудь моторчик я к нему все-таки приделаю.

Всвязи с ненадобностью, я выставил LilyPad Main Board на продажу на молотке.ру.



Что характерно и покупался он в порыве "попробовать Arduino".

Да, и в Ликусцентре она слегка неправильно названа: не Mail, а Main! Сейчас пойду исправлять эту позорную ошибку во всех своих блогах...

2008-11-25

MM232R

Коллеги, с сочувствием глядя на мой нездоровый интерес к Arduino, запомнили мои сожаления по поводу USB-чипа FTDI232RL и мелкого шага его ножек - 0.65 мм (я сетовал, что USB-Serial Converter закончился в продаже в Линуксцентре).

И вот финал: притаскивают мне рекламный проспект про MM232R - это отладочный модуль, на котором USB-разъем и FT232RQ, а все выходные сигналы выведены на штыревую вилку:



Казалось бы - это именно то, что надо. Но даже беглый взгляд показал, что стоит это дело около 27 USD. Ну почему FTDI не выпускает 232-ые чипы в PDIP?...

2008-11-07

LinuxFormat 10.2008


Много раз убеждался, этот журнал нельзя просто листать, его надо читать от корки до корки. Сегодня в общественном транспорте открыл в свежем номере наугад статью "Открытый город, открытый разум" про фестиваль Open Source City в Ливерпуле:

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

(оставим на совести автора или переводчика "акселератор", по смыслу это слово надо было бы заменить на "акселерометр").

Ну и прочие приколки, типа группы из Шеффилда под названием "Apt Gets", а также лекция Тома Чанса (Tom Chance), где он связывает кантовский категорический императив и бескомпромиссность Столлмена в отношении проприетарного ПО: "именно императив способен превратить свободу ПО из простого набора утилитарных пользовательских выгод в общепринятую моральную необходимость".

Такого сильного цитирования Канта после пелевинского "Что меня всегда поражало, Петька, так это звездное небо под ногами и Иммануил Кант внутри нас", я не припоминаю.

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

2008-11-04

Linuxcenter - rulez!

После долгих раздумий, решился на покупку LilyPad Arduino Main Board:



Резюме: просто не выдержал, захотелось поиграться на праздниках.

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

Первая позиция - самая низкая цена на Arduino в Петербурге, кроме того есть на складе. В отличие от нормальных Arduino, на ней нет USB, и поэтому необходима вторая позиция (конечно, если только у вас не завалялся программатор от AVR). Ну и третье - прикольная штука, одним словом - пiнгвiнятко.

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

Найти дорогу даже с моим врожденным топографическим кретинизмом было несложно, благо на сайте есть снимок со спутника и серия фотографий "как к нам пройти" (кстати, если будете искать - пингвина на самом деле нет, он подфотошоплен на последней фотографии, а вот Москвич 49-48 ЛДД с предпоследней так и стоит - памятник архитектуры!).

За дверью "Мезон.Ру" я обнаружил небольшое помещение с несколькими комнатами, сопровождаемое неотъемлемыми атрибутами склада - многоэтажными полками-стеллажами, заваленными знакомыми предметами - например, журналом LinuxFormat.

Получив вожделенный заказ (кстати, USB/Serial Converter оказался последний), я вежливо попрощался и собрался уйти восвояси, но не тут-то было! Девушка сурово спросила меня:

- Подождите! А какой Linux вы используете в быту?

На мой ответ Debian я тут же получил в качестве бонуса три наклейки на корпус компьютера. Дальше я увидел, что девушка вынимает мне номера LinuxFormat-а и запротестовал - объяснил, что и так уже подписал свою фирму аж на два экземпляра. Однако, уклониться от периодических изданий мне не удалось: узнав, что наша контора не выписывает Системный Администратор, девушка торжественно вручила мне три летних номера.

Я снова попытался робко попрощаться, но тут мне опять было велено обождать: через три минуты мне вынесли кружку Debian (как выяснилось, тоже последнюю).

Я был практически в немом восхищении, но все-таки набрался глупости спросить, почему столько подарков, неужели так мало покупают? На что мне ответили следующее:

- Что вы, покупают, как раз, много! Но мы - интернет-магазин, живых людей видим редко. Но как не сделать подарок человеку, если видно, что он понимает?

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

Тем не менее, вот мои трофеи:



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

Пiнгвiнятко Лiнукс - культовой персонаж для любого Линуксоида !
Сшит добрыми тетушкамi на Донецькой фабрikе iграшек, по идее производителя должен служить для оформления iгровых кiмнат...
За ненадлежащее использование LinuxCenter ответственности не несет !

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

2008-10-30

Arduino в продаже

Перелистывая LinuxFormat, периодически встречал статьи по аппаратному хакингу с участием Arduino.



Arduino - небольшая плата на основе RISC-процессора AVR ATMega168, к которому можно писать программы на языке высокого уровня (без применения ассемблера). Все программное обеспечение и библиотеки к нему имеют лицензию GPL и LGPL, а схемы - под Creative Commons.

Однако, в России купить Arduino было невозможно. Но прошло время, и я с удовольствием обнаружил, что Linuxcenter все-таки начал подтягивать платы в свой магазин. Первой появилась плата LilyPad Arduino Main Board:



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

Я долго думал о практическом применении такого устройства, но, честно говоря, кроме возможности для жены дистанционно узнать, что муж уже напился и принял горизонтальное положение, не смог. Будить его этой виброй, если он заснул, явно бесполезно.

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

Совсем недавно в магазин наконец завезли волне полноценный вариант, Arduino BT:



В отличие от базовой модификации, на которой ставят опыты в журнале, USB заменен на Bluetooth. А вот расположение колодок цифровых и аналоговых входов/выходов сохранено, и это не случайно - существуют мезонинные платы, которые можно пристыковывать сверху. Например - плата управления сервомоторами роботов.

Теперь о цене.

В европейских магазинах можно купить Arduino BT за 79 EUR. Доставка из европейского магазина в Россию-матушку неспеша за 15 дней стоит около 12 EUR, итого набегает на 3200 RUR. В Линукс-центре она есть на складе и получить можно сразу, но на 500 руб. дороже.

Мучительно раздумываю, не собрать ли прикола ради на этом устройстве аналог СМП для Электроники МК-90, вроде бы по ТТХ вполне годится.