Habr ááŸá âDIY ááá¯á·ááá¯áẠááá¯ááºááá¯ááºáá¯ááºáá«â ááá¹áá á
á¬áááºááááááºá¡á¬ážáá¯á¶ážááᯠááŸá¯ááºááœááºážáááºááá«áááºá ááá±á·áá±á¬ááºážáá«ážááẠTTP223 áá»á
áºáẠ| ááŸá touch switch á¡ááŒá±á¬ááºážááŒá
áºáááºá
ááááºááá±á¬áá»ááºáá»á¬ážáá²á·ááá¯á·áááºá á€áá
áºáá¯ááẠArduino ááá±á¬áá»ááºáá
áºáá¯áááºážááŒá
áºááŒá®áž áááá¯ááááºááᯠArduino IDE ááœáẠáá±ážáá¬ážáá¬ážáááºá á
ááºáá
á¹á
ááºážááá±á¬á·ááºáá²ááºá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠMysensors áááá¯ááá¯áá±á¬ | ááá¯á¡ááŒá±áá¶áááºá
(áá±á·áá¬áá»ááºáá°áá»á¬ážá¡ááœááº
ááááœá±á·ááá¯ááºáá¯ááºá¡á¬áž Laser Ironing Technology (LUT) áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á áá±á¬ááºáááºááœá²áá¯ááºáá¯ááºááŸá¯ááᯠááá·áºááœááºážá
ááºážá
á¬ážááŒá®áž Deeptrace áááá¯ááááºááœáẠáá®ááœááºáá²á·áááºá áá¯ááºá¡á¬áž 60x60 áá®áá®áá®áᬠ(á
á¶áááºáá¬ážááŒááºáá
áºáá¯ááœáẠá¡ááá¯ááºážá¡áᬠ80x80 áá®áá®áá®áá¬) ááŒáá·áº áááºáá®ážáá¬ážáááºá áá¬ážáá
áºá¡á¬áž Antenna ááá¹ááááºážá á
á¬áá»ááºááŸá¬áá»á¬ážááœáẠáá¯á¶ááŸáááºááŒá®áž Bosch áá¶ááŒáá·áº "Len" áááºááẠ(á¡ááŒáá·áºáá¯á¶ážáá«áá«) ááŒáá·áº Bosch áá¶ááŒáá·áº ááŸá
áºáááºáá±á¬ááá¹áá¯ááŒá¬áž ááá¯ááºáá¬ááŸááºáá¯áẠ1.5 áá®áá®áá®áá¬á 35µm (áá±á¬ááºáá
áºáá¯áááŸááá»áŸááº) ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáá«áááºá
áá±ááœá±ážááœá±áž 1.5 ml ááœáẠ250 áááºáááºáááºááœááºáž á¡áá»áá¯ážá¡á
á¬ážááŒáá·áº ááááºá ááŒááºáááºáá¬ážáá±á¬ ferric chloride áá¡ááŒá±áá
áºáá¯ááŒáá·áº ááá¹áá¯á
ááºááŒááºážááᯠááŒá¯áá¯ááºáá²á·áááºá áá¯ááºáááºážá
ááºááẠ15 áááá
áºááŒá¬áááºá
interlayer vias á¡ááœáẠáá°ážáá±á¬áºááŒááºážááŸáá·áº áááºááá® ááá¯ááºáá±á¬ááºááẠá¡áá±á«ááºáá»á¬ážááᯠDREMEL 3000 mini-drill ááŒáá·áº DREMEL 220 drill stand áá±á«áºááœáẠáááºáááºáá¬ážáááºá interlayer ááŸáááá·áº á¡áá±á«ááºáá»á¬ážááᯠ0,4mm áá±á¬ááºáá¬ážááŒá®ážá áááºááá® ááá¯ááºáá±á¬ááºáá°á¡ááœáẠá¡áá±á«ááºáá»á¬ážááᯠ1,1mm ááŸááá±á¬ á¡áá±á«ááºáá»á¬ážááŒáá·áº áá°ážáá¬ážáááºá . áá¯ááºááá±á¬ááºáá
áºáá»áŸá±á¬áẠááŒááºáá±á¬ááºááŒááºážá¡á¬áž DREMEL 540 áá°ážááœá²áá«ááŸáááá·áº áá°áá®áá±á¬ á¡áá±ážá
á¬ážá¡á
ááºážááŒáá·áº ááŒá¯áá¯ááºáá¬ážáá«áááºá áá¶á
ááºáá»á¬ážááᯠá¡áááºááŸá°áááááá¬ááŒáá·áº ááŒá¯áá¯ááºáá²á·áááºá
ááœááºážáá¯áá¬ážáá±á¬ áá¯ááºááŒá¬ážááᯠáá± 1 ml ááœáẠááŸááºážáá®á¡ááœáá¯ááºáž (áá± 300 ml ááœáẠá¡á¡á±ážáá¶áá¬ážáá±á¬ citric á¡ááºáá
Ạáááºáááºáááºááœááºáž XNUMX ááœááºáž) ááŒáá·áº ááŒá¯áá¯ááºáá¬ážáá«áááºá
ááá±áá±á¬áºááŒááºážáá¯ááºáááºážá ááºááẠáá áºáá¬áá®ááá·áºááŒá¬ááŒáá·áºááŒá®áž á¡áá»á¬ážá á¯ááᯠinterlayer áá±á¬ááºáááºá¡ááœáẠá¡áá±á«ááºáá»á¬ážá¡ááœááºáž ááá±áá«áá¬ááŒáá¯áž (áá¶áá°ážááŒáá·áº á¡áá»ááºáž 0.4 áá®áá®áá®áá¬) á¡áá¯á¶ážááŒá¯áááºá
áá¯ááºá¡á¬áž FLUX OFF aerosol cleaner ááŒáá·áº áá±ážááŒá±á¬áá«áááºá
á
ááºáá
á¹á
ááºážááá¯ááºáááºá áá®ááá¯ááºážááᯠáá¯á¶ážáááºááŒááºááœááºááŒá°áá¬áá¯á¶áž áá®ááá¯ááºážáááºážááŒááºááŸá¯ááŒáá·áº ááŒá¯áá¯ááºáá²á·ááŒááºážááŒá
áºáááºá Case á¡ááá¯ááºážá¡áᬠ78,5mm X 78,5mm X 12mm
áá¬áá¬á ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ áá±á¬áºáááºááŸáá·áº áááºááá®á¡áá¯á¶ážááᯠSTL áá±á¬áºáááºááŒáá·áº ááááºážáááºážáá¬ážááŒá®ážá ááá¯á·áá±á¬áẠSLA ááááºáá¬áá±á«áºááœáẠáá¯á¶ááŸáááºáááºá¡ááœáẠá€áá±á¬áºáááºáá»á¬ážááᯠááŒááºáááºááẠááá¯á¡ááºááẠá¡áááºáá¯á¶áž SLA ááááºáá¬áá»á¬ážá áá¯á¶ááŸáááºá§áááá¬ááẠáá±ážáááºáá±á¬ááŒá±á¬áá·áº á€á¡ááá·áºááœáẠááŒá¿áá¬áá±ážáá
áºáᯠáá±á«áºáá±á«ááºáá¬áááºá áá¯á¶ááŸáááºá¡áá»áááºááŸáá·áº áááºáááºááá·áº á¡áá±á¬ááºážááœááºáá¯á¶áž á¡áá±á¡áá¬ážááœáẠá
ááºáá
á¹á
ááºáž áá¬áá¬á áá±á¬áºáááºááẠáá¯á¶ááŸáááºá§áááá¬á á¡ááá¯ááºážá¡áá¬ááŸáá·áº áááá¯ááºáá®áá«á áá±á¬áºáááºááᯠ45 áá®ááá®ááœááºáá¬ážáá±á¬á¡áá«á áááºážáááºá
áááºáá»ááºá
áá¬áá±á¬ááºážáá±á¬ááááºááá¯áá±ážáááºá áá¶á·ááá¯ážááŸá¯áá¡áá±ážáá»áááºáááºááá¯ááºáááºáá±á¬áºáááºáá¡áá±ážáá»áááºááŸáá·áºáá®áá»áŸáááºá áááºážááẠáá±á¬áºáááºááᯠáá±á«ááºááá¯áẠáááá·áºáá¯ááºááẠáá¯á¶ážááŒááºáá²á·ááŒá®ážá áá¯ááºáá±á¬ááºááŒá®ážáá±á¬áẠáá¯ááºáá±á¬ááºááŒááºážáá¡áá»ááºááᯠááŒáá¯áááºááá±á¬áá°ááŒá®áž ááŸá±á·áááºáá
áºáááºááœáẠáá¶á·ááá¯ážááŸá¯áá
áºáá¯ááŒá¯áá¯ááºáá²á·áááºá ááá¯ááºáááºááᯠ5 ááá¯ááºáááá¯á¡ááœáŸá¬ááŒáá·áº áá¯á¶ááŸáááºáá¬ááœáẠá
áá¬áá®ááŒá¬áááºá ááá¯á·áá±á¬áẠá¡ááœááºáá±á¬ááºážááœááºáá±á¬ áá²á
áá¹áá°ááᯠá¡áá¯á¶ážááŒá¯á á
á®áá¶áá±á¬ááºááœááºááẠ(áá»áœááºáá±á¬áºááááá±á¬ááŒá±á¬áá·áº áá¶áá«ááºááᯠááá±ážáá« :))á áááºááá®áá¬áá¬ááẠáááá·áºáá¯ááºááẠáááá
Ạáá ááŒá¬áááºá
Aliexpress á០ááŸááºááŒá¬ážáá»á¬ážááᯠáá±á¬áºááŒá®ážáá¬áž ááááºá
áá
áºáá±á¬ááºááŒáá·áº áá±á¬ááºážáá»ááŒá®áž áááááºááᯠáááºááŸá¬ážáá¬ááœáẠááŒá¿áá¬áááŸááá«á áá¯á¶ááŸááºáá¶áááºáá±ááŸá¯ááºá
ááºááŒáá·áº á¡áá°áá±ážááŒá®ážáá±á¬áẠááŸááºáá±á¬ááºááᯠáááºááŸá¬ážááá¯ááºáááºá
LED áá±á¬ááºáá¶á¡áááºážá¡ááœáẠdiffuser ááᯠacrylic adhesive 3M 9088-200 ááŒáá·áº ááŸá
áºáááºááááºááŒáá·áº ááŒá¯áá¯ááºáá¬ážáááºá áá»á±á¬ááºážá¡áááºážáá±á¬ááºá¡ááœáẠááœá±ážáá»ááºá
áᬠáá
á¹á
ááºážá¡áá»á¬ážá¡ááŒá¬ážááŸááá²á·ááŒá®áž ááá¯ááºáá±á¬áºááááºááŸáá·áº áá±á¬áºá
áá¹áá°áá»á¬ážááᯠááŒááºááœááºážáá¯áá¹ááá® Luminofor á០ááááºáá»á¬ážá¡ááŒá
ẠááŒááºáá±á¬ááºáá²á·áááºá áá®ááœá±ážáá»ááºááŸá¯áᬠááŒááºááœááºážáá¯ááºáá¯ááºáá°áá²á· áá»ááºááŸá¬áá¬ááŒá
áºááŒá®ážá áá«á·áá¶á
á¬ážáá»ááºá¡áá ááá¯áá±á¬ááºáááŒá®áž ááá¯ááŸááºáááºá 3M 9088-200 ááŸá
áºáááºááááºááŒáá·áº ááááºááœáẠáá»á±á¬ááºážááá¯ážáá±ážáá«áá±á¬ á
áá¹áá°á
áá¯áááºážáá
áºáá¯ááᯠáá±á¬áºáá¬ážáááºá
ááŸááºááᯠ3M VHB 4910 acrylic áá±á¬áºááŒáá·áº ááŸá
áºáááºááááºááŒáá·áº ááá¯ááºááá¯ááºáááºááœáẠáááºáá¬ážáááºá
á¡áá¯á¶ážááᯠáááºá¡á° M 1,4 X 5 áá®áá®áá®áá¬ááŒáá·áº ááŒá¯ááŒááºáá¬ážáááºá
á ááºááá¯ááºáá»á ááááºááŸá¬ 890 áá°áááºááŒá áºáááºá
áá±á¬ááºáá áºáá¯ááá±á¬á· á¡á á®á¡á ááºá¡ááá¯ááºážáá±á«á·á ááŒá¿áá¬á¡áá»áá¯á·ááŸááá²á·áááºá TTP223 á¡á¬áá¯á¶áá¶áá»á áºááºáá»á¬ážááẠáááºááŒáááºáá±á¬ 3.3V áá«áá«áá±á¬ááºáá¶á·ááŸá¯ááŒáá·áº áá±á¬ááºážááœááºá áœá¬á¡áá¯ááºáá¯ááºááá¯ááºááŒá®áž áá±á¬ááºážááœááºá áœá¬áá¯ááºááœáŸááºáá±á¬áááºááá®á០ááá¯ááºááá¯ááºá¡á¬ážááœááºážáá±á¬á¡áá«ááœáẠá¡ááœááºáá±á¬ááºážááœááºááŒááºážáááŸáááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá 2.5v áááºážáá»áẠáá«áá«áá±á¬ááºáá¶á·ááŸá¯ááŒáá·áº á ááºáá á¹á ááºážááᯠá áááºááá·áºá¡áá«á Mysensors áááºáááºááŸá¯á¡á¬áž áá¯ááºáá±á¬ááºááá·áºá¡áá« áá±á¬ááºááẠ"ááœá²áá»" ááŒá®ážáá±á¬ááºá TTP223 áá»á áºáẠ(á á¶ááá¯ááºáá»áááºááŸáááŒá®ážáá±á¬áẠáá»ááºááŒááºáž) ááẠáááºážááẠáááºááŒáœáá±á¬á¡á áá»áá¯ážááŒáá·áº MK á á¡ááŸá±á¬ááºá¡ááŸááºááŒá áºá á±áá²á·áááºá
microcircuit ááá¯á· power supply circuit ááá¯ááŒá±á¬ááºážáá²áá²á·ááẠ(power management TTP223 with gpio MK)á á¡ááá¯ááŒá±ááŒááºááá¯áá±á¬ááºáá¶á·áá±ážáá²á·ááŒá®ážá ááá¯ááá¯ááŒáá·áºáá¬ážáá±á¬áá¶ááá¯ááºáááºááŸááá±á¬ resistors áá»á¬ážááᯠrgb led line (capacitive sensor board áá¡ááŒá¬ážáá áºáááºááœááºáááºáááºáá±á¬) ááœááºá¡á á¬ážááá¯ážáá²á·áááºá áááºážááᯠáá±á¬á·ááºáá²ááºááœáẠááá·áºááœááºážáá¬ážáááº- Mysensors áá°áá±á¬ááºááᯠá áááºááŒá®áž áááºááŒááŸá¯ááᯠáá¯ááºáá±á¬ááºááŒá®ážáá±á¬áẠcapacitive microcircuit á¡ááœáẠáá«áá«ááᯠá¡áááºááœááºážááŒááºážá áá«áá«á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« 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()
{
}
Touch switch program test code-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
ááá¯ááºááœáẠááááœá±á·ááá¯ááºáá
áºáá¯ááŸáá·áº á
ááºááá±á¬ááºáááºááœáẠáááá¹áá¬áá±ážááŒá¬ážááá¯ááºáá
áºáᯠáá«ááŸááááºá á€áááºážáá»á°áá¬ááá¯ááºááᯠáááºáá±á¬ááºááŸá¯áá¯ááºáá»á¬ážá áá±áááºááŸáá»áááºáááºááŒááºážáá¯ááºááŸáá·áº á
ááºáá
á¹á
ááºážááŒááºáááºáááºááŸááºááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá ááá¯ááºááœáẠáá¶ááá·áºáá»ááºáá±á¬ááºáááºááá·áºá¡ááºá¹áá«áááºáá«ááŸááááºá capacitive á¡á¬áá¯á¶áá¶áááááá¬áááá¯ááºážááŸáá·áºáá¬áá®ááá¯ááºáááá¯ááºážá¡á¬áž Schottky diodes ááŸáááá·áºáá»áááºáááºáá¬ážááŒá®áž analog pin p0.05 ááá¯á·áá»áááºáááºáá¬ážááŒá®áž capacitive sensor ááŸáá·áº áá¬áá®ááá¯ááºá០MK pins p0.25 ááŸáá·áº p0.27 ááá¯á·ááá¯ááºážáá»á¬ážááŸááá«áááºá pin p0.05. 0.05 ááœáẠinterrupt ááá¯á¡áááºááœááºážááŒá®ážáá±á¬ááºáááºáááºááŒááºáááºáá»á¬ážá¡ááœáẠ.XNUMX á áááºáá¶áá«áẠpXNUMX ááœááºá EVENTS_UP ááŸáá
áºááá·áº ááŸáá¯ááºážááŸááºáááááᬠ(NRF_LPCOMP) ááŸáá
áºááá·áº á¡ááŸá±á¬áá·áºá¡ááŸááºáá
áºáá¯á¡á¬áž á¡áááºááœááºážáá¬ážáááºá ááŒá¿áá¬ááá¯ááŒá±ááŸááºážááá¯á· ááŸá¯á¶á·áá±á¬áºááŸá¯ááá²á·áááºá
ááá¯ááºááᯠá
áááºá¡ááẠááááºážáá»á¯ááºáááááᬠMajordomo á០á
á®áá¶ááá·áºááœá²ááá·áº Mysensors ááœááºáááºááá¯á· áá±á«ááºážááá·áºáá¬ážáááºá
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');
}
}
ááááºááá¯áá®áá®ááá¯ááœááºááŒáá·áºáá«á
áá±á¬ááºááá¯ááºážááœááºá boost converter ááŒáá·áº ááœá±ážáá»ááºááœáá·áºáá
áºáᯠááŒá¯áá¯ááºáá²á·áá±á¬áºáááºáž áááºážááẠTTP223 capacitive microcircuit ááá¯ááºáá±á¬ááºáá»ááºááŸáá·áº ááááºááá¯ááºáá«; áááºááá®áááºáááºážáá
áºáá»áŸá±á¬ááºáá¯á¶áž áá±á¬á·áá»á¬ážááá¯ááŸáááºááá·áºá¡áá« áá±á¬ááºážááœááºááŒá®áž áá
áºááŒá±ážáá® á¡áááºážáá±á¬ááºáááŸáááẠááá¯ááá¯ááá¹áááŸááá«áááºá
ááŒáá·áºááŸá¯
ááá±á¬áá»áẠGithub -
áá¯ááŸá¬ážá
áá¬ážááŒá±á¬
áá¬ááºáá¯á¶á¡áá»áá¯á·
source: www.habr.com