Передачтик на 433mHz с постоянной отправкой команды ( огромный расход )...
- Войдите на сайт для отправки комментариев
Всем привет. Пишу здесь в надежде на то,что кто-то сможет помочь (посоветовать), что поправить или может быть вообще изменить скетч.... Не иду в раздел "Ищу исполнителя" потому что, во-первых мне это не прям уж так необходимо,а во-вторых,увлекаюсь этим делом и хотел бы с вашей помощью разобраться,сам уже многое смотрел и читал,но догнать никак не могу((( Короче принцип действия устройства такой -- передатчик на 433 mHz в паре с atmega8 раз в 3 сек шлет команду на включение исполнительного устройства (на другом конце приемник на 433mHz с которым проблем нет,так как питается от сети), передатчик же питается от аккумулятора телефона (3,7 v 450mA/h)....Так вот проблема вся в том,что заряда хватает только на сутки (ну может чуть больше).... Скетч брал готовый (где работал он по принципу: Нажал кнопку -- Команда отправилась),немного его изменил и стало работать как мне надо,но как и говорил раньше,очень быстро садится аккумулятор....Прошу подсказать,что не так в коде. Может его изменить,а может и вовсе написать по новой....Буду признателен за все,критика тоже принимается))) Вот сам код скетча...
/* SimpleSend This sketch transmits a short text message using the VirtualWire library connect the Transmitter data pin to Arduino pin 12 */ #include <VirtualWire.h> //название библиотеки должно быть заключено в угловые скобки <> int switchPin = 8; int power = 10; void setup() { pinMode(switchPin, INPUT); pinMode(power, INPUT); // Initialize the IO and ISR vw_setup(2000); // Bits per sec } void loop(){ digitalWrite(power, HIGH); if (digitalRead(switchPin) == HIGH) { send("on"); } digitalWrite(power, LOW); delay(3000); } void send (char *message) { vw_send((uint8_t *)message, strlen(message)); vw_wait_tx(); // Wait until the whole message is gone }
а чего на пинах 8 и 10 висит?
3 секунды там какой +- ?
А если усыплять мк и отрубать питание от передатчика (например запитав его от пина мк, сколько жрёт передатчик?) и будить по таймеру? Хватит ли времени передатчику "очухаца" при включении - хз.
Сам такое не делал, но вроде видел что так можно :)
Вобщем просто идею закинул :)
Изначально в коде было прописанно,что при поступлении сигнала HIGH на вход 8, отправляется команда отправить сигнал....Так вот я добавил выход 10 (ошибка в коде,вместо INPUT, должно быть OUTPUT), кторый питает передатчик.....Теперь получается так...
В цикле сперва подается питание на передатчик, потом идет проверка,что на 8 пине HIGH и если это так,то отправляется команда....Выключаетя 10 пин....Пауза в 3 сек....И снова все по кругу....
Логичней сперва проверять кнопку и уж потом подавать питание на передатчик.
А, тоесть по нажатию на кнопку (и удерживании) на 8 пине, передатчик должен слать сигнал каждые 3 секунды? А если отпустить кнопку - то ваще ничё не делать?
в том то и дело,что кнопку проверять не вариант,потому что она всегда нажата....вот и получается,что каждые 3 секунды, контроллер проверяет,есть ли сигнал на 8 пине (а он там всегда есть)))) и потом подает питание на 10 пин (то есть питание передатчика)...Ну и передатчик включается и отправляет команду....
Ну тогда уводить в слип и будить периодически по таймеру.
почитайте про:
Ну ещё светодиод отпаять на плате МК если есть :)
А питание как подаёте? 3.7в прямо на ногу мк?
светодиода нет....используется голая atmega8
Misha87,
1. кладезь знаний по экономии питания на мк http://www.gammon.com.au/power
2. зачем каждые 3 секунды что-то отправлять? исполнительное устройство может само что-то делать?
Я не знаю в чем причина .... Сейчас вот сижу и меряю потребляемый ток. С кодом,который я здесь скинул,потребление atmega8 при питании от 5вольт составляет 5,5 мА.... Для интереса поменял в коде время с 3сек на 10сек....Ничего вообще не изменилось((( Вроде потребление маленькое,а аккумулятор сажает за сутки (вчера зарядил аккум 3,7 вольт 470 мА.ч включил устройство в 7вечера и вот сейчас уже почти 7вечера,то есть прошли сутки и аккум почти сел в ноль.....Куда копать,понятия не имею.....
Причем самое интересное,что такое потребление что с подключенным передатчиком,что без передатчика....Странная хрень какая-то....Что думаете на этот счет?
замеряй без delay, пусть постоянно передаёт
Замерил....15мА
То ли у меня мультиметр врет,то ли что.....Но сейчас заново все проверил и реально пока выполнятеся delay потребление патает до 5мА, а в момент оправки подскакивает аж до 25-30мА....
Может оно в момент включения питания жрёт, можно попробовать не отключать питание от передатчика, ну так... в целях експеремента :)
По настоящему помочь сможет только усыпление и пробуждение по таймеру
Сейчас попробовал по-другому....Реально потребление зависит от передатчика....То есть отключил передатчик и потребление стало 5мА и не менялось несмотря на то,что в коде есть delay, как только подключил передатчик, на момент его включения ток потребления становится 25-30мА
Получилось загнать мегу в режим сна, потребление мизерное.... Но как потом мегу разбудить, не могу сообразить... Внешнее пребывание мне не подходит, только по таймеру нужно, но не получатся (((
ссылку я дал выше, там "Waking from sleep with a timer"
Не могу разобраться,подскажи если не трудно,очень нужно
Попробовал вот этот код
На ардуино нано работает,на голой меге8 не хочет((((
А что именно не хочет? Не засыпает, или не компилируется? Если второе, то к примеру, когда я на подобном коде учился усыплять ATtiny85, то выяснил, что не WDTCSR, а WDTCR.
Итоговое потребление конструкции с акселерометром и вибромотором в режиме сна - около 4 мкА, в активном режиме - до 2 мА. С передатчиком, конечно, будет больше, но это просто, чтобы понимать порядок.
Пользовался вот этим:
Усыпление: http://donalmorrissey.blogspot.ru/2010/04/sleeping-arduino-part-5-wake-up-via.html
Отключение ADC: http://www.technoblogy.com/show?KX0
не компилится
"Сонный" код из первой ссылки (http://donalmorrissey.blogspot.ru/2010/04/sleeping-arduino-part-5-wake-up-via.html) компилируется в Arduino 1.6.5 при выборе платы Arduino NG.
Попробуйте, посмотрите, сколько будет потреблять. Если порядка 300 мкА в режиме сна, добавьте отключение ADC.
Попробовал...Процессор выбираешь Atmega8 и опять же не компилится
Да, моя ошибка - не заметил выбор процессора. Вот еще тогда:
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
Блин,ну никак не могу разобраться.....
Вот даже такой готовый код нашел и он тоже на мегу8 не заливается
Изменил кое-что в коде,заработало....Правда значения на мультиметре скачут как-то странно....0.06mA(секунд 5)--->2.00mA(на секунду где-то)---->10.00mA(на секунду) и все по кругу....
Залил на рабочую схему, буду проверять насколько хватит аккумулятора.... Сейчас пока заряжаю))) Если все будет ок, скину изменения которые я сделал в скетче...
Зарядил аккумулятор 3.7в. 470мА/ч буквально за час и подключил к этой схеме. Уже вторые сутки подряд работает и заряд как был на месте, так и остался (правда не замерил напряжение на аккумуляторе, сужу просто по индикатору заряда) ....В общем походу все получилось)))) Надо будет потом еще на батарейке CR2032 попробовать, посмотреть на сколько её хватит....
Изменил кое-что в коде,заработало...
Привет!
А что именно изменил? Я уже который день бьюсь над этой ерундой. На 16 меге компилится, на 8:
error: 'WDTCSR' was not declared in this scope
error: 'SMCR' was not declared in this scope
error: 'WDIE' was not declared in this scope
светодиода нет....используется голая atmega8
Atmega 8 плохой выбор. Лучше Atmega 328, она меньше потребляет в разы, и напряжение можно снизить и частоты. Если используете загрузчик Arduino можно использовать режим Idle, из него микроконтроллер будет выходить сам каждую миллисекунду (таймер 1 включен всегда), можно зациклить и ждать обычным способом...