Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Sveikiname visus „Pasidaryk pats arba pasidaryk pats“ skyriaus „Habr“ skaitytojus! Šiandienos straipsnis bus apie TTP223 lusto jutiklinį jungiklį | duomenų lapas. Jungiklis veikia su nRF52832 mikrovaldikliu | duomenų lapas, buvo naudojamas YJ-17103 modulis su spausdinta antena ir išorinės MHF4 antenos jungtimi. Jutiklinis jungiklis veikia su CR2430 arba CR2450 baterijomis. Sąnaudos perdavimo režimu yra ne daugiau kaip 8 mA, miego režimu - ne daugiau kaip 6 µA.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Kaip ir visi ankstesni projektai, šis taip pat yra Arduino projektas, programa parašyta Arduino IDE. Įrenginio programinė įranga yra pagrįsta Mysensors protokolu | GitHub bibliotekos, nRF5 plokštės palaikymas „GitHub“. Mysensoriuose. Anglų kalbos bendruomenės forumas – http://forum.mysensors.org, bendruomenės forumas rusų kalba - http://mysensors.ru/forum/
(Norintiems mokytis - Įrašai, Serijinis protokolas, API, Protokolas, Analizatorius | norintiems padėti (įmokos) kuriant projektą - Įrašai)

Jutiklinė perjungimo plokštė buvo sukurta Deeptrace programoje, atsižvelgiant į vėlesnę gamybą naudojant lazerinio lyginimo technologijos (LUT) metodą. Plokštė buvo sukurta 60x60 mm matmenų (standartinės stiklo plokštės matmenys yra 80x80 mm). Grandinė buvo atspausdinta žurnalo „Antena“ puslapiuose ir „Bosch“ lygintuvu su „Len“ nustatymu (maksimali galia) perkelta ant dvipusės 1.5 mm, 35 µm folijos stiklo pluošto plokštės (jei kitos nėra).
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

ėsdinimas buvo atliktas geležies chlorido tirpalu, anksčiau paruoštu 1.5 arbatinio šaukštelio 250 ml šilto vandens. Procesas truko 15 minučių.
Skylės tarpsluoksniams angoms ir akumuliatoriaus laikiklio tvirtinimui buvo išgręžtos mini grąžtu DREMEL 3000, sumontuotu ant gręžimo stovo DREMEL 220. Skylės tarpsluoksniams išgręžtos 0,4 mm grąžtu, skylės akumuliatoriaus laikikliui – 1,1 mm grąžtu. . Apipjaustymas išilgai lentos kraštų buvo atliktas tuo pačiu mini grąžtu su DREMEL 540 priedu (pjovimo apskritimas d=32.0 mm). Genėjimas buvo atliktas respiratoriuje.
Išgraviruotos lentos skardinimas buvo atliktas naudojant Rose lydinį vandeniniame tirpale (1 arbatinis šaukštelis kristalizuotos citrinų rūgšties 300 ml vandens).

Litavimo procesas užtruko apie valandą, daugiausiai laiko užtruko litavimo viela (alavuota, 0.4 mm skersmens) tarpsluoksnių angų skylėse.

Lenta buvo nuplaunama FLUX OFF aerozoliniu valikliu.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Įrenginio korpuso projektavimas buvo atliktas trimatėje kompiuterinėje projektavimo rengyklėje. Korpuso matmenys 78,5mm X 78,5mm X 12mm.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Sukomplektuotas korpuso ir baterijų skyriaus dangtelio modelis buvo išsaugotas STL formatu, tuomet reikėjo paruošti šiuos modelius spausdinimui SLA spausdintuvu (pridėti atramas, orientuotis). Šiame etape iškilo nedidelė problema, nes buitinių SLA spausdintuvų spausdinimo plotas yra mažas. Įrenginio korpuso modelis optimaliausioje padėtyje spausdinimo laiko atžvilgiu netilpo į spausdinimo ploto matmenis. Pastačius modelį 45 laipsnių kampu, tai taip pat davė nuviliantį rezultatą, atramos svoris buvo lygus kėbulo modelio svoriui. Modelį buvo nuspręsta spausdinti vertikaliai, vienoje iš priekinių pusių padarant atramą, iš anksto susitarus su tolesnio apdorojimo faktu. Korpuso spausdinimas užtruko 5 valandas, kai sluoksnio nustatymas buvo 50 mikronų. Toliau apdirbimas buvo atliktas naudojant labai smulkiagrūdį švitrinį popierių (numerio nerašysiu, nes nežinau :)). Baterijos dangtelio spausdinimas užtruko 40 minučių.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Stiklo plokštės iš Aliexpress parduodamos su jau priklijuotu plastikiniu rėmu, nuimant rėmą problemų nekilo. Stiklo plokštę nuėmiau pakaitinęs įprastu plaukų džiovintuvu.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

LED foninio apšvietimo difuzorius buvo pagamintas iš dvipusės juostos su akrilo klijais 3M 9088-200. Liuminescenciniam apšvietimui buvo galima rinktis iš kelių medžiagų – kiniškos lipnios juostos ir lipniojo popieriaus, supjaustyto juostomis iš vietinės įmonės „Luminofor“. Pasirinkta vietinio gamintojo naudai, pagal mano jausmus jis spindėjo ryškiau ir ilgiau. Ant viršaus 3M 9088-200 dvipuse juosta buvo priklijuotas popieriaus kvadratas su fluorescenciniu pigmentu.

Stiklas buvo priklijuotas prie jungiklio korpuso naudojant dvipusę juostą su 3M VHB 4910 akrilo klijais.
Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Dangtis buvo pritvirtintas varžtu M 1,4 X 5 mm.

Prietaiso kaina buvo 890 rublių.

Toliau atėjo programos dalis. Buvo tam tikrų problemų. Pasirodo, TTP223 jutiklių lustai puikiai veikia su stabilizuotu 3.3 V maitinimo šaltiniu ir ne itin gerai, kai maitinami tiesiai iš gerai išsikrovusios baterijos. Paleidus įrenginį su maždaug 2.5 V maitinimo šaltiniu, be to, po papildomo „išjungimo“ rengiant Mysensors pristatymą, TTP223 lustas (iš karto po kalibravimo) sukėlė MK pertraukimą, nes jis buvo su aktyviu trigeriu.

Pakeista maitinimo grandinė į mikroschemą (maitinimo valdymas TTP223 su gpio MK), papildomas įžeminimas, rgb led linijose (kurios eina kitoje talpinio jutiklio plokštės pusėje) pakeisti didesnės varžos rezistoriai. Jis taip pat buvo pridėtas prie programinės įrangos: talpinės mikroschemos galios aktyvavimas paleidus Mysensors sistemą ir parengus pristatymą. TTP223 lusto automatinio kalibravimo delsa, kai įjungiama maitinimas, padvigubėjo. Visi šie pakeitimai visiškai pašalino šią problemą.

Prieš peržiūrint programos kodą, rekomenduoju susipažinti su pagrindine eskizų struktūra 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()
{

}

Jutiklinio jungiklio programos bandymo kodas: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

Jungiklis turi jutiklinį mygtuką ir taktinį mygtuką įrenginio gale. Šis taktinis mygtukas bus naudojamas aptarnavimo režimams, tiesioginio susiejimo režimui ir įrenginio nustatymui iš naujo. Mygtukas turi geležinę apsaugos nuo atšokimo funkciją. Talpinio jutiklio linija ir laikrodžio mygtuko linija yra prijungta per Schottky diodus ir prijungta prie analoginio kaiščio p0.05, taip pat nuo talpinio jutiklio ir laikrodžio mygtuko yra linijos į MK kaiščius p0.25 ir p0.27 .0.05 būsenoms nuskaityti aktyvavus pertraukimą kaištyje p0.05. XNUMX. Kaištyje pXNUMX suaktyvinamas pertraukimas per komparatorių (NRF_LPCOMP) per EVENTS_UP. Gavau įkvėpimo išspręsti problemą čia и čia.

Jungiklis buvo įtrauktas į Mysensors tinklą, valdomą išmaniojo namų valdiklio Majordomo (projekto svetainė)

PHP kodas, skirtas pridėti jungiklį į statusUpdate metodą

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

Rezultatą žiūrėkite vaizdo įraše

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Vėliau buvo sukurtas pastiprinimo keitiklis, tačiau tai nesusiję su TTP223 talpinės mikroschemos veikimu, labiau norisi gero ir vienodo apšvietimo spaudžiant klavišus per visą baterijos veikimo laiką.

VaizdasBelaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Projektas Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

rusakalbis bendruomenės svetainė Mysensoriai

Telegramos pokalbis Mysensors - greitas problemų, susijusių su mysensoriais, sprendimas, patarimai, gudrybės, plokščių montavimas, darbas su atmega 328, stm32, nRF5 mikrovaldikliais Arduino IDE - @mysensors_rus

Kelios nuotraukosBelaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Belaidis jutiklinis jungiklis su papildomu fluorescenciniu foniniu apšvietimu

Šaltinis: www.habr.com

Добавить комментарий