Arduino
Обвязка Arduino
21 Января 2012, 15:44
— систему автоматической перезагрузки для стабильного запуска модуля Ethernet Shield.
— элементы фильтра помех
— нагрузочный резистор датчика температуры
Схема обвязки:

Теперь по порядку.
Система автоматической перезагрузки при включении построена на элементах C3, R4, R5 и транзисторе. Действует она так: при подаче питания конденсатор C3 начинает заряжаться, пропуская при этом ток, который открывает транзистор. Открытый транзистор замыкает вывод Arduino RESET на землю GND, в результате чего происходит перезагрузка. По мере зарядки конденсатора (а время зарядки зависит от постоянной времени интегрирующей цепочки C3R4) транзистор закрывается, разрывая цепь RESET GND. В некоторый момент времени (почти тогда, когда транзистор полностью закрывается) RESET оказывается отключенным от GND и Arduino начинает загружаться.
Вся эта система понадобилась потому, что после подключения модуля Ethernet был обнаружен неприятный эффект. При подаче питания модуль не хотел нормально включаться без нажатия на кнопочку ручной перезагрузки. Понятно, что после каждого пропадания электроэнергии приходилось бы вручную делать перезагрузку, чего ужасно не хотелось :-)
Идем дальше. Конденсатор C1 нужен для подавления помех в цепи питания, которые «вешают» микроконтроллер когда, например, включаешь/выключаешь свет в комнате или сосед врубает сварочный аппарат. Включение в схему этого конденсатора избавило от этой проблемы.
Элементы R1 и C2 нужны для уменьшения сопротивления линии, идущей от опропары и исключения появления паразитных сигналов в этой линии, которые могут внести погрешность в вычисление уровня радиации. Такими помехами могут быть электрические наводки в линии. Например, стоило взяться за провод руками, как Arduino начинал бешено считать импульсы, которые являлись следствием электрических наводок от рук. Вообще можно было использовать экранированный провод к оптопаре и уменьшить его длину, но все же лучше дополнительно использовать вышеуказанные элементы. Для большей так сказать надежности.
Резистор R4 необходим для работы температурного датчика. Более подробной информации на счет этого резистора у меня нет. Без него не работало. А вот R3 добавил специально для подстраховки. На тот случай, если где-то в линии к датчику плюсовой провод замкнет на GND, может выгореть Arduino. Резистор же создаст сопротивление и уменьшит протекающий ток, что спасет (наверное) от немедленного выхода из строя.
Загрузка бутлоадера в Arduino
16 Января 2012, 01:45
Но сторожевой таймер напрочь отказался работать с текущим бутлоадером. Значит надо было залить новый. Ниже расскажу как я это делал.
В общем-то загрузка бутлоадера многократно описана на разных сайтах, но в моей ситуации не все прошло гладко — не каждая прошивка подошла, а многие важные инструкции были найдены на забугорных сайтах (включая японские). Так что пишу дальше.
Итак, для загрузки бутлоадера понадобилось:
1. Прошивка бутлоадера.
2. Прошивальщик.
3. Специальный прошивочный кабель.
Единственной прошивкой, которая подошла, оказалась ADABootLoader. В моем случае мне подошел файл ADABoot_328.hex, так как Arduino у меня собрана на микросхеме ATMega328p.
В качестве прошивальщика подошла программа avrdude и графическая оболочка avrdude-GUI-1.0.5 к ней, через которую можно прошивать многие типы микроконтроллеров.
Осталось сделать прошивочный кабель. Вообще-то делать его вовсе не обязательно, если только не собираетесь заниматься прошивкой на регулярной основе. В остальных случаях достаточно просто нужным образом соединить контакты разъемов на плате. Ниже картинка и схема соединений.


Разъемы соединили. Запускаем программу avrdude-GUI, вводим настройки. В моем случае получилось вот так:

Особое внимание надо обратить на правильную установку Fuse и Lock битов, иначе последствия могут быть непредсказуемыми. Например, может получиться так, что в микроконтроллер не будет загружаться сектч — выполняемая программа. Подробнее про Fuse биты написано тут.
Следует так же отметить, что бутлоадер нормально прошился только с помощью кнопки «Erase — Write — Verify».
Вот, собственно, и все. Прошивка прошла удачно, после чего сторожевой таймер заработал.
Ниже ссылки, на источники очень важной информации, без которой нифига не получилось бы:
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html
http://www.compcar.ru/forum/showthread.php?t=4675&highlight=bit-bang
http://robocraft.ru/blog/arduino/51.html
http://www.geocities.jp/arduino_diecimila/bootloader/bitbang_w_ide_en.html
http://www.milesburton.com/Dallas_Temperature_Control_Library#Download
Ну и на всякий случай я сохранил копии этих крайне важных страниц, на случай, если с источниками что-нибудь случится.
Совершенствование службы радиационного мониторинга
14 Января 2012, 23:58
Осуществить идею помог один из клонов Arduino и Ethetnet модуль к нему. Arduino представляет собой аппаратную платформу (микрокомпьютер), на основе которой можно собирать разные уникальные гаджеты. Вот так она выглядит:


Так что оставалось только соединить все и написать прошивку. Алгоритм работы такой: прямоугольные импульсы от счетчика поступают на один из цифровых входов Arduino. Каждый импульс фиксируется с помощью прерываний. В остальном алгоритм расчета и трансляции данных на сервер аналогичен описанному здесь — раз в полчаса происходит расчет уровня радиации и трансляция на сайт.

Получилось вот так:

Вся система схематически:

СГ (Счетчик Гейгера) и t — это датчики, радиации и температуры соответственно. Обвязка СГ содержит схемы, необходимые для работы Счетчика Гейгера. Обвязка Arduino — схему автоматической перезагрузки при включении для стабильного старта модуля Ethernet Shield, фильтры помех и некоторые другие элементы.
Вся система, включая модем, запитана от источника бесперебойного питания.

Для повышения надежности так же было сделано следующее: в случае зависания Arduino введена система автоматической перезагрузки. Сделано это с помощью встроенного «сторожевого таймера». Это такая штуковина, которая автоматически делает рестарт микрокомпьютера в случае зависания. Однако, со стандартным бутлоадером сторожевой таймер не работал. Пришлось заливать новый бутлоадер.
Было так же обнаружено, что периодически Arduino зависает напрочь. Не помогает даже сторожевой таймер. Проведя несколько экспериментов источник зависаний удалось найти — это помехи, проникающие по цепи питания. Создавать их может любой электроприбор, включаемый в сеть неподалеку. Подключив параллельно контактам +5V и GND конденсатор 100n, проблема разрешилась (подробнее об этом здесь).