የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

ሰላም ለሁሉም የሀብር "DIY ወይም DIY" ክፍል አንባቢዎች! የዛሬው መጣጥፍ በTTP223 ቺፕ ላይ ስላለው የንክኪ ማብሪያ / ማጥፊያ ይሆናል | ዳታ ገጽ. ማብሪያው በ nRF52832 ማይክሮ መቆጣጠሪያ | ዳታ ገጽ፣ የ YJ-17103 ሞጁል የታተመ አንቴና እና የውጭ አንቴና MHF4 ማገናኛ ጥቅም ላይ ይውላል። የንክኪ መቀየሪያው በCR2430 ወይም CR2450 ባትሪዎች ነው የሚሰራው። በማስተላለፊያ ሁነታ ውስጥ ያለው ፍጆታ ከ 8 mA አይበልጥም, በእንቅልፍ ሁነታ ከ 6 μA አይበልጥም.
የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

ልክ እንደ ሁሉም ቀደምት ፕሮጀክቶች, ይህ ደግሞ የአርዱዪኖ ፕሮጀክት ነው, ፕሮግራሙ በአርዱዪኖ አይዲኢ ውስጥ ተጽፏል. የመሳሪያው የሶፍትዌር አተገባበር በ Mysensors | GitHub ቤተ መጻሕፍት, GitHub ለ nRF5 ሰሌዳዎች ድጋፍ በ mysensors ውስጥ. የእንግሊዝ ማህበረሰብ መድረክ - http://forum.mysensors.org, የሩሲያ ቋንቋ የማህበረሰብ መድረክ - http://mysensors.ru/forum/
(ለመማር ለሚፈልጉ - ሰነድ, ተከታታይ ፕሮቶኮል, ኤ ፒ አይ, ፕሮቶኮል, ተንታኝ | መርዳት ለሚፈልጉአስተዋጽኦዎችበፕሮጀክት ልማት ውስጥ - ሰነድ)

የንክኪ ማብሪያ ቦርዱ የተፈጠረው በሌዘር አይረን ቴክኖሎጂ (LUT) ዘዴ በመጠቀም የሚቀጥለውን ምርት ግምት ውስጥ በማስገባት በዲፕቲሪስ ፕሮግራም ውስጥ ነው። ቦርዱ የተነደፈው በ 60x60 ሚሜ ልኬቶች ነው (መደበኛ የመስታወት ፓነል 80x80 ሚሜ ልኬቶች አሉት)። ወረዳው በአንቴና መጽሔት ገፆች ላይ ታትሞ በ Bosch ብረት በ "ሌን" መቼት (ከፍተኛ ኃይል) ወደ ባለ ሁለት ጎን ፎይል የተሸፈነ የፋይበርግላስ ሰሌዳ 1.5 ሚሜ, 35μm (ሌላ እጦት) ተላልፏል.
የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

ማሳከክ ቀደም ሲል በ 1.5 ሚሊ ሜትር ሙቅ ውሃ ውስጥ በ 250 የሻይ ማንኪያዎች መጠን ተዘጋጅቶ በፌሪክ ክሎራይድ መፍትሄ ተካሂዷል. ሂደቱ 15 ደቂቃዎች ወስዷል.
የቪያዎቹ እና የባትሪ መያዣዎች ቀዳዳዎች በDREMEL 3000 ሚኒ ቦረቦረ በDREMEL 220 ቁፋሮ ማቆሚያ ላይ ተቆፍረዋል ። በቦርዱ ድንበሮች ላይ መከርከም የተከናወነው በተመሳሳይ አነስተኛ ቁፋሮ በDREMEL 0,4 nozzle (የመቁረጥ ጎማ d = 1,1 ሚሜ) ነው። መከርከም የሚከናወነው በመተንፈሻ መሣሪያ ውስጥ ነው።
የታሸገ ሰሌዳው በሮዝ ቅይጥ ፣ በውሃ መፍትሄ (በ 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 acrylic ማጣበቂያ ጋር ባለ ሁለት ጎን ቴፕ የተሰራ ነው። ለፍሎረሰንት ማብራት፣ ብዙ የሚመረጡት ቁሳቁሶች ነበሩ፣ የቻይና ተለጣፊ ቴፕ እና የማጣበቂያ ወረቀት በሀገር ውስጥ ኩባንያ Luminophor በቴፕ ተቆርጧል። ምርጫው በሀገር ውስጥ አምራች ላይ ተመርኩዞ ነበር, እንደ ስሜቴ ከሆነ, የበለጠ ብሩህ እና ረዘም ያለ ብርሀን ያበራል. የፍሎረሰንት ቀለም ያለው አንድ ካሬ ወረቀት ከላይ ባለ ሁለት ጎን ቴፕ 3M 9088-200 ተጣብቋል።

የመስታወቱን ማጣበቂያ ወደ ማብሪያው አካል በ 3M VHB 4910 acrylic adhesive ባለ ሁለት ጎን ማጣበቂያ ቴፕ በመጠቀም ተከናውኗል።
የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

ሽፋኑ በ screw M 1,4 X 5mm ተስተካክሏል.

የመሳሪያው ዋጋ 890 ሩብልስ ነበር.

ቀጥሎ የሶፍትዌር ክፍል መጣ። ምንም ችግሮች አልነበሩም. የ TTP223 ሴንሰር ማይክሮ ሰርኩይትስ በተረጋጋ የኃይል አቅርቦት .3.3v እና በደንብ ከተለቀቀው ባትሪ በቀጥታ ሲሰራ በደንብ አይሰራም። መሣሪያውን በ 2.5v አካባቢ በሃይል አቅርቦት ሲጀምሩ እና ተጨማሪ "ማሳነስ" ከተጨመረ በኋላ የ Mysensors አቀራረብ ሲሰራ, TTP223 ቺፕ (ወዲያውኑ ካሊብሬሽን በኋላ) MK ንቁ በሆነ ቀስቅሴ ስለነበረ እንዲቋረጥ አድርጓል.

ለማይክሮ ሰርኩዩት የኃይል አቅርቦት ዑደት ተለውጧል (የኃይል አስተዳደር TTP223 ከ gpio MK ጋር) ፣ ተጨማሪ መሬት ተገናኝቷል ፣ ከፍተኛ የመቋቋም ችሎታ ያላቸው ተቃዋሚዎች በ rgb መሪ መስመሮች ላይ ተተክተዋል (በ capacitive ሴንሰር ቦርድ በሌላኛው በኩል የሚሄዱ)። በተጨማሪም በሶፍትዌሩ ውስጥ ተጨምሯል-የማይሴንሰርስ ማዕቀፍ ከጀመረ እና የዝግጅት አቀራረቡን ከሠራ በኋላ ለ 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()
{

}

የንክኪ መቀየሪያ ፕሮግራም የሙከራ ኮድ፡-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 ዳሳሽ መስመር እና የሰዓት አዝራሩ መስመር ከአናሎግ ፒን ፒ 0.05 ጋር ተገናኝተዋል እንዲሁም ከ capacitive ዳሳሽ እና የሰዓት አዝራሩ ወደ MK ፒን ፒ 0.25 እና p0.27 መስመሮች አሉ። .0.05 መቆራረጡን በፒን ፒ 0.05. XNUMX ላይ ካነቃቁ በኋላ ግዛቶችን ለማንበብ. በፒን ፒ XNUMX፣ መቆራረጥ በንፅፅር (NRF_LPCOMP) በEVENTS_UP ይነቃል። ችግሩን ለመፍታት መነሳሳት ተቀብሏል እዚህ и እዚህ.

ማብሪያው በማለጆዶሞ ስማርት ቤት መቆጣጠሪያ በሚተዳደረው የ Mysensors አውታረ መረብ ላይ ታክሏል (የፕሮጀክት ድር ጣቢያ)

ወደ መቀየሪያው ሁኔታ የማዘመን ዘዴ ለመጨመር 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 - ፈጣን ችግርን በ Mysensors ፣ ምክሮች ፣ ብልሃቶች ፣ የቦርድ ጭነት ፣ ከአትሜጋ 328 ፣ stm32 ፣ nRF5 ማይክሮ መቆጣጠሪያ ጋር በ Arduino IDE ውስጥ መሥራት - @mysensors_rus

ጥቂት ስዕሎችየገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

የገመድ አልባ ንክኪ መቀየሪያ ከተጨማሪ የፍሎረሰንት መብራት ጋር

ምንጭ: hab.com

አስተያየት ያክሉ