Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Ma ka ʻatikala o kēia lā makemake wau e kaʻana like me ʻoe i kahi papahana hou. ʻO kēia manawa he kīpili pā me ka pā aniani. Paʻa ka mea hana, ʻo ke ana ʻana he 42x42mm (he 80x80mm ka nui o nā panela aniani maʻamau). Ua hoʻomaka ka moʻolelo o kēia hāmeʻa i kahi manawa lōʻihi i hala, ma kahi o hoʻokahi makahiki i hala.

Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Aia nā koho mua ma ka microcontroller atmega328, akā i ka hopena ua pau ia me ka microcontroller nRF52832.

Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Holo ka ʻāpana pā o ka hāmeʻa ma nā ʻāpana TTP223. Hāʻawi ʻia nā mea ʻike ʻelua e kahi interrupt. Hoʻohana ʻia e kahi pākahiko CR2477, ma o ka mea hoʻololi hoʻoikaika ma ka chip TPS610981 | ʻikepili.

Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832
Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Hoʻohana ka mea hana i kahi kaapuni mana me ka hoʻohana ʻana i nā transistors hopena. Ma hope o ke kaomi ʻana i ke pihi, ʻae ka microcontroller ponoʻī i ka mana mana a laila hiki ke hoʻohana ʻia ke pihi no nā ʻano lawelawe (i koʻu hihia, pili kēia me nā mea hana ʻē aʻe, hoʻopau i ka mana a hoʻonohonoho hou i nā ʻōnaehana hana).

Aia he 2 rgb LEDs no ka hōʻike ʻana i nā mokuʻāina a me nā ʻano lawelawe. Ua hoʻohui pū ʻia kahi piezo emitter e hoʻohālikelike i kahi kaomi i ka wā e hoʻopā ai i nā pihi paʻi a me nā hōʻailona kani o nā ʻano lawelawe. Hiki ke ho'āla ʻia nā LED a me ka piezo emitter ma muli o ka manaʻo o ka mea hoʻohana. Hana ʻia kēia ma o ka mea hoʻoponopono home akamai ma o ka hoʻouna ʻana i nā kauoha i nā mea ʻike loea; hiki i ka mea hoʻohana ke hoʻololi i nā manawa no ka hoʻouna ʻana i ka uku pākaukau a me ka pae hōʻailona ma o ka mea hoʻokele home akamai. I koʻu hihia ʻo ia MAJORDOMO.

ʻO 7mA (250kbit, 10ms) ka hoʻohana ʻana ma ka mode transmit, ʻo ka hoʻohana ʻana i ka hiamoe he 40µA, ʻoi aku ka liʻiliʻi o ka hoʻohana ʻana ma ka mokuʻāina ma mua o 1µA (= ka hoʻohana ʻana i ka mea hoʻololi hoʻoikaika ma ke ʻano "idle"). Hāʻawi ʻia ka mea hoʻohui Rx, tx, swd no ka papahana. Hoʻohana ʻia kahi mea hoʻohui liʻiliʻi 2x3p me kahi pitch o 1.27. Hana ʻia kahi mea hoʻopili kūikawā no ka hoʻolālā.

Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

E like me nā manawa a pau, hoʻokumu ʻia ka hana o ka hāmeʻa ma ka protocol MySensors. Hoʻolālā ʻia kēia hoʻololi paʻi e hoʻohana ʻia i ka ʻōnaehana hoʻokele makapō roller. Akā ma ka laulā, ua kaupalena ʻia ka noi e kāu noʻonoʻo. No ka laʻana, ua hana mua kaʻu keiki (7 mau makahiki) i 3 mau kauoha no nā ʻano hoʻololi: e hoʻā a hoʻopau i ke kukui i loko o kahi lua me kahi ʻauʻau (e kau ʻia ma lalo o ka papahele), e hoʻā i ke kukui i kahi ʻO ke ala lōʻihi a ʻeleʻele i ka wā e hele ai i kahi lua me ka ʻauʻau ʻauʻau, a ʻo kekahi e like me ka ʻaoʻao o kahi moe, no ka hoʻā koke ʻana i ke kukui i loko o kou lumi i holo ai nā monsters.

Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832
Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832
Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Ua paʻi maʻamau ka hihia ma kahi paʻi SLA, he mea liʻiliʻi ka mea, ua lilo ka hihia i liʻiliʻi, ua kūpono ka hoʻohana ʻana i kēia ʻenehana paʻi.

Nānā i ke kŘkohu paʻiPākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832
Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832
Pākuʻi paʻi liʻiliʻi me ka panel aniani ma nRF52832

Hoʻopili ʻia nā mākēneki i loko o ka pahu pahu a me ka uhi ʻana o ka pā.

Nā wikiō me nā hoʻāʻo o kēia hāmeʻa:



No ka poe makemake e hana hou:

E ho'āʻo i ka code program no ka hoʻololi ʻana i kahi ʻōnaehana hoʻomalu makapō no Arduino IDE

ʻO Arduino Wiring

int8_t timer_status = 0;
boolean sens_flag1 = 0;
boolean sens_flag2 = 0;
boolean switch_a = 0;
boolean switch_b = 0;
uint16_t temp;
float vcc;
int battery;
int old_battery;
uint32_t oldmillis;
uint32_t newmillis;
uint32_t interrupt_time;
uint32_t SLEEP_TIME = 7000;
uint32_t SLEEP_TIME_W;
uint32_t SLEEP_TIME_W2;
int NrfRSSI;
uint16_t NrfRSSI2;
boolean wait_off;
//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define MY_RADIO_NRF5_ESB
#define MY_PASSIVE_NODE
#define MY_NODE_ID 120
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define POWER_CHILD_ID 110
#define UP_POWER_SWITCH_ID 1
#define DOWN_POWER_SWITCH_ID 2
#define CHILD_ID_nRF52_RSSI_RX 3
#define BAT_COOF 0.0092957746478873
#define BAT_MIN 200
#define BAT_MAX 290
#include <MySensors.h>
MyMessage upMsg(UP_POWER_SWITCH_ID, V_STATUS);
MyMessage downMsg(DOWN_POWER_SWITCH_ID, V_STATUS);
MyMessage powerMsg(POWER_CHILD_ID, V_VAR1);
MyMessage msgRF52RssiReceiv(CHILD_ID_nRF52_RSSI_RX, V_VAR1);
void preHwInit() {
pinMode(31, OUTPUT); //power management pin
digitalWrite(31, HIGH);
delay(3000);
pinMode(3, INPUT); // on off mode button
pinMode(25, OUTPUT); // sens1 led
pinMode(26, OUTPUT); // sens1 led
pinMode(27, OUTPUT); // sens1 led
pinMode(6, OUTPUT); // sens21 led
pinMode(7, OUTPUT); // sens2 led
pinMode(8, OUTPUT); // sens2 led
pinMode(28, OUTPUT); // bizzer
pinMode(2, INPUT); // common interrupt for touch sensors
pinMode(9, INPUT); // touch sensors1
pinMode(10, INPUT); //touch sensors2
pinMode(29, INPUT); // battery
digitalWrite(28, LOW);
digitalWrite(27, HIGH);
digitalWrite(26, HIGH);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
}
void before()
{
NRF_POWER->DCDCEN = 1;
analogReadResolution(12);
disableNfc();
turnOffAdc();
digitalWrite(25, LOW);
digitalWrite(6, LOW);
wait(200);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
wait(100);
playSound0();
wait(100);
digitalWrite(25, LOW);
digitalWrite(6, LOW);
wait(200);
digitalWrite(25, HIGH);
digitalWrite(6, HIGH);
wait(3000);
digitalWrite(27, LOW);
digitalWrite(8, LOW);
wait(200);
digitalWrite(27, HIGH);
digitalWrite(8, HIGH);
wait(400);
digitalWrite(6, LOW);
digitalWrite(25, LOW);
wait(200);
digitalWrite(6, HIGH);
digitalWrite(25, HIGH);
wait(400);
digitalWrite(26, LOW);
digitalWrite(7, LOW);
wait(200);
digitalWrite(26, HIGH);
digitalWrite(7, HIGH);
wait(1000);
digitalWrite(26, LOW);
digitalWrite(7, LOW);
}
void setup()
{
digitalWrite(26, HIGH);
digitalWrite(7, HIGH);
wait(50);
playSound();
wait(2000);
readBatLev();
wait(200);
SLEEP_TIME_W = SLEEP_TIME;
}
void presentation()
{
sendSketchInfo("EFEKTA ON|OFF NODE 2CH", "1.0");
wait(100);
present(POWER_CHILD_ID, S_CUSTOM, "BATTERY DATA");
wait(100);
present(UP_POWER_SWITCH_ID, S_BINARY, "UP SWITCH");
wait(100);
present(DOWN_POWER_SWITCH_ID, S_BINARY, "DOWN SWITCH");
}
void loop()
{
if (sens_flag1 == 0 && sens_flag2 == 0) {
if (switch_a == 0 && switch_b == 0) {
timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, 3600000, false);
wait_off = 1;
} else {
//oldmillis = millis();
timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, SLEEP_TIME_W, false);
wait_off = 0;
}
}
if (timer_status == 3) {
wait(100);
digitalWrite(27, LOW);
digitalWrite(8, LOW);
wait(2000);
digitalWrite(27, HIGH);
digitalWrite(8, HIGH);
wait(100);
digitalWrite(31, LOW);
}
if (timer_status == 2) {
if (digitalRead(9) == HIGH && sens_flag1 == 0 && switch_b == 0) {
sens_flag1 = 1;
if (switch_a == 0) {
oldmillis = millis();
SLEEP_TIME_W = SLEEP_TIME;
switch_a = 1;
digitalWrite(6, LOW);
wait(10);
playSound1();
wait(20);
playSound2();
wait(50);
send(upMsg.set(switch_a));
wait(200);
} else {
switch_a = 0;
digitalWrite(6, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(upMsg.set(switch_a));
wait(200);
}
}
if (digitalRead(10) == HIGH && sens_flag2 == 0 && switch_a == 0) {
sens_flag2 = 1;
if (switch_b == 0) {
oldmillis = millis();
SLEEP_TIME_W = SLEEP_TIME;
switch_b = 1;
digitalWrite(25, LOW);
wait(10);
playSound1();
wait(20);
playSound2();
wait(50);
send(downMsg.set(switch_b));
wait(200);
} else {
switch_b = 0;
digitalWrite(25, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(downMsg.set(switch_b));
wait(200);
}
}
if (digitalRead(9) == LOW && sens_flag1 == 1) {
sens_flag1 = 0;
}
if (digitalRead(10) == LOW && sens_flag2 == 1) {
sens_flag2 = 0;
}
if (switch_a == 1 || switch_b == 1) {
if (wait_off == 0) {
newmillis = millis();
wait(10);
SLEEP_TIME_W2 = SLEEP_TIME_W;
wait(10);
interrupt_time = newmillis - oldmillis;
wait(10);
SLEEP_TIME_W = SLEEP_TIME_W2 - interrupt_time;
wait(10);
Serial.print("WAS IN A SLEEP: ");
Serial.print(newmillis - oldmillis);
Serial.println(" MILLISECONDS");
if (SLEEP_TIME_W < 1000) {
if (switch_a == 1) {
switch_a = 0;
digitalWrite(6, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(upMsg.set(switch_a));
wait(200);
}
if (switch_b == 1) {
switch_b = 0;
digitalWrite(25, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(downMsg.set(switch_b));
wait(200);
}
SLEEP_TIME_W = SLEEP_TIME;
wait(50);
}
Serial.println(SLEEP_TIME);
Serial.println(SLEEP_TIME_W);
Serial.println(SLEEP_TIME_W2);
Serial.print("GO TO SLEEP FOR: ");
Serial.print(SLEEP_TIME_W);
Serial.println(" MILLISECONDS");
}
oldmillis = millis();
}
}
if (timer_status == -1) {
if (switch_a == 1 || switch_b == 1) {
if (switch_a == 1) {
switch_a = 0;
digitalWrite(6, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(upMsg.set(switch_a));
wait(200);
}
if (switch_b == 1) {
switch_b = 0;
digitalWrite(25, HIGH);
wait(10);
playSound2();
wait(20);
playSound1();
wait(50);
send(downMsg.set(switch_b));
wait(200);
}
} else {
readBatLev();
}
}
}
void disableNfc() {
NRF_NFCT->TASKS_DISABLE = 1;
NRF_NVMC->CONFIG = 1;
NRF_UICR->NFCPINS = 0;
NRF_NVMC->CONFIG = 0;
}
void turnOffAdc() {
if (NRF_SAADC->ENABLE) {
NRF_SAADC->TASKS_STOP = 1;
while (NRF_SAADC->EVENTS_STOPPED) {}
NRF_SAADC->ENABLE = 0;
while (NRF_SAADC->ENABLE) {}
}
}
void myTone(uint32_t j, uint32_t k) {
j = 500000 / j;
k += millis();
while (k > millis()) {
digitalWrite(28, HIGH); delayMicroseconds(j);
digitalWrite(28, LOW ); delayMicroseconds(j);
}
}
void playSound0() {
myTone(1300, 50);
wait(20);
myTone(1300, 50);
wait(50);
}
void playSound() {
myTone(700, 30); 
wait(10);
myTone(700, 30);
wait(10);
myTone(700, 30);
wait(50);
}
void playSound1() {
myTone(200, 10);
wait(10);
myTone(400, 5);
wait(30);
}
void playSound2() {
myTone(400, 10);
wait(10);
myTone(200, 5);
wait(30);
}
void readBatLev() {
temp = analogRead(29);
vcc = temp * 0.0033 * 100;
battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
if (battery < 0) {
battery = 0;
}
if (battery > 100) {
battery = 100;
}
sendBatteryLevel(battery, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
send(powerMsg.set(temp));
wait(200);
NrfRSSI = transportGetReceivingRSSI();
NrfRSSI2 = map(NrfRSSI, -85, -40, 0, 100);
if (NrfRSSI2 < 0) {
NrfRSSI2 = 0;
}
if (NrfRSSI2 > 100) {
NrfRSSI2 = 100;
}
send(msgRF52RssiReceiv.set(NrfRSSI2));
wait(200);
}

Nā waihona hihia ma stl - kaʻa google

Nā waihona PCB Gerber - kaʻa google

No nā nīnau e pili ana i kēia hoʻomohala ʻana, e pili ana i nā pilikia i kāu hoʻomohala ʻana ma Arduinos a me Mysensors e hele mau mai e hoʻopakele i kā mākou kamaʻilio telegram - https://t.me/mysensors_rus.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka