Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Salamu kwa wasomaji wote wa sehemu ya "DIY au Jifanye Mwenyewe" kuhusu Habr! Nakala ya leo itahusu swichi ya kugusa kwenye chip ya TTP223 | karatasi ya data. Swichi hufanya kazi kwenye kidhibiti kidogo cha nRF52832 | karatasi ya data, moduli ya YJ-17103 yenye antenna iliyochapishwa na kontakt kwa antenna ya nje ya MHF4 ilitumiwa. Swichi ya kugusa inafanya kazi kwenye betri za CR2430 au CR2450. Matumizi katika hali ya kusambaza sio zaidi ya 8 mA, katika hali ya kulala sio zaidi ya 6 µA.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Kama miradi yote ya awali, hii pia ni mradi wa Arduino, mpango umeandikwa katika Arduino IDE. Utekelezaji wa programu ya kifaa unategemea itifaki ya Mysensors | Maktaba za GitHub, Msaada wa bodi ya nRF5 GitHub katika Mysensor. jukwaa la jamii la lugha ya Kiingereza - http://forum.mysensors.org, jukwaa la jamii la lugha ya Kirusi - http://mysensors.ru/forum/
(Kwa wale wanaotaka kusoma - Nyaraka, Itifaki ya Serial, API, Itifaki, Mchanganuzi | kwa wale wanaotaka kusaidia (michango) katika maendeleo ya mradi - Nyaraka)

Bodi ya kubadili kugusa ilitengenezwa katika mpango wa Deeptrace, kwa kuzingatia utengenezaji wa baadae kwa kutumia njia ya Teknolojia ya Kupiga pasi ya Laser (LUT). Bodi ilitengenezwa kwa vipimo vya 60x60mm (jopo la kioo la kawaida lina vipimo vya 80x80mm). Mzunguko huo ulichapishwa kwenye kurasa za gazeti la Antenna na kuhamishwa kwa chuma cha Bosch na mpangilio wa "Len" (nguvu ya juu) kwenye bodi ya fiberglass ya foil yenye pande mbili 1.5mm, 35µm (bila kukosekana kwa nyingine).
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Etching ilifanyika na suluhisho la kloridi ya feri, iliyoandaliwa hapo awali kwa uwiano wa vijiko 1.5 kwa 250 ml ya maji ya joto. Mchakato ulichukua dakika 15.
Uchimbaji wa mashimo kwa vias interlayer na kwa kufunga kishikilia betri ulifanywa kwa mini-drill ya DREMEL 3000 iliyowekwa kwenye kisima cha kuchimba visima cha DREMEL 220. Mashimo ya vias interlayer yalitobolewa kwa kuchimba visima 0,4mm, mashimo kwa kishikilia betri kwa kuchimba visima 1,1mm. . Kupunguza kando ya mipaka ya ubao kulifanyika kwa mini-drill sawa na kiambatisho cha DREMEL 540 (Kukata mduara d=32.0mm). Kupogoa kulifanyika kwenye kipumuaji.
Tinning ya ubao uliowekwa ulifanyika kwa kutumia aloi ya Rose katika suluhisho la maji (kijiko 1 cha asidi ya citric iliyoangaziwa kwa 300 ml ya maji).

Mchakato wa kutengenezea ulichukua kama saa moja, wakati mwingi ulitumiwa waya wa kutengenezea (waya ya bati, kipenyo cha 0.4 mm) kwenye mashimo ya vias vya interlayer.

Ubao ulioshwa na kisafishaji cha erosoli cha FLUX OFF.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Ubunifu wa mwili wa kifaa ulifanyika katika mhariri wa muundo wa kompyuta-tatu-dimensional. Vipimo vya kesi 78,5mm X 78,5mm X 12mm.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Mfano uliokamilishwa wa kesi na kifuniko cha compartment cha betri kilihifadhiwa katika muundo wa STL, basi ilikuwa ni lazima kuandaa mifano hii kwa uchapishaji kwenye printer ya SLA (kuongeza msaada, mwelekeo). Katika hatua hii, shida ndogo iliibuka, kwani eneo la kuchapisha la printa za SLA za kaya ni ndogo. Mfano wa kesi ya kifaa katika nafasi bora zaidi kuhusiana na muda wa uchapishaji haukufaa katika vipimo vya eneo la uchapishaji. Wakati wa kuweka mfano kwa digrii 45, pia ilitoa matokeo ya kukatisha tamaa; uzito wa msaada ulikuwa sawa na uzito wa mfano wa mwili. Iliamuliwa kuchapisha mfano kwa wima, na kufanya msaada kwenye moja ya pande za mbele, baada ya kukubaliana mapema na ukweli wa usindikaji baada ya usindikaji. Kuchapisha mwili kulichukua masaa 5 na mpangilio wa safu ya mikroni 50. Ifuatayo, usindikaji ulifanyika kwa kutumia sandpaper nzuri sana (sitaandika nambari kwa sababu sijui :)). Jalada la betri lilichukua dakika 40 kuchapisha.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Paneli za glasi kutoka kwa Aliexpress zinauzwa na sura ya plastiki tayari imefungwa; hakukuwa na shida na kuondoa sura. Niliondoa jopo la glasi baada ya kuwasha moto na kavu ya kawaida ya nywele.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Kisambazaji cha taa ya nyuma ya LED kilitengenezwa kwa mkanda wa pande mbili na wambiso wa akriliki 3M 9088-200. Kwa taa za fluorescent kulikuwa na vifaa kadhaa vya kuchagua, mkanda wa wambiso wa Kichina na karatasi ya wambiso iliyokatwa kwenye kanda kutoka kwa kampuni ya ndani ya Luminofor. Chaguo lilifanywa kwa niaba ya mtengenezaji wa ndani; kulingana na hisia zangu, iliangaza zaidi na tena. Mraba wa karatasi yenye rangi ya fluorescent iliunganishwa juu na mkanda wa 3M 9088-200 wa pande mbili.

Kioo kilibandikwa kwenye mwili wa kubadili kwa kutumia mkanda wa upande mbili na wambiso wa akriliki wa 3M VHB 4910.
Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Kifuniko kiliwekwa na screw M 1,4 X 5 mm.

Gharama ya kifaa ilikuwa rubles 890.

Ifuatayo ilikuja sehemu ya programu. Kulikuwa na matatizo fulani. Inabadilika kuwa chip za sensorer za TTP223 hufanya kazi vizuri na usambazaji wa umeme wa 3.3V ulioimarishwa na sio mzuri sana wakati unaendeshwa moja kwa moja kutoka kwa betri iliyochapwa vizuri. Wakati wa kuanzisha kifaa na usambazaji wa umeme karibu 2.5v, pamoja na baada ya "kuchomoa" zaidi wakati wa kufanya uwasilishaji wa Mysensors, microcircuit ya TTP223 (mara baada ya urekebishaji) ilisababisha usumbufu wa MK kwani ilikuwa na kichochezi kinachofanya kazi.

Mzunguko wa usambazaji wa umeme kwa microcircuit ulibadilishwa (usimamizi wa nguvu TTP223 na gpio MK), ardhi ya ziada ilitolewa, na vipinga vilivyo na upinzani wa juu vilibadilishwa kwenye mistari iliyoongozwa na rgb (ambayo inaendesha upande wa pili wa bodi ya sensor capacitive). Pia iliongezwa kwa programu: uanzishaji wa nguvu kwa microcircuit ya capacitive baada ya kuanza mfumo wa Mysensors na kufanya kazi nje ya uwasilishaji. Ucheleweshaji wa urekebishaji kiotomatiki wa chipu ya TTP223 wakati nguvu inatumika umeongezwa mara mbili. Mabadiliko haya yote yaliondoa kabisa tatizo hili.

Kabla ya kutazama msimbo wa programu, ninapendekeza ujitambulishe na muundo wa msingi wa michoro katika 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()
{

}

Gusa kubadili msimbo wa jaribio la programu: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

Swichi ina kitufe cha kugusa na kitufe cha busara nyuma ya kifaa. Kitufe hiki cha busara kitatumika kwa hali za huduma, hali ya kufunga hewani na kuweka upya kifaa. Kitufe kina kipengele cha kupambana na kupiga chuma. Mstari wa sensor ya capacitive na mstari wa kifungo cha busara huunganishwa kupitia diode za Schottky na kushikamana na pini ya analog p0.05, na pia kutoka kwa sensor ya capacitive na kifungo cha busara kuna mistari kwa pini za MK p0.25 na p0.27 .0.05 kwa hali ya kusoma baada ya kuwezesha kukatiza kwenye pin p0.05. XNUMX. Kwenye pin pXNUMX, ukatizaji kupitia kilinganishi (NRF_LPCOMP) kupitia EVENTS_UP umewashwa. Nilipata msukumo wa kutatua tatizo hapa и hapa.

Swichi iliongezwa kwenye mtandao wa Mysensors, unaosimamiwa na kidhibiti mahiri cha nyumbani Majordomo (tovuti ya mradi)

Msimbo wa PHP wa kuongeza swichi kwa njia ya Kusasisha hali

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

Tazama matokeo kwenye video

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Baadaye, chaguo lilifanywa na kibadilishaji cha kuongeza, lakini hii haihusiani na utendakazi wa microcircuit ya TTP223; kuna hamu zaidi ya kuangaza vizuri na sare wakati wa kubonyeza funguo katika maisha yote ya betri.

AngaliaSwichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Mradi wa Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

anayezungumza Kirusi tovuti ya jamii Vihisi vyangu

Telegraph chat Mysensors - Suluhisho la haraka la shida na Mysensors, vidokezo, hila, kufunga bodi, kufanya kazi na atmega 328, stm32, nRF5 microcontrollers katika Arduino IDE - @mysensors_rus

Baadhi ya pichaSwichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Swichi ya kugusa isiyotumia waya na taa ya ziada ya umeme

Chanzo: mapenzi.com

Kuongeza maoni