вторник, 21 февраля 2012 г.

Старый мобильник-для дистанционного управления

Способ подходит для управления не очень важными и ответственными процессами. Скажем, запустить насос ещё до того как вы приехали на дачу, пусть наливает бочки. Или открыть клапан от общей магистрали-с той же целью. Много можно придумать, а мне нужно было открыть ворота когда приехал кто-нибудь у кого нет ключей. Чуть позже я сделаю домофон, неохота тянуть зимой провода а прямой видимости нет. Таким образом, по звонку тех кто у ворот я выбираю в телефонной книге запись "Ворота" и звоню.

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

1)Разбираем телефон
2)Вытаскиваем вибромотор а туда где он был припаиваем провода. Например МГТФ-0,03 , но обычно вибромотор на задней стенке корпуса и там-то можно выполнить отверстие через которое и вытащить наружу эти провода.
3) Собираем схему питания телефона, например так:

  Можно собрать по другому, но этот блок при предельной простоте обеспечивает уверенное питание телефона и при отключении сети 220В. Это очень важно если телефон будет управлять нагрузкой питаемой от того же акумулятора. Я использовал старый аккумулятор от шуруповёрта 12В 1,2а*ч. Таким образом телефон, если на него никто не звонит потребляет в среднем десятки миллиампер, и даже что-то остаётся на зарядку батареи.
Батарея заряжается в безопасном для неё режиме очень малым током.
Собственно, если вам оно надо совсем ненадолго-можно исключить из схемы всё что левее аккумулятора.

4) Подключаем (посредством пайки)  к контактам  где была батарея телефона этот блок питания, соблюдая полярность. 

5) На вибромоторе обычно короткие импульсы, что часто непригодно для управления нагрузкой, разве что если хотите лампой помигать. Тогда  хватит одного оптоэлектронного реле.
Если нужно включить что-то на время сигнала можно применить такую схему:
 Пояснения по схеме:

1)"К телефону"- это означает контакт вибромотора где появляется "+". Можно определить подключив туда вольтметр.
Само собой, общий провод этой схемы, в т.ч. исток VT2 должен быть соединён с "-" схемы питания телефона.
 2)"К источнику" -это к "+" описанной выше схемы или от чего вы будете питать, можно ведь и просто от аккумулятора.
3)"К нагрузке" -это может быть маломощная нагрузка, постоянного тока потому что питаться она должна опять-таки от "+" того же источника из верхней схемы.Но это может быть Реле. А это меняет дело.

В общем, схемка простая и обеспечивает питание чего-либо пока идёт вызов+ещё немного. Это самое "немного" зависит от номиналов C1 , R4 .
Применять эту схему без изменений можно только если вам доподлинно известно что ваш телефон не будет сигналить вибровызовом никак иначе кроме как когда на него звонят. Иначе управлять чем-то может оператор, прислав sms. Или ещё кто-нибудь. Как с этим бороться?
Можно сделать так чтобы на короткие сигналы схема не реагировала. Для этого нужно увеличить R3 и C1 и ещё можно применить транзистор с высоким пороговым напряжением, например КП737А.
Тогда короткий вибросигнал о sms не сможет зарядить до нужного уровня C1 и со временем этот запас энергии будет рассеян R4. Ну а если скажем секунд 5 вызывать то схема сработает как надо.

понедельник, 20 февраля 2012 г.

Программирование AVR из Geany

Итак,  небольшой и несуразный рассказ как настроить редактор  Geany для работы с компилятором Avra и программатором avrdude. Помимо этого используется система make
А о отладке, симуляции полноценных IDE и навороченных кодовых комбайнах и взглядах на это дело -не в этот раз.

Geany лучше сразу подложить файл с правильной подсветкой синтаксиса, если вы ещё не создали свой вариант.
Сразу отметим, существуют мелкие особенности совместимости компиляторов с компилятором от Atmel:

 Так, Avra версии 1.3.0 уже  переваривает такие штуки как #pragma  спокойно. В принципе, можно сделать/скачать правильные  заголовочные файлы и использовать более старую версию Avra. И не будет надоедливых строк типа:   tn13def.inc(54) : PRAGMA directives currently ignored


Теперь можно создать проект в Geany.
Затем в настройках выбираем: Сборка- Установить команды сборки
Выскочит вот такая штука:


Достаточно написать следующие команды (названия произвольные):

 "Скомпилировать"  make compile FILE=%eLE=%e
 "Прошить"               make program FILE=%e
 "Очистить"              make clean FILE=%e
 "Взвесить"               make size   FILE=%e

Теперь нужно написать makefile и положить его в папку проекта.
Это удобная система, потом при любом проекте указываем модель контроллера , фьюзы  и готово. По моему даже лучше чем выбирать из списка всё это в окнах настройки проекта. Естественно, makefile можно создать и получше  но тут будет совсем простой для простых проектов.
Не забываем про табуляцию перед командой, иначе будет ошибка. Также, некоторые редакторы типа notepad-а вставляют в файл свои невидимые  символы BOM в результате чего тоже будет ошибка.

Файл выглядит так:

# Makefile for programming AVR in Geany
#Параметры проекта:

MK=t13
LFuse=0x7A
HFuse=0xFF

# Более глобальные переменные.
ASM=/usr/bin/avra
ISP=/usr/bin/avrdude
INCLUDEDIR=/usr/share/avra/

compile:
    $(ASM) -I $(INCLUDEDIR) -l $(FILE) $(FILE).asm
program : $(FILE).hex
    $(ISP) -c stk200 -p $(MK)  -U flash:w:$(FILE).hex:i -U lfuse:w:$(LFuse):m -U hfuse:w:$(HFuse):m
clean:
    rm -f $(FILE).cof $(FILE).eep.hex $(FILE).hex $(FILE).obj *~
size:
    avr-size  $(FILE).hex
Вот и всё, теперь кодим, затем в голове  запускаем процесс отладчика.
Выставляем свой МК и fuse.
Жмём "Компилировать" -"Взвесить" - "Прошить".
Для этого ещё есть кнопки, например F8 компилировать и F9 прошить.
То есть, если мы дальше хотим работать с другой конфигурацией и контроллером, например Atmega8  то редактируем три строчки в начале файла.
Таким образом можно настроить и работу с другими компиляторами, например gavrasm и другими программаторами и семействами МК.
Между прочим, всё вышеописанное работает в самых различных операционных системах.