Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

I roto i te tuhinga o tenei ra e hiahia ana ahau ki te whakapuaki ki a koe he kaupapa hou. I tenei wa ko te whakahuri pa me te panui karaihe. He iti te taputapu, he 42x42mm te ine (he 80x80mm te rahi o nga panui karaihe paerewa). I timata te hitori o tenei taputapu i mua noa atu, kotahi tau ki muri.

Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

Ko nga whiringa tuatahi i runga i te microcontroller atmega328, engari i te mutunga ka mutu katoa ki te microcontroller nRF52832.

Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

Ko te waahanga pa o te taputapu ka rere i runga i nga maramara TTP223. Ko nga pukoro e rua ka tukuna e tetahi haukoti. I whakakahangia e te pākahiko CR2477, ma te kaitahuri whakanui i te maramara TPS610981 | papararaunga.

Whakawhiti pa iti me te panui karaihe i runga i te nRF52832
Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

Ka whakatinanahia e te taputapu he ara iahiko hiko ma te whakamahi i nga transistors paanga-a-mara. I muri i te pehi i te paatene, ko te microcontroller ake ka haukotia te mana mana katahi ka taea te whakamahi i te paatene mo nga momo ratonga (i taku keehi, kei te hono tenei ki etahi atu taputapu, ka whakakore i te mana me te tautuhi ki nga tautuhinga wheketere).

E 2 rgb LED mo te tohu i nga ahuatanga me nga momo ratonga. Kua taapirihia he piezo emitter hei whakataurite i te paato ka pa ki nga paatene pa me te tohu tangi o nga momo ratonga. Ko nga rama rama me te piezo emitter ka taea te whakaka me te whakaweto i runga i te whakaaro a te kaiwhakamahi. Ka mahia tenei ma te kaiwhakahaere o te kaainga atamai ma te tuku whakahau ki nga puoro hangarau; ka taea hoki e te kaiwhakamahi te whakarereke i nga waahi mo te tuku utu pākahiko me te taumata tohu na roto i te kaiwhakahaere kaainga atamai. I roto i taku take he MAORIDOMO.

Ko te whakapaunga i roto i te aratau tuku he 7mA (250kbit, 10ms), ko te kai i roto i te moe ko te 40µA, ko te kai i roto i te ahua o waho he iti iho i te 1µA (=ko te kai o te kaitahuri whakanui i te aratau "mangere"). Rx, tx, swd tūhono mō te hōtaka kua whakaratohia. Ka whakamahia he tūhono 2x3p iti me te pitch 1.27. Kua hangaia he taapiri motuhake mo te kaupapa.

Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

I nga wa katoa, ko te mahi o te taputapu kei runga i te kawa MySensors. Ko tenei huringa pa kua whakamaherehia kia whakamahia i roto i te punaha whakahaere matapo roera. Engari i te nuinga o te waa, he iti noa te tono na to whakaaro. Hei tauira, kua tukuna e taku tama (7 tau) kia 3 nga ota mo nga putanga whakawhiti: ki te whakakā me te whakaweto i te rama i roto i te wharepaku me te kaukau (ka eke ki raro mai i te papa), ki te whakakā i te rama i roto i te he ara roa me te pouri i te wa e haere ana ki te wharepaku me te kaukau, me tetahi atu hei taha moenga, mo te tere tere o te rama i to ruuma kia rere atu nga taniwha.

Whakawhiti pa iti me te panui karaihe i runga i te nRF52832
Whakawhiti pa iti me te panui karaihe i runga i te nRF52832
Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

I taia te keehi ki runga i te kaituhi SLA, he iti te taputapu, he iti te keehi, he tika te whakamahi i tenei hangarau taa.

Tirohia te tauira kua taiaWhakawhiti pa iti me te panui karaihe i runga i te nRF52832
Whakawhiti pa iti me te panui karaihe i runga i te nRF52832
Whakawhiti pa iti me te panui karaihe i runga i te nRF52832

Ka whakapirihia nga aukume ki roto i te keehi me te uhi o te wahanga pākahiko.

Ataata me nga whakamatautau o tenei taputapu:



Mo te hunga e hiahia ana ki te whakahoki ano:

Whakamātauhia te waehere papatono mo te whakawhiti i roto i te punaha whakahaere matapo mo Arduino IDE

Waea Arduino

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);
}

Kōnae take i roto i te stl - puku google

Kōnae PCB Gerber - puku google

Mo nga paatai ​​​​mo tenei whanaketanga, mo nga uauatanga o o whanaketanga i runga i nga Arduinos me Mysensors ka haere tonu mai ki te whakaora i roto i ta maatau korerorero waea - https://t.me/mysensors_rus.

Source: will.com

Tāpiri i te kōrero