Автор Тема: Переделка "Air Wick" ( пырскалка от дяди Вани из Тайвани)  (Прочитано 39914 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Stariywolk

  • .
  • *
  • Сообщений: 97
Привет, уважаемые Коллеги!
Решил я долбануть нашей кувалдой по детищу китайской электронной промышленности :-):
Хочется решить одну проблемку, но мозга нехватает.
Идея проекта такая:
Сейчас довольно популярны китайские пырскалки для запаха.

 Максимальный интервал у них - 36 минут. Поставил такую в туалет - жена чуть из дома не выгнала так как туалет несмотря на вытяжку превратился в газовую камеру. Увеличить время срабатывания не получится, так как китаёзы воткнули внутрь контроллер-кляксу и пару-тройку SMD.
Вот если бы получилось научить Attiny13 выдавать секундный импульс раз в 1-2-3 часа - было бы самое то. И запах прыятный, и балончика хватало бы до Нового Года. А то сейчас получается как в анекдоте: "Кто раньше встал, тому и свежий воздух в туалете"
В принципе Тинька должна на 1-2 секунды "коротить" через полевик моторчик на "массу". Питание - 3 вольта (две батарейки АА). Ну и чё-нибудь подмигивать должно раз в 5-10 секунд с намёком на то, что "воно" - работает. Если бы удалось еще и фоторезистор привинтить чтобы ночью не работал, но при посещении в темное время суток после выключения света разочек пырснул - вааще мечта!

Может получиться нужный проект, так как народ интересуется такой переделкой. Есть один интересный проект на PIC, но он для туалета/ванной без окон. Таких большинство, а у меня - окошки.  Да и алгоритм там немного того... заумный.

Может попробуем  поколдовать над прошивкой? А "железо" проверю я и платку сделаю по размеру для замены.
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
(Нет темы)
« Ответ #1 : 01 Апрель 2013, 20:03:19 »
Вот для начала файлик схемы в сплане. Кромсай как хошь, в зависимости от начинки сабжа.
while(1||!1);
зберігай спокій

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Цитата: "Stariywolk"
Питание - 3 вольта (две батарейки АА).
Тут такое дело. Тинька в рабочем режиме потребляет около 3 мА. Надолго ли хватит батареек?
Думаю можно сделать алгоритм на сторожевом таймере, ток потребления 60 мкА. Но тогда не будет мгновенного срабатывания на включение света.
while(1||!1);
зберігай спокій

Stariywolk

  • .
  • *
  • Сообщений: 97
Цитата: "slav0n"
Но тогда не будет мгновенного срабатывания на включение света.
Так в этом и вся прелесть!!! Если после того, как включался свет хоть через пол-часа пшикнет - нормально. :co_ol:
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
(Нет темы)
« Ответ #4 : 02 Апрель 2013, 18:30:50 »
были проделаны некоторые эксперименты.
В целях максимальной минимизации энергопотребления схему делаем примерно такую.
Что будем применять в качестве датчика освещения?
while(1||!1);
зберігай спокій

Stariywolk

  • .
  • *
  • Сообщений: 97
Цитата: "slav0n"
Что будем применять в качестве датчика освещения?
Проблемка... В разных местах живем...
Я тут нашел фоторезисторы - в темноте 1 Мгом, на свету - 10 Ком. Обозначаются как "GL5528".
В немецинском eBay их як гною. И стоят недорого. Компактные, 5мм в диаметре.
Если в +3 вольта поставить резистор ком на 100, а фоторезистор на массу - сможет Тинька прочитать и среагировать?
Померял ток  этой китайской зверуги - 24 микроампера :-( В принципе 60 тоже приемлемо.
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Цитата: "Stariywolk"
Я тут нашел фоторезисторы - в темноте 1 Мгом, на свету - 10 Ком. Обозначаются как "GL5528".
Да нормально. Прицепить к АЦП - думаю будет работать. Пробовать надо.
Тут вот другая засада. Идея со сверхмалым потреблением может не пройти.
Ресурс записи-чтения ЕЕПРОМ тиньки по даташиту составляет 100.000 циклов.
Если писать-читать ячейку каждые 4-5 сек. то ресурса хватит часов на 150. Маловато.
 А может ресурс всё-таки в реальности больше? Есть где-нибудь такая инфа?
Жаль, идея была хорошая. Ток потребления в паузе был всего несколько микроампер.
while(1||!1);
зберігай спокій

Stariywolk

  • .
  • *
  • Сообщений: 97
Я нашел один проект, но он несовсем подходит так как у меня туалет и ванная с окошками.
Вот это: http://www.alprad.dx.am/airwick.htm
Там сделано на PIC12F629.
А какой ресурс Вы имеете ввиду? Батарейки? Так их в "родном китайском" чуть ли не на год хватает. При 24 микроаперах.  Раз в 20 секунд моргает светодиод, в этот момент потребление возрастает до пару милиампер. Если в переделке будет хватать на пол-года - тоже небеда.
Если выбросить фоторезистор - тоже не беда. Главное чтобы пырскала пореже и если будет можно выставлять 1-2-3 часа - самое то.
Если оставить фоторезистор - мож сделать чтобы он просто тормозил таймер без излишеств?
В принципе если пырскнет 3-4 раза в сутки - для маленького туалета достаточно.
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Цитата: "Stariywolk"
А какой ресурс Вы имеете ввиду? Батарейки?
Нет, не батарейки, а памяти. Вот тут кое-что про это пишут http://electronix.ru/forum/lofiversion/ ... 65606.html
Ну, да ладно. Можно применить режим холостого хода, тоже нормально.
while(1||!1);
зберігай спокій

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
(Нет темы)
« Ответ #9 : 03 Апрель 2013, 19:03:00 »
Покопался в интернетах и выяснил, для продления жизни EEPROM применяется совмещение унарного и бинарного счетчиков.
Будем применять и здесь такую хитрую штуку. Вот такой базовый код наколдолвался.
Осталось только обвесить его разными причандалами.

#define LED_pl PB2
#define LED_mn PB1


//============================================================

int __attribute__((naked)) main(void)
{
WDTCR = (1<<WDE)| //выпускаем сторожевую собаку
(0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0); //1c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); //2c
// (1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(0<<WDP0); //4c
// (1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //8c


PORTB |= (1<<LED_pl);

_delay_us(2);
if(bit_is_clear(PINB,LED_mn))goto slp;


DDRB |= (1<<LED_pl)|(1<<LED_mn); //зажигаем светодиод


u32 ctr_unary = eeprom_read_dword(30); // читаем унарный счетчик

ctr_unary <<= 1; //инкремент унарный счетчик
// if(ctr_unary == 0)
if(ctr_unary == 0Xffffff00)
{
ctr_unary = 0xffffffff;

/**/
u8 ct_binary = eeprom_read_byte(30+4); // читаем бинарный счетчик
ct_binary++;
//здесь можем сравнить бинарный счетчик с чем-либо
eeprom_update_byte(30+4, ct_binary);

_delay_ms(300);
}

eeprom_update_dword(30, ctr_unary);


DDRB &=~((1<<LED_pl)|(1<<LED_mn)); //тушим светодиод

slp:

PORTB &=~((1<<LED_pl)|(1<<LED_mn));

MCUCR |= (1<<SE)|(1<<SM1)|(0<<SM0); //power down

asm("sleep");
}
while(1||!1);
зберігай спокій

Stariywolk

  • .
  • *
  • Сообщений: 97
В принципе я сразу проверю в "железе" с подробным отчетом.
А для чего переключатель в последнем варианте?
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Цитата: "Stariywolk"
А для чего переключатель в последнем варианте?
переключатель времени.
В целях экономии питания - 2 позиции, иначе резистивный делитель будет жрать батарейку.
Еще один прикол - если вход замкнуть на корпус, начинает жрать 25 мкА.
Если замкнуть на плюс - всё нормально, 6 мкА.
while(1||!1);
зберігай спокій

Stariywolk

  • .
  • *
  • Сообщений: 97
Цитата: "slav0n"
Еще один прикол - если вход замкнуть на корпус, начинает жрать 25 мкА.
Непонял??? Вы уже на макетке пробуете???
Позвонил по «03» и на всякий случай в Америку по «911»… Так наши на полчаса раньше приехали!

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Цитата: "Stariywolk"
на макетке пробуете???
Да, сохранилась примерно такая удобная вещь.
while(1||!1);
зберігай спокій

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4578
Запустил тест ячейки памяти на износ по записи/стиранию.
Алгоритм такой  - в цикле в ячейку пишется 0 со сдвигом, после заполнения нулями ячейка стирается и т.д.
Итого по кругу восемь записей, одно стирание. Частота получилась - 66 стираний в минуту.
При заявленной в даташите живучести EEPROM в 100.000 стираний должно хватить на сутки.
 Если запись тоже изнашивает ячейку, то сдохнуть должно в восемь раз быстрее - через 3 часа.
Посмотрим...
while(1||!1);
зберігай спокій