Mini touch switch e nang le phanele ea khalase ho nRF52832

Sehloohong sa kajeno ke batla ho arolelana le uena morero o mocha. Lekhetlong lena ke sesebelisoa sa ho ama se nang le phanele ea khalase. Sesebelisoa se kopane, se lekanya 42x42mm (liphanele tse tloaelehileng tsa khalase li na le boholo ba 80x80mm). Histori ea sesebelisoa sena e qalile khale, hoo e ka bang selemo se fetileng.

Mini touch switch e nang le phanele ea khalase ho nRF52832

Likhetho tsa pele li ne li le ho microcontroller ea atmega328, empa qetellong tsohle li ile tsa fela ka nRF52832 microcontroller.

Mini touch switch e nang le phanele ea khalase ho nRF52832

Karolo ea ho ama ea sesebelisoa e sebetsa ho li-chips tsa TTP223. Li-sensor ka bobeli li fanoa ke tšitiso e le 'ngoe. E tsamaisoa ke betri ea CR2477, ka sesebelisoa sa boost ho chip ea TPS610981 | Leqephe la lintlha.

Mini touch switch e nang le phanele ea khalase ho nRF52832
Mini touch switch e nang le phanele ea khalase ho nRF52832

Sesebelisoa se sebelisa potoloho ea ho tima motlakase ho sebelisa li-transistor tse sebetsang tšimong. Kamora ho tobetsa konopo, microcontroller ka boeona e thibela taolo ea matla ebe konopo e ka sebelisoa bakeng sa mekhoa ea ts'ebeletso (tabeng ea ka, sena ke ho kopanya le lisebelisoa tse ling, ho tima matla le ho seta ho litlhophiso tsa feme).

Ho na le li-LED tse 2 tsa rgb tse bontšang maemo le mekhoa ea litšebeletso. Emitter ea piezo e boetse e kentsoe ho etsisa ho penya ha o thetsa likonopo le sesupo sa molumo oa mekhoa ea litšebeletso. Li-LED le piezo emitter li ka buloa le ho tima ka boikhethelo ba mosebelisi. Sena se etsoa ka molaoli ea bohlale oa lapeng ka ho romela litaelo ho lisensara tsa tekheniki; mosebelisi a ka boela a fetola linako tsa ho romela tjhaja ea betri le boemo ba mats'oao hape ka molaoli ea bohlale oa lapeng. Tabeng ea ka ho joalo MAJORDOMO.

Tšebeliso ka mokhoa oa phetisetso ke 7mA (250kbit, 10ms), tšebeliso ea boroko ke 40µA, tšebeliso ea naha e ka tlase ho 1µA (= tšebeliso ea sesebelisoa sa boost ka mokhoa o "sebetsang"). Rx, tx, swd sehokelo bakeng sa lenaneo le fanoe. Sehokelo se senyane sa 2x3p se nang le molumo oa 1.27 se sebelisoa. Adapter e khethehileng e etsoa bakeng sa lenaneo.

Mini touch switch e nang le phanele ea khalase ho nRF52832

Joalo ka mehla, ts'ebetso ea sesebelisoa e thehiloe ho protocol Li-Sensors tsa ka. Sesebelisoa sena sa ho ama se reretsoe ho sebelisoa tsamaisong ea li-roller blind control system. Empa ka kakaretso, kopo e lekantsoe feela ke monahano oa hau. Ka mohlala, mora oa ka (ea lilemo li 7) o se a entse litaelo tse 3 bakeng sa liphetolelo tsa phetoho: ho bulela le ho tima lebone ka ntloana e nang le bate (e tla be e behiloe tlaase ho tloha fatše), ho khantša lebone ka kamoreng ea ho hlapela. phaseje e telele le e lefifi ha u ea ntlwaneng e nang le bate, mme e nngwe e le pela bethe, bakeng sa ho bonesa lebone la phaposi ya hao kapele hore dilalome di balehe.

Mini touch switch e nang le phanele ea khalase ho nRF52832
Mini touch switch e nang le phanele ea khalase ho nRF52832
Mini touch switch e nang le phanele ea khalase ho nRF52832

Nyeoe e ne e hatisoa ka tloaelo ho mochine oa khatiso oa SLA, sesebelisoa ke ntho e nyenyane, nyeoe e ile ea fetoha e nyenyane, tšebeliso ea theknoloji ena ea khatiso e nepahetse.

Sheba mofuta o hatisitsoengMini touch switch e nang le phanele ea khalase ho nRF52832
Mini touch switch e nang le phanele ea khalase ho nRF52832
Mini touch switch e nang le phanele ea khalase ho nRF52832

Limanete li khomaretsoe ka har'a mokotla le sekoaelo sa karolo ea betri.

Lifitio tse nang le liteko tsa sesebelisoa sena:



Bakeng sa ba batlang ho pheta:

Khoutu ea lenaneo la teko bakeng sa switjha ho sistimi ea taolo e sa boneng ea lirolara bakeng sa Arduino IDE

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

Lifaele tsa linyeoe ho stl - google drive

Lifaele tsa Gerber PCB - google drive

Bakeng sa lipotso mabapi le nts'etsopele ena, ka mathata a nts'etsopele ea hau ho Arduinos le Mysensors e tla lula e u thusa moqoqong oa rona oa thelekramo - https://t.me/mysensors_rus.

Source: www.habr.com

Eketsa ka tlhaloso