В сегодняшней статье хочу поделится с вами новым проектом. На этот раз это сенсорный выключатель с стеклянной панелью. Устройство компактное, размерами 42х42мм(стандартные стеклянные панель имеет размеры 80х80мм). История этого устройства началась давно, около года назад.
Первые варианты были на микроконтроллере atmega328, но в итоге все закончилось микроконтроллером nRF52832.
Сенсорная часть устройства работает на микросхемах TTP223. Оба сенсора обслуживает одно прерывание. Питание от батарейки CR2477, через повышающий преобразователь на микросхеме TPS610981 | Даташит.
В устройстве реализована схема отключения питания на полевых транзисторах. После нажатия на кнопку микроконтроллер сам перехватывает управление питанием и далее кнопка может использоватся для сервисных режимов(в моем случает это сопряжение с другими устройствами, отключение питания и сброс к заводским установкам(factory reset)).
Присутствуют 2 rgb светодиода для индикаций состояний и сервисных режимов. Так же добавлен пьезоизлучатель для имитации клика при прикосновении к сенсорным кнопкам и звуковой индикации сервисных режимов. Светодиоды и пьезоизлучатель можно включать и отключать по желанию пользователя. Делается это через контроллер умного дома, отправкой команд на технические сенсоры, так же реализована возможность изменения пользователем интервалов отправки заряда батареи и уровня сигнала так же через контроллер умного дома. В моем случае это МАЖОРДОМО.
Потребление в режиме передачи 7мА(250кбит, 10мс), потребление во сне 40мкА, потребление в выключенном состоянии менее 1мкА(=потреблению повышающего преобразователя в «холостом» режиме). Выведен rx, tx, swd разьем для программирования. Используется миниатюрный разьем 2х3p с шагом 1.27. Для программирования изготовлен специальный переходник.
Как и всегда в основе работы устройства лежит протокол MySensors. Данный сенсорный выключатель планируется применять в системе управления рулонными шторами. Но в целом применение ограничено только вашей фантазией. Например уже сейчас сын(7 лет) сделал 3 заказа на версии выключателя: для включения и выключения света в туалете с ванной(крепиться будет невысоко от пола), для включения света в длинном и темном коридоре при путешествии в туалет с ванной и еще один как прикроватный, для быстрого включения света в своей комнате чтобы монстры разбежались.
Корпус по традиции печатался на SLA принтере, устройство миниатюрное, корпус получился небольшой, применение даной технологии печати оправдано.
В корпус и крышку батарейного отсека вклеены магнитики.
Видосики с тестами данного устрройства:
Для желающих повторить:
Код тестовой программы выключателя в системе управления рулонными шторами для Arduino IDE
int8_t timer_status = 0;
boolean sens_flag1 = 0;
boolean sens_flag2 = 0;
boolean switch_a = 0;
boolean switch_b = 0;
uint16_t temp;
float vcc;
int battery;
int old_battery;
uint32_t oldmillis;
uint32_t newmillis;
uint32_t interrupt_time;
uint32_t SLEEP_TIME = 7000;
uint32_t SLEEP_TIME_W;
uint32_t SLEEP_TIME_W2;
int NrfRSSI;
uint16_t NrfRSSI2;
boolean wait_off;
#define MY_DEBUG
#define MY_RADIO_NRF5_ESB
#define MY_PASSIVE_NODE
#define MY_NODE_ID 120
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define POWER_CHILD_ID 110
#define UP_POWER_SWITCH_ID 1
#define DOWN_POWER_SWITCH_ID 2
#define CHILD_ID_nRF52_RSSI_RX 3
#define BAT_COOF 0.0092957746478873
#define BAT_MIN 200
#define BAT_MAX 290
#include <MySensors.h>
MyMessage upMsg(UP_POWER_SWITCH_ID, V_STATUS);
MyMessage downMsg(DOWN_POWER_SWITCH_ID, V_STATUS);
MyMessage powerMsg(POWER_CHILD_ID, V_VAR1);
MyMessage msgRF52RssiReceiv(CHILD_ID_nRF52_RSSI_RX, V_VAR1);
void preHwInit() {
//delay(1000);
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
delay(3000);
pinMode(3, INPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(28, OUTPUT); // bizzer
pinMode(2, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(29, INPUT);
digitalWrite(28, LOW); // off bizzer
digitalWrite(27, HIGH);
digitalWrite(26, HIGH);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
}
void before()
{
//digitalWrite(31, HIGH);
NRF_POWER->DCDCEN = 1;
//NRF_UART0->ENABLE = 0;
analogReadResolution(12);
disableNfc();
turnOffAdc();
//wait(2000);
digitalWrite(25, LOW);
digitalWrite(6, LOW);
wait(200);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
wait(100);
playSound0();
wait(100);
digitalWrite(25, LOW);
digitalWrite(6, LOW);
wait(200);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
wait(3000);
digitalWrite(27, LOW);
digitalWrite(8, LOW);
wait(200);
digitalWrite(27, HIGH);
digitalWrite(8, HIGH);
wait(400);
digitalWrite(6, LOW);
digitalWrite(25, LOW);
wait(200);
digitalWrite(6, HIGH);
digitalWrite(25, HIGH);
wait(400);
digitalWrite(26, LOW);
digitalWrite(7, LOW);
wait(200);
digitalWrite(26, HIGH);
digitalWrite(7, HIGH);
wait(1000);
digitalWrite(26, LOW);
digitalWrite(7, LOW);
}
void setup()
{
digitalWrite(26, HIGH);
digitalWrite(7, HIGH);
wait(50);
playSound();
wait(2000);
readBatLev();
wait(200);
SLEEP_TIME_W = SLEEP_TIME;
}
void presentation()
{
sendSketchInfo("Power on|off Node", "1.0");
wait(100);
present(POWER_CHILD_ID, S_CUSTOM, "BATTERY DATA");
wait(100);
present(UP_POWER_SWITCH_ID, S_BINARY, "UP SWITCH");
wait(100);
present(DOWN_POWER_SWITCH_ID, S_BINARY, "DOWN SWITCH");
}
void loop()
{
if (sens_flag1 == 0 && sens_flag2 == 0) {
if (switch_a == 0 && switch_b == 0) {
timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, 3600000, false);
wait_off = 1;
} else {
//oldmillis = millis();
timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, SLEEP_TIME_W, false);
wait_off = 0;
}
}
if (timer_status == 3) {
wait(100);
digitalWrite(27, LOW);
digitalWrite(8, LOW);
wait(2000);
digitalWrite(27, HIGH);
digitalWrite(8, HIGH);
wait(100);
digitalWrite(31, LOW);
}
if (timer_status == 2) {
if (digitalRead(9) == HIGH && sens_flag1 == 0 && switch_b == 0) {
sens_flag1 = 1;
if (switch_a == 0) {
oldmillis = millis();
SLEEP_TIME_W = SLEEP_TIME;
switch_a = 1;
send(upMsg.set(switch_a));
//wait(200);
digitalWrite(6, LOW);
wait(10);
playSound1();
wait(20);
playSound2();
wait(50);
} else {
switch_a = 0;
send(upMsg.set(switch_a));
//wait(200);
digitalWrite(6, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
}
//sleep_not_pasible = 1;
//digitalWrite(25, HIGH);
//wait(100);
}
if (digitalRead(10) == HIGH && sens_flag2 == 0 && switch_a == 0) {
sens_flag2 = 1;
if (switch_b == 0) {
oldmillis = millis();
SLEEP_TIME_W = SLEEP_TIME;
switch_b = 1;
send(downMsg.set(switch_b));
//wait(200);
digitalWrite(25, LOW);
wait(10);
playSound1();
wait(20);
playSound2();
wait(50);
} else {
switch_b = 0;
send(downMsg.set(switch_b));
//wait(200);
digitalWrite(25, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
}
//sleep_not_pasible = 1;
//digitalWrite(6, HIGH);
//wait(100);
}
if (digitalRead(9) == LOW && sens_flag1 == 1) {
sens_flag1 = 0;
//digitalWrite(6, HIGH);
//playSound2();
//wait(50);
}
if (digitalRead(10) == LOW && sens_flag2 == 1) {
sens_flag2 = 0;
//digitalWrite(25, HIGH);
//playSound2();
//wait(50);
}
if (switch_a == 1 || switch_b == 1) {
if (wait_off == 0) {
newmillis = millis();
wait(10);
SLEEP_TIME_W2 = SLEEP_TIME_W;
wait(10);
interrupt_time = newmillis - oldmillis;
wait(10);
SLEEP_TIME_W = SLEEP_TIME_W2 - interrupt_time;
wait(10);
Serial.print("WAS IN A SLEEP: ");
Serial.print(newmillis - oldmillis);
Serial.println(" MILLISECONDS");
if (SLEEP_TIME_W < 1000) {
if (switch_a == 1) {
switch_a = 0;
digitalWrite(6, HIGH);
//wait(10);
//playSound2();
//wait(20);
//playSound1();
//wait(50);
//send(upMsg.set(switch_a));
//wait(200);
}
if (switch_b == 1) {
switch_b = 0;
digitalWrite(25, HIGH);
//wait(10);
//playSound2();
//wait(20);
//playSound1();
//wait(50);
//send(downMsg.set(switch_b));
//wait(200);
}
SLEEP_TIME_W = SLEEP_TIME;
wait(50);
}
Serial.println(SLEEP_TIME);
Serial.println(SLEEP_TIME_W);
Serial.println(SLEEP_TIME_W2);
Serial.print("GO TO SLEEP FOR: ");
Serial.print(SLEEP_TIME_W);
Serial.println(" MILLISECONDS");
}
oldmillis = millis();
}
}
if (timer_status == -1) {
if (switch_a == 1 || switch_b == 1) {
if (switch_a == 1) {
switch_a = 0;
digitalWrite(6, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(upMsg.set(switch_a));
wait(200);
}
if (switch_b == 1) {
switch_b = 0;
digitalWrite(25, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(downMsg.set(switch_b));
wait(200);
}
} else {
readBatLev();
}
}
}
void disableNfc() {
NRF_NFCT->TASKS_DISABLE = 1;
NRF_NVMC->CONFIG = 1;
NRF_UICR->NFCPINS = 0;
NRF_NVMC->CONFIG = 0;
}
void turnOffAdc() {
if (NRF_SAADC->ENABLE) {
NRF_SAADC->TASKS_STOP = 1;
while (NRF_SAADC->EVENTS_STOPPED) {}
NRF_SAADC->ENABLE = 0;
while (NRF_SAADC->ENABLE) {}
}
}
void myTone(uint32_t j, uint32_t k) { // Определяем функцию myTone
j = 500000 / j; // Меняем значение переменной j на время одного полупериода в мкс
k += millis(); // Меняем значение переменной к на время завершения вывода сигнала
while (k > millis()) { // Выводим сигнал, пока не истечёт указанное время
digitalWrite(28, HIGH); delayMicroseconds(j); // Устанавливаем на выходе i уровень логической «1» на время j
digitalWrite(28, LOW ); delayMicroseconds(j); // Устанавливаем на выходе i уровень логического «0» на время j
}
}
void playSound0() {
//wait(500);
myTone(1300, 50); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц
wait(20); // Ждём 0,1 сек
myTone(1300, 50);
wait(50);
}
void playSound() {
//wait(500);
myTone(700, 30); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц
wait(10); // Ждём 0,1 сек
myTone(700, 30);
wait(10);
myTone(700, 30);
wait(50); // Ждём 0,1 сек
//myTone(500, 30);
//wait(500);
}
void playSound1() {
//wait(500);
myTone(200, 10); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц
wait(10); // Ждём 0,1 сек
myTone(400, 5);
wait(30); // Ждём 0,1 сек
//myTone(500, 30);
//wait(500);
}
void playSound2() {
//wait(500);
myTone(400, 10); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц
wait(10); // Ждём 0,1 сек
myTone(200, 5);
wait(30); // Ждём 0,1 сек
//myTone(500, 30);
//wait(500);
}
void readBatLev() {
//NRF5_ESB_startListening();
wait(200);
temp = analogRead(29);
vcc = temp * 0.0033 * 100;
battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
if (battery < 0) {
battery = 0;
}
if (battery > 100) {
battery = 100;
}
sendBatteryLevel(battery);
wait(200);
send(powerMsg.set(temp));
wait(200);
NrfRSSI = transportGetReceivingRSSI();
NrfRSSI2 = map(NrfRSSI, -85, -40, 0, 100);
if (NrfRSSI2 < 0) {
NrfRSSI2 = 0;
}
if (NrfRSSI2 > 100) {
NrfRSSI2 = 100;
}
send(msgRF52RssiReceiv.set(NrfRSSI2));
wait(200);
}
На вопросы по данной разработке, по трудностям в ваших разработках на ардуинках и Mysensors всегда придут на помощь в нашем телеграмм чате.
Комментарии (102)
Sleuthhound
28.05.2019 20:22Классно, что тут сказать. Осталось разработать какие-нибудь силовые блоки с диммированием и без, патрон для лампы и самые основные кубики для домашней автоматизации будут готовы. А схема выключателя доступна или я поглядел ссылку?
olartamonov
28.05.2019 22:401) TTP223 не нужны
2) повышающий преобразователь не нужен
3) 40 мкА — это очень многоdernuss
28.05.2019 22:55потребление во сне 40мкА
Это реально странный сонolartamonov
28.05.2019 23:02Там либо половина периферии в nRF включена зачем-то во сне, либо автор измерял с подключённым SWD (частая ошибка; через него течёт).
Berkseo Автор
28.05.2019 23:12-2ни то ни другое, угомонитесь,..
olartamonov
28.05.2019 23:18Ну так расскажите заинтересованной публике, что же конкретно у вас там жрёт столько.
Вы же ведь знаете ответ на этот вопрос?Berkseo Автор
28.05.2019 23:38я естественно знаю, но лично вам желания обьяснять это нет, вроде бы "знайка" должен уметь понимать даташиты?
olartamonov
28.05.2019 23:49+1В даташите сон с RTC и full RAM retention — 2,2 мкА (раздел 17.1.1 на стр. 75).
По 3 мкА максимум у вас жрёт каждый из TTP223. Около 1 мкА у вас жрёт спящая TPS610981.
Всё, что свыше этого, жрёт какой-то неизвестный нам говнокод или… all, как это же называется применительно к схемотехнике?
Лежащее прямо сейчас передо мной на столе устройство, в котором ещё есть GPS, FDC1004 (вы таки хотите поговорить за калибровку емкостных датчиков?), акселерометр, LoRa, линейный LDO, операционник для измерения напряжения аккумулятора и чёрт в ступе, и то жрёт во сне меньше ваших 40 мкА.Berkseo Автор
28.05.2019 23:59ну вот что у вас там лежит на столе то и " курите", а к первому добавите два прерывания через gpio, тк на встроенном компораторе два не реализовать, ко второму добавьте фаст мод., не ленитесь еще почитать даташит на повышайку, питаник которое держит мк эио еще 4 мка в ту кучу. А вообще я и в этой теме повторяю снова Вам — Отец это раздел DIY, слелано руками, энтузиастами. Примите новопаситику и успокойтесь, вам еще ваши лекции читать. За сим откланиваюсь...
olartamonov
29.05.2019 00:04ну вот что у вас там лежит на столе то и " курите", а к первому добавите два прерывания через gpio, тк на встроенном компораторе два не реализовать, ко второму добавьте фаст мод.
Раздел 21.5.1 «GPIOTE Electrical Specification» того же документа чёрным по белому сообщает мне, что на два прерывания мне надо добавить аж целых 0,1 мкА.
Так что всё-таки, боюсь, штаны с рукавами.dernuss
29.05.2019 00:12Да ладно. Как хочет, 40 мкА, так 40.
Мне больше импонирует идея с кинетическими выключателями, чтобы вообще без батареек…olartamonov
29.05.2019 00:17Дорого.
Когда батарейка распространённая (т.е. строго CR2032, без вариантов) и живёт по 2-3 года, покупатель предпочтёт батарейку.
А при виде дизайна того же EnOcean он ещё и расплачется, вспомнив босоногое детство (и тут возникает вторая проблема: блок с батарейным питанием можно сделать в виде коробки, к которой подключаются внешние кнопки и которая убирается под выключатель любого нравящегося покупателю дизайна).dernuss
29.05.2019 00:24Согласен, дороговато. Но дороговато просто потому что не массово.
Если будет массово, то (по моему мнению) будет сравнимо с решениями на CR2032. Так как ни чего особенного в этом решении нет.
Есть кстати дизайны лучше, например например
olartamonov
29.05.2019 00:26Не будет; держатель под батарейку стоит единицы центов, других расходов нет — а energy harvesting всегда дорогой, ибо там преобразователи и накопители с весьма экзотическими характеристиками нужны.
dernuss
29.05.2019 00:32держатель под батарейку стоит единицы центов, других расходов нет
Есть, сама CR2032. Ну и кроме того сам элемент ещё и менять надо, что тоже время\деньги
а energy harvesting всегда дорогой, ибо там преобразователи и накопители с весьма экзотическими характеристиками нужны.
Да там что то вроде фонарика жучка. Ни чего сверхестественногоolartamonov
29.05.2019 00:54Есть, сама CR2032
Меньше 10 центов оптом.
Да там что то вроде фонарика жучка. Ни чего сверхестественного
При ходе в районе 2-4 мм — это весьма короткий импульс сложной формы, который надо всосать и запасти с минимальными потерями, а потом отдать в виде постоянного напряжения (если вы имели когда-либо дело даже с банальным резервным источником на ионисторе, без всякого харвестинга, вы уже представляете себе, какие это песни с плясками — вытащить из него хотя бы 50 % паспортной энергии в реальном устройстве).dernuss
29.05.2019 01:03Меньше 10 центов оптом.
А если таких выключателей в доме штук 20?
Время (чтобы поменять элемент) и нервы (при его отказе) дороже, ну как мне кажется.
При ходе в районе 2-4 мм
Вполне достаточно чтобы дать короткий радиоимпульс.
Посмотрите на плату, я не вижу ни чего особенно дорогово. Всё дело в массовостиolartamonov
29.05.2019 01:16Тут такое дело: во всех этих тредах про умный дом я — один из очень немногих людей, у которых это реально стоит и работает а) далеко не первый год, б) на всех без исключения выключателях и лампах в квартире и в) не из готовых покупных зигбишных коробок с полки в Леруа-мерлене.
Мне лень в час ночи ходить считать, но в конфигураторе 29 каналов, в каждом выключателе 3 канала, в некоторых выключателях используются не все — т.е. всего у меня должно быть 10-12 выключателей.
Живут они на CR2032 от 2-3 до 4-5 лет, в зависимости от частоты использования, и это совершенно не напрягает (тем более, в нормальной системе мы подразумеваем, что выключатель сам умеет заранее сообщать, что скоро пора поменять батарейку).
Вполне достаточно чтобы дать короткий радиоимпульс
Нет. Вам надо разбудить процессор и приёмопередатчик (а любое радио в качестве источника опорной частоты использует кварцы, которые раскочегариваются не мгновенно), достоверно определить, какая кнопка нажата, отправить пакет в радио, подождать подтверждения доставки, при его отсутствии отправить повторный пакет…
Собственно, уже на перепосылке недошедшего у харвестеров начинаются большие проблемы.
А ведь есть ещё кнопки, которые пользователь хочет удерживать.
Посмотрите на плату, я не вижу ни чего особенно дорогово. Всё дело в массовости
Массовость — это в электронике как минимум сотни миллионов экземпляров. Экзотический харвестер, используемый ровно в одном приложении, никогда до реальной массовости не поднимется.dernuss
29.05.2019 01:31Тут такое дело: во всех этих тредах про умный дом я — один из очень немногих людей
Да, я понимаю что с CR2032 девайсы пока (возможно ещё долго) будут в теме.
(тем более, в нормальной системе мы подразумеваем, что выключатель сам умеет заранее сообщать, что скоро пора поменять батарейку)
Честно говоря, в моём понимании умный дом, это не дом, который мне сообщает о необходимости сменить батарейку в выключателе. Но, это только моё скромное мнение.
Нет. Вам надо разбудить процессор и приёмопередатчик
Скорее запустить процессор… Ну и далее всё конечно понятно…
Собственно, уже на перепосылке недошедшего у харвестеров начинаются большие проблемы.
У некоторых подобного рода выключателей первый радиопакет отправляется при нажатии, второй при отпускании кнопки. Так что варианты есть.
olartamonov
29.05.2019 01:47У некоторых подобного рода выключателей первый радиопакет отправляется при нажатии, второй при отпускании кнопки
Это вообще про другое.
Есть три варианта отработки выключателем воздействия:
1) нажатие
2) удержание
3) отпускание
Они не взаимозаменимы, это раз, и каждый пакет должен доставляться с подтверждением, это два.
То есть, например, на опускании жалюзи или плавной регулировке яркости вы не можете рассчитывать на пакет при отпускании, потому что начало и конец воздействия — это два разных действия, и случиться должны оба.
И да, при среднем потреблении устройства в пределах 10 мкА (среднем — это значит с учётом расходов энергии на отправку пакетов, обнаружение нажатий и т.п., а не просто в глухом сне), в чём нет совершенно ничего нереалистичного, CR2032 с её 260 мА*ч хватит на 3 года.
Это значит, одну батарейку при 20 выключателях в доме вы будете менять примерно раз в пару месяцев — если выключатель сконструирован так, что это можно сделать быстро, то это, мягко говоря, не самое напряжное действие по уходу за домом. По крайней мере, сильно менее затратно, чем любая уборка, стирка, глажка и вытряхивание жмыха из кофемашины.dernuss
29.05.2019 01:54Они не взаимозаменимы, это раз, и каждый пакет должен доставляться с подтверждением, это два.
А что если базовая станция не отвечает? Сколько раз нужно слать пакеты? сколько ждать ответа? CR2032 быстро сядет если слать запросы постоянно…
Так может есть слать пакет 2 раза без подтверждения не сильно хуже?
Это значит, одну батарейку при 20 выключателях в доме вы будете менять примерно раз в пару месяцев
Честно говоря… Я пока не готов к такому умному дому, чтобы раз в пару месяцев менять батарейки. Лучше пусть у меня будет глупый дом)olartamonov
29.05.2019 07:48А что если базовая станция не отвечает? Сколько раз нужно слать пакеты?
Два-три.
сколько ждать ответа?
Зависит от типичных задержек в используемой сети. Для «звезды», например, задержка ответа почти нулевая.
Так может есть слать пакет 2 раза без подтверждения не сильно хуже?
Во-первых, это увеличенный расход батарейки (и ваш харвестер уже не потянет). Во-вторых, двукратная загрузка эфира. В-третьих, увеличение времени отклика системы, т.к. шлюз вызванную принятым пакетом команду не может отправить в эфир раньше, чем устройство выдаст оба пакета, даже если он принял первый же — иначе будут коллизии.
Так, как вы хотите, сделано в оригинальной прошивке самой первой версии Ноолайта (там нет обратной связи вообще) — и работает оно посредственно.dernuss
29.05.2019 08:55Так я предлагаю да, без обратной связи просто слать два пакета, один при нажатии, второй при отпускании. Не вижу большой разницы если и вы шлёте 2..3 пакета с подтверждением.
По сути двухкратная загрузка эфира и у вас, так как подтверждение требуется.olartamonov
29.05.2019 09:04И что у вас будет с жалюзи с алгоритмом «едем, пока кнопку держат», если второй пакет потерялся? Уедут в пол?
dernuss
29.05.2019 09:08Так и у вас второй (третий) может потеряться.
Не вижу разницыolartamonov
29.05.2019 10:26Вероятность потери трёх пакетов достаточно невысока.
С единичными потерями в умном доме с 2-3 десятками устройств при не слишком удачном протоколе вы будете встречаться практически ежедневно.dernuss
29.05.2019 11:19ну 3 пакета конечно лучше чем 2, нет сомнений.
С батарейкой я бы вообще 5...10 повторений сделал, если бы не дождался ответа.
gresolio
29.05.2019 13:20Мне тоже больше нравится вообще без батареек. Недавно наткнулся на толковый канал «Электроника в объективе», там есть парочка обзоров таких выключателей с подробным техническим разбором:
Беспроводные выключатели без батареек2018-10-22 Беспроводной выключатель от Zemismart без батареек
Berkseo Автор
29.05.2019 00:15ну это вам сообщает, вы мне чем то сказочника местного напоминаете, в реале иначе.… на ваши девайсы аля "руки из плеч" думаю посмоиреть будет затруднительно, тк подозреваю что их нет в природе.
olartamonov
29.05.2019 00:21Конечно, откуда им в природе-то взяться.
Berkseo Автор
29.05.2019 00:29ну вот его и тестируйте, а я бы потом почитал статейку о разработке сего девайса, где было бы понятно что вы автор.
olartamonov
29.05.2019 00:33Я несколько сомневаюсь, что у меня когда-либо возникнет какое-либо желание рассказывать вам про этот проект, но в рамках «закину вам еше чтоб бомбануло сильнее» скажу, что во всей вселенной пахнет нефтью.
Berkseo Автор
29.05.2019 00:36я так почему то и предпологал;)
olartamonov
29.05.2019 00:50Да вы запомните просто логотип и форму устройства. В новостях будет ещё появляться неоднократно.
Berkseo Автор
29.05.2019 00:56логотип запомню, «крест во все пузо». боюсь спросить… какова ваша роль в данном проекте? что тестируем?… или любуемся образцом/
olartamonov
29.05.2019 01:19Роль руководителя проекта и главного конструктора, а что?
Ничего не тестируем, зачем нам что-то тестировать? Наша задача — устройство сделать в соответствии с пожеланиями заказчика, а не тестировать что-то там.
Berkseo Автор
28.05.2019 23:04много хотелок, все пытается немного подожрать, но есть куда стремится, там реально мка 15 скинуть…
RathemSerg
29.05.2019 16:08TTP и повышающий преобразователь — «не нужны» они для чего? для какого изделия они не нужны и чем это обоснованно?
40мкА потребление — это очень много для каких целей и при каких условиях?olartamonov
29.05.2019 16:22Очевидно, для изделия, целей и условий, описываемых в данной статье.
RathemSerg
29.05.2019 16:29если оценивать объективно — это совершенно неверные по своей сути и по подаче претензии. описан в теории и воплощён на практике нормальный «набор» технологий и\или компонентов. и кнопки сенсорные и повышайка.
просто не следует смотреть на вещи однобоко и со своей колокольни.olartamonov
29.05.2019 16:33Если задачей автора было «у меня есть TTP223, мне надо сделать кнопку с их использованием», то он мог самостоятельно сообщить нам об этом.
Ну, не знаю, в качестве курсовой в институте ему такое задание дали. Так себе задание, но что делать, не отчисляться же.
Автор нам, однако, вместо этого сообщил, что TTP223 он использует потому, что без них не умеет.
Это не значит, что без них нельзя, а также что если кто-то не умеет делать круглые колёса — то велосипед с квадратными на практике тоже вполне нормальный получится.Berkseo Автор
29.05.2019 16:52Ну так «дядя» научи, сделай это на nRF52, запили видосик, пока все что я увидел это кастомная наклейка на старый неолайт, недоадминка очень впечатлила, можете эти ваши наработки сделать темой вашей будующей лекции. Что действительно у вас выросло так это скил троля :))) может Вам профиль в реале сменить?
olartamonov
29.05.2019 17:10Всему свое время, и время всякой вещи под небом:
время рождаться, и время умирать; время насаждать, и время вырывать посаженное;
время убивать, и время врачевать; время разрушать, и время строить;
время плакать, и время смеяться; время сетовать, и время плясать;
время разбрасывать камни, и время собирать камни; время обнимать, и время уклоняться от объятий;
время искать, и время терять; время сберегать, и время бросать;
время раздирать, и время сшивать; время молчать, и время говорить;
время любить, и время ненавидеть; время войне, и время миру.
Придёт время и для статьи.
RathemSerg
30.05.2019 09:36задачей автора было что-то слепить, он это сделал. так или иначе, но это работает, причём применённые компоненты использованы согласно их предназначению. никаких намёков про массовое изготовление или обучение других электронике или про изготовление убийцы ноолайта нет… вообще нет. пост из раздела «диайвай», каким вообще боком тут можно осуждать человека, что он не до конца выжал микроамперы и батарейка будет работать год вместо 3?
вообще же, конкретно с вами, складывается просто фантастическая ситуация, раньше такого наверное не было или уж во всяком случае сложно было представить. это или пижонство или проф-деформация на фоне круглосуточного обсуждения одной темы.
с одной стороны — есть адекватные посты про технологии или тонкости вроде ардуины и электродов на голову без изоляции. с другой — совершенно дурные комментарии к постам о самоделках о том, что автор говно и вообще можно поставить батарейку за 10 центов. то, что стоимость головняка от оптимизаций и доработок в домашнем применении никогда не окупится — тихо умалчивается.
другой пример — лекции. с одной стороны есть вроде как много полезной информации, подаваемой в хорошем формате. с другой — совершенно неуместные баталии «arduino и стм32» + подмена понятий и сравнение вещей из разных областей применения.
ну а чтобы не слушать непонятных ноунеймов из интернетов — у автора EEVBlog есть замечательное видео на эту тему, AVR vs STM vs PIC. и там он озвучивает ровно то, чему учили в правильных вузах — инженер подбирает инструмент под задачу. тот, который подойдёт под проект и под разработчика. все остальные — не инженеры а просто фанбои, и не важно сколько беспроводных платок на NRF и с потреблением 2мкА было собрано.olartamonov
30.05.2019 21:36задачей автора было что-то слепить, он это сделал
«Сделяль». При такой задаче правильно писать «сделяль».
При этом автор со своими статьями сюда ходит рекламировать сообщество MySensors, в котором нам должны помочь решить наши проблемы (решать будут с таким же уровнем, как у автора?), а также абсолютно нетерпимо относится к любому намёку на критику.RathemSerg
31.05.2019 13:12допустим мастер спорта в зале набьет лицо начинающему тренеру. с постановкой объяснения «при становой тяге можно ногу вывернуть на 3 градуса, мне так удобнее». как можно назвать такого человека… быдло? урод?
а я вот зашёл почитать про сенсорные выключатели и увидел полную аналогию такого цирка но просто в области электроники. если автор пытается продать какой-то шлак в группе или ещё где-то то нужно просто так и написать. либо конкретно указать какие костыли можно переделать «правильно» либо хотя бы указать в чём именно проблема. а вместо этого получаем просто пафосные отсылки почитать даташит, какие-то сравнения с дипломами и яростное желание показать что «сделяль наколенке».
p.s. просмотрел «рекламу». да, возможно озвученные девайсы действительно сделаны не топово (по виду), но они себя позиционируют в т.ч. и как опенсорс. какие тут могут быть претензии, хотя бы в теории....?
Berkseo Автор
28.05.2019 22:581) покажите пример стабильной реализации внутренних тачев, даташиты мы все умеем читать, сенсорники и на аврах есть, таже атмега 328.
2) видимо по вашему мнению это вытекает из даташита свежепрочитанного, ну так на борту ттпшка, а у нее номинальное 3в, пьезоизлучатель, у него 3в, ржб леды, как вы красиво предлагаете ограничить их потребление, да что бы они светили как надо через стекло. А так да, нрфка может и от 1.8 робить.
3) Ну как смогли, не будьте голословными, покажите Ваш пример реализации.
ps… где то у меня скрин завалялся с вашим коментом из другой моей темы…olartamonov
28.05.2019 23:10покажите пример стабильной реализации внутренних тачев
А чего там нестабильного может быть? Есть две типовые реализации, работающие на практически любом контроллере — заряд-разряда пада через высокоомный резистор или емкостной делитель чисто на переключении входа АЦП. ЕМНИП у nRF52 любой AIN можно подключить на VDD (для измерения напряжения питания), соответственно, реализация с емкостным делителем здесь наиболее уместна — 0 (ноль) внешних компонентов.
Алгоритм обработки сигнала в случае выключателя прост как валенок — читаем каждые 100 мс, любое запороговое изменение уровня, наблюдающееся в трёх последовательных чтениях, считаем срабатыванием.
ну так на борту ттпшка, а у нее номинальное 3в, пьезоизлучатель, у него 3в, ржб леды
ТТП не нужна, пьзоизлучатель раскачивается мостовым включением (но вообще-то я несколько сомневаюсь, что вам в выключателе его номинальные децибелы вообще нужны — вы им по ночам родных и близких будить собираетесь?), RGB-светодиоды — так вам шашечки или ехать? Пользователь вашего чуда задолбается же батарейки менять.Berkseo Автор
28.05.2019 23:20рассуждать это одно дело, реализовать совсем другое, ткните хотя бы в невашу реализацию. меня устраивает внешний тач, который сам по себе и колибруется и стабильно работает.
раскачивается, ну ну, раскачайте что бы на паре вольт отчетливо через корпус 40 милисекундный клик сделать отчетливо.
мне и шашечки и ехать, мне нужны леды, поэиому они там. закину вам еше чтоб бомбануло сильнее, в следубщей версии и вибро будет..
olartamonov
28.05.2019 23:36Какое к чёрту «колибруется», что вы вообще несёте? У вас устройство, работающее при комнатной температуре с событиями продолжительностью в единицы секунд, там нечему «колиброваться».
Возьмите в руки копеечный ноолайтовский выключатель с сенсорными кнопками, сделанный на убогом 8-ногом PIC12 с 25 байтами ОЗУ и работающий по три года на одной CR2032, и сравните со своим творением.Berkseo Автор
28.05.2019 23:46ну я вас опять к даташитам отправляю.
ненашел выключателя с заявленными характеристиками, ткните, нестесняйтесь. а там посмотрим что там у них влияет на три года жизни на 200 мА. думаю не в сенсорниках дело.olartamonov
28.05.2019 23:51Вас в гугле совсем-совсем забанили?
habr.com/ru/company/boxowerview/blog/165131
lenz1986
29.05.2019 10:52Ноолайт на старте был копеечный… И не три года он работает… я его как воткнул в 2013… так и пашет :) в двух квартирах освещение полностью с него управляется. Щас штука дорогая…
olartamonov
29.05.2019 11:06Ну он на старте был и примитивным также весьма, я был сильно удивлён, обнаружив, что его некоторые инсталляторы умных домов за деньги всерьёз используют в оригинальном виде.
Но меня в данном случае удивляет, как люди на жирнейшем Cortex-M4, увешанном периферией вообще на любой вкус, не могут повторить то, что было давно сделано на крохотном PIC12, и считают это своим достижением.
Ещё года три — и дойдём до того, что нажатие кнопки в выключателе нейросеть определять будет.
alexesDev
28.05.2019 23:28Завидую прямоте ваших рук, только как программисту больно смотреть на море копипасты в коде =)
Berkseo Автор
28.05.2019 23:39спасибо, как програмист вы про функции отрубающие ненужный функционал?
nikerossxp
29.05.2019 00:48Тупой вопрос, но зачем оно надо, когда есть:
ru.aliexpress.com/item/EU-UK-standard/32845066316.html
И даже с поддержкой умного дома\собсвенным пультом. Правда, с пультом очень вифи не любит, у меня сам включался\выключался.
Berkseo Автор
29.05.2019 00:52там по ссылке того чего мне нужно было нет. в два раза меньше, нужные мне характеристики, програмируемый
Coriolis
29.05.2019 08:13А это удобно, проходя мимо целитсья по маленькому кружку пальцем? Большой-то выключатель удобмен тем что достаточно зацепить край кнопки чтобы нажать.
olartamonov
29.05.2019 08:32Нет, неудобно.
У меня сенсорные выключатели — все с выступающей рамкой и кнопками по углам, т.е. ткнуть надо внутрь угола рамки, и это можно сделать на ощупь.Coriolis
29.05.2019 08:34Поделитесь моделью, будьте добры. Мне предстоит закупать на всю квартиру, муки выбора.
olartamonov
29.05.2019 08:39У меня не совсем покупные — на базе первой модели Ноолайта, в которой перепилен весь софт, ибо родной был ужасен, и я его никому не порекомендую.
Нынешние вроде удовлетворяют требованию, но в руках я их не держал — и насколько хорошо работают, не знаю.
Да, ещё один плюс их конструкции — поверх платы лежит не красивое стекло, а пластиковая плёнка, которую можно легко поменять на свою, распечатав на ней, что делает каждая кнопка. Ибо в умном доме, где конкретная кнопка может вызывать сценарии, групповые события, управлять чем-то через половину квартиры и т.п., запоминать, что делает каждый из вот этих неподписанных красивых кружочков на очередном Livolo — развлечение почище попадания в них пальцем в темноте.lenz1986
29.05.2019 10:55А что в софте изменено и что не понравилось, у меня как работал так и работает. Ну и если вдруг софтом поделитесь… ;)
olartamonov
29.05.2019 11:11Вся привязка датчиков, силовых модулей, реализация логики их взаимодействия и настройка — через центральный шлюз, для которого пришлось нормально переписать драйвера их USB-ресиверов и набросать простой веб-интерфейс.
Драйвера: github.com/olegart/noolite
Интерфейс: github.com/olegart/noolite-php
NB: по дате последнего коммита очевидно, что проект давно не поддерживается, поэтому, если у них какие-то новые ресиверы, API и т.п. — это не ко мне. Ну и кривизну их радиопротокола это не лечит, но там уже надо поддерживать свою прошивку на пики, что я точно делать не буду уже никогда.lenz1986
29.05.2019 11:13ааа… эту часть я сам в первые же дни переделывал… я уж шальным делом про протокол в пиках подумал было. :)
olartamonov
29.05.2019 08:46Иллюстрация:
Это корпус от старого, первого ещё Ноолайта, висит на кухне, при этом левая нижняя кнопка выключает свет в прихожей в нескольких метрах от.
Многие не задумываются, но если такое сделать на Livolo, в котором три кнопки — просто три кружочка, то родные и близкие любить вас сильнее не станут, а гости будут тупо нажимать каждый раз наугад.Coriolis
29.05.2019 08:49Понятно, спасибо за информацию.
Жаль у ноолайта обратной отдачи нет, просто сенсор. Этим выгодно отличается вариант автора.
Вот бы здорово чтобы вместо зумера был вибратор, как в мобильных телефонах. Звук громкий а вот вибрация не такая громкая зато тактильно как буд-то бы нажал.olartamonov
29.05.2019 08:53Там светодиоды яркие, их вспышку очень хорошо видно.
Ну и главной проблемой, повторюсь, у ноолайта был софт — протокол кривоват, а шлюз тогда вообще был бессмысленным недоразумением. Что сейчас — не знаю, утратил интерес к чужому железу.
lenz1986
29.05.2019 11:01А в целом по железке. Пару вопросов. Штука прикольная, но для чего повышайка? Пару раз прошелся и не понял, вроде вся периферия успешно работает от 2вольт, а это по сути нижний порог.
А так реализация классная, только ужать бы потреб поменьше, нрфка 3мка когда дрыхнет, два сенсора по 2 мка. 11ма на передачу. пару тройку лет проживет. Ну и по хорошему убрать майсенсорс, там никак не выходит 10мс передача. Голый код на С выдает 10мс при 2мбит канале, если слать 20 байт.
siargy
29.05.2019 11:16грамарняша смотрит на тебя с осуждениемвыключатель c стеклянной
со стекляннойaugorelov
29.05.2019 15:06Я понимаю, что Berkseo пришел на Хабр рекламировать свои изделия, как и на другой сайт. Я ничего против этого не имею. Но для «DIY или Сделай сам» хочется видеть схему электрическую для изучения, повторения, изменения и т.п.
P.S.Я прекрасно понимаю, что карму мне могут подпортить за такой комментарий.Berkseo Автор
29.05.2019 16:06-1Ну Вы тогда не правильно понимаете, смысл их рекламировать??? что бы продавать?… что то да продавал поначалу из своего через ебай, но это настолько геморойно, что сейчас если только голые платы. А вообще мне нравятся ваша логика — выкладывать исходники что бы рекламироватся :))
Меня больше интересуют новые люди в сообществе…augorelov
29.05.2019 16:52выкладывать исходники что бы рекламироваться
Знаю ряд компаний ведущих коммерческую деятельность по изготовлению и продаже под своими брендами электронных и электротехнических изделий с открытыми исходными кодами для микроконтроллеров, применяемых в изделиях. У одних компаний они доступны в полном объеме, у других только некоторые модули.
Обрисую Вам несколько ситуаций:
1. Разработчик встраиваемых систем никогда не использовал в своей работе IDE от Arduino и начинать использовать не собирается, как ему быть без схемы электрической?
2. Самодельщика не устроил форм-фактор предлагаемого Вами изделия, как ему быть без схемы электрической?
3. Самодельщика не устроило питание от батарейки “таблетка” предлагаемого Вами изделия и хочет перевести на питание от “пальчиковых” или “мизинчиковых”, как ему быть без схемы электрической?
4. Схемотехника не устроила трассировка платы, как быть без схемы электрической?
Понятно, что разработчику встраиваемых систем и схемотехнику не составит труда разработать свою схему или преобразовать из файлов Gerber в схему электрическую, с потерей на это время. Но как быть самодельщику?!j8kin
29.05.2019 15:23Видел такие выключатели на Али стоят в районе 1000р, к сожалению надо подводить рабочий ноль, т.е. простая замена обычных не получается без перепротягивания проводов.
Тут разве что форм-фактор меньше.Berkseo Автор
29.05.2019 15:58вообще это скорее пульт, примерно как проходные на батарейках например у соноффа.
puariha
29.05.2019 18:44а зачем использовать микроконтроллер и к нему приблуды в виде TTP223? программно нельзя было сделать сенсорную кнопку? и жрать будет меньше
iig
30.05.2019 08:49Можно ещё поинтересоваться, зачем собственно в 21 веке нужно именно сенсорную кнопку. Гостей озадачивать? :) Механические кнопки стоят почти ничего, нажимать можно не только пальцем, и есть киллер-фича — щелчок при нажатии.
Karlson_rwa
30.05.2019 01:16
А почему у вас герберы с фоткой не совпадают?Berkseo Автор
30.05.2019 01:28Там впоследствии был добавлен еще один IRLML6402TRPBF тк был упущен момент с рессетом, слишком долгое удержание кнопки reset приводило к сбросу пинания. а этот полевик перехватывает управление питанием
Berkseo Автор
30.05.2019 01:59Возьмите архив снова с гугл драйва, что то меня заливка насторожила у Q2 и Q4
BalinTomsk
Скажите где можно купить?
Berkseo Автор
у меня
Alex_nakhodka
Цена и где именно?
prilichny
и сколько стоит?