Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Habr сайтындагы "DIY же өзүң жаса" бөлүмүнүн бардык окурмандарына салам! Бүгүнкү макала TTP223 чипиндеги сенсордук өчүргүч жөнүндө болот | маалымат жадыбалы. Коммутатор nRF52832 микроконтроллеринде иштейт | маалымат жадыбалы, басылган антеннасы жана тышкы MHF17103 антеннасы үчүн туташтыргычы бар YJ-4 модулу колдонулган. Сенсордук өчүргүч CR2430 же CR2450 батарейкаларында иштейт. Берүү режиминде керектөө 8 мАдан көп эмес, уйку режиминде 6 мАдан көп эмес.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Бардык мурунку долбоорлор сыяктуу эле, бул дагы Arduino долбоору, программа Arduino IDEде жазылган. Аппараттын программалык камсыздоону ишке ашыруу Mysensors протоколуна негизделген | GitHub китепканалары, nRF5 тактасын GitHub колдойт Mysensors ичинде. Англис тилдүү коомчулук форуму - http://forum.mysensors.org, орус тилдүү коомчулук форуму - http://mysensors.ru/forum/
(окууну каалагандар үчүн - жазуулар, Сериялык протокол, API, протокол, талдоочу | жардам берүүнү каалагандар үчүн (салымдары) долбоорду иштеп чыгууда - жазуулар)

Сенсордук которуштуруу тактасы Deeptrace программасында Лазердик үтүктөө технологиясы (LUT) ыкмасын колдонуу менен кийинки өндүрүштү эске алуу менен иштелип чыккан. такта 60x60mm өлчөмдө иштелип чыккан (стандарттык айнек панели 80x80mm өлчөмдөрү бар). Схема Antenna журналынын беттерине басылып чыгып, "Len" параметри (максималдуу кубаттуулук) менен Bosch үтүкү менен 1.5 мм, 35 ​​мкм (башкасы жок болсо) эки тараптуу айнек булалуу фольга тактайына өткөрүлүп берилди.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Эттинг мурда 1.5 мл жылуу сууга 250 чай кашык пропорцияда даярдалган темир хлоридинин эритмеси менен жүргүзүлдү. Процесс 15 мүнөткө созулду.
DREMEL 3000 бургулоочу стендге орнотулган DREMEL 220 мини-бургу менен катмар аралык өтмөктөр үчүн жана аккумулятордун кармагычын бекитүү үчүн тешиктер 0,4 мм бургу менен, аккумулятор кармагыч үчүн тешиктер 1,1 мм бургу менен бургуланган. . Тактанын чектерин кесүү DREMEL 540 тиркемеси бар ошол эле мини-бургуч менен жасалды (Керүү тегерекчеси d=32.0мм). Бутоо респиратордо жасалган.
Оюлган тактайды калайлоо суу эритмесиндеги роза эритмеси (1 мл сууга 300 чай кашык кристаллдаштырылган лимон кислотасы) менен жасалган.

Ширелөө процесси бир саатка жакын убакытты талап кылды, көп убакыт зымды (калайланган, диаметри 0.4 мм) катмарлар аралык линиялар үчүн тешиктерге жумшады.

Тактай FLUX OFF аэрозолдук тазалоочу менен жуулган.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Аппараттын корпусунун конструкциясы үч өлчөмдүү компьютердик дизайн редакторунда ишке ашырылган. Иштин өлчөмдөрү 78,5 мм X 78,5 мм X 12 мм.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Корпустун жана батарейка бөлүкчөсүнүн капкагынын аяктаган модели STL форматында сакталган, андан кийин бул моделдерди SLA принтеринде басып чыгарууга даярдоо керек болчу (колдоолорду кошуу, багыттоо). Бул этапта кичинекей көйгөй пайда болду, анткени тиричилик SLA принтерлеринин басып чыгаруу аянты аз. Басып чыгаруу убактысына салыштырмалуу эң оптималдуу абалдагы аппарат корпусунун модели басып чыгаруу аянтынын өлчөмдөрүнө туура келген жок. Моделди 45 градуска жайгаштырганда, ал да капаланткан натыйжа берди, колдоонун салмагы дене моделинин салмагына барабар болду. Алдын ала кайра иштетүү фактысы менен макулдашып, алдыңкы капталдардын бирине таяныч жасап, моделди вертикалдуу басып чыгаруу чечими кабыл алынды. Денени басып чыгаруу 5 микрон катмары менен 50 саатка созулду. Андан кийин, иштетүү абдан майда бүртүкчөлүү кум кагазды колдонуу менен ишке ашты (санды жазбайм, анткени мен билбейм :)). Батареянын капкагын басып чыгарууга 40 мүнөт кетти.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Aliexpressтин айнек панелдери желимделген пластикалык рамка менен сатылат, алкакты алып салууда эч кандай көйгөйлөр болгон эмес. Мен кадимки фен менен алдын ала ысыткандан кийин айнек панелди алып салдым.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

LED арткы жарыгы үчүн диффузор 3M 9088-200 акрил клей менен эки тараптуу скотчтан жасалган. Флуоресценттик жарыктандыруу үчүн бир нече материалдарды тандоо керек болчу, кытайлык скотч жана ата мекендик Luminofor компаниясынан ленталарга кесилген жабышчаак кагаз. Тандоо ата мекендик өндүрүүчүнүн пайдасына жасалган, менин сезимдерим боюнча, ал жаркыраган жана узак жаркыраган. Үстүнө 3М 9088-200 эки тараптуу скотч менен флуоресценттүү пигменттүү квадрат кагаз чапталган.

Айнек 3M VHB 4910 акрил клей менен эки тараптуу скотч колдонуу менен коммутатор корпусуна чапталган.
Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

капкак бурамасы M 1,4 X 5 мм менен белгиленген.

Аппараттын баасы 890 рублди түзгөн.

Андан кийин программанын бөлүгү келди. Кээ бир көйгөйлөр бар болчу. Көрсө, TTP223 сенсор микросхемалары турукташтырылган 3.3V электр булагы менен жакшы иштейт жана кубаты жакшы заряддалган батарейкадан түз иштетилгенде анча жакшы эмес. Түзмөктү 2.5 вольттун тегерегинде электр энергиясы менен иштеткенде, ошондой эле Mysensors презентациясын иштеп чыгууда кошумча "чыгаруудан" кийин, TTP223 микросхемасы (калибрлөөдөн кийин дароо) МКнын үзгүлтүккө учурашын жаратты, анткени ал активдүү триггер менен болгон.

Микросхеманы электр менен камсыз кылуу схемасы өзгөртүлдү (gpio MK менен TTP223 кубаттуулугун башкаруу), кошумча жер менен камсыз кылынды жана rgb линияларында (сийимдик сенсор тактасынын башка тарабында иштейт) каршылыгы жогору болгон резисторлор алмаштырылды. Ал ошондой эле программалык камсыздоого кошулган: Mysensors алкагын ишке киргизгенден жана презентацияны иштеп чыккандан кийин сыйымдуулуктун микросхемасынын кубаттуулугун активдештирүү. Кубат колдонулганда TTP223 чиптин автокалибрлөө кечигүү эки эсеге көбөйдү. Бул өзгөрүүлөрдүн баары бул көйгөйдү толугу менен жок кылды.

Программанын кодун көрүүдөн мурун, мен сизге Mysensorsдогу эскиздердин негизги түзүмү менен таанышууну сунуштайм.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}

void setup()
{

}

void presentation()
{
//Тут происходит презентация ноды и ее сенсоров на контролере через маршрутизатор
sendSketchInfo("Name of my sensor node", "1.0"); // презентация названия ноды, версии ПО
present(CHILD_ID, S_WHATEVER, "Description"); // презентация сенсоров ноды, описания сенсоров
}

void loop()
{

}

Сенсордук которуштуруу программасынын сыноо коду:test_sens.ino
/**
ТЕСТОВЫЙ СКЕТЧ СЕНСОРНОГО ВЫКЛЮЧАТЕЛЯ С ПРЕРЫВАНИЯМИ НА NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

Которуу аппараттын арткы бетинде сенсордук баскычы жана такт баскычы бар. Бул такт баскычы тейлөө режимдери, абадан байланышуу режими жана түзмөктү баштапкы абалга келтирүү үчүн колдонулат. Баскычтын темирге каршы секирүү өзгөчөлүгү бар. Сыйымдык датчиктин сызыгы жана такт баскычынын сызыгы Шоттки диоддору аркылуу туташтырылган жана аналогдук пин p0.05 менен туташтырылган, ошондой эле сыйымдуулук сенсорунан жана такт баскычынан МК пиндерине p0.25 жана p0.27 линиялары бар. .0.05 p0.05 XNUMX пиндеги үзгүлтүккө учуратуудан кийинки абалды окуу үчүн. PXNUMX пининде EVENTS_UP аркылуу компаратор (NRF_LPCOMP) аркылуу үзгүлтүккө учуратуу иштетилген. Мен маселени чечүү үчүн илхам алдым бул жерде и бул жерде.

Которуу Mysensors тармагына кошулган, аны Majordomo акылдуу үй контроллери башкарган (долбоордун веб-сайты)

StatusUpdate ыкмасына которууну кошуу үчүн PHP коду

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

Жыйынтыгын видеодон көрүңүз

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кийинчерээк күчөтүүчү конвертер менен вариант жасалды, бирок бул TTP223 сыйымдуулук микросхемасынын иштешине байланыштуу эмес, батареянын иштөө мөөнөтү боюнча баскычтарды басканда жакшы жана бирдей жарыкка көбүрөөк каалоо бар.

карооКошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Github долбоору - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Орус тилинде коомдук сайт Mysensors

Mysensors Telegram чаты — Mysensors менен көйгөйлөрдү тез чечүү, кеңештер, ыкмалар, такталарды орнотуу, Arduino IDEде atmega 328, stm32, nRF5 микроконтроллерлери менен иштөө — @mysensors_rus

Кээ бир сүрөттөрКошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Кошумча флуоресценттик жарыгы бар зымсыз сенсордук өчүргүч

Source: www.habr.com

Комментарий кошуу