nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

இன்றைய கட்டுரையில் ஒரு புதிய திட்டத்தை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறேன். இந்த முறை கண்ணாடி பேனலுடன் கூடிய டச் சுவிட்ச் ஆகும். சாதனம் கச்சிதமானது, 42x42 மிமீ அளவிடும் (நிலையான கண்ணாடி பேனல்கள் 80x80 மிமீ பரிமாணங்களைக் கொண்டுள்ளன). இந்த சாதனத்தின் வரலாறு நீண்ட காலத்திற்கு முன்பு, சுமார் ஒரு வருடத்திற்கு முன்பு தொடங்கியது.

nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

முதல் விருப்பங்கள் atmega328 மைக்ரோகண்ட்ரோலரில் இருந்தன, ஆனால் இறுதியில் அது அனைத்தும் nRF52832 மைக்ரோகண்ட்ரோலருடன் முடிந்தது.

nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

சாதனத்தின் தொடு பகுதி TTP223 சில்லுகளில் இயங்குகிறது. இரண்டு சென்சார்களும் ஒரு குறுக்கீடு மூலம் வழங்கப்படுகின்றன. ஒரு CR2477 பேட்டரி மூலம் இயக்கப்படுகிறது, TPS610981 சிப்பில் ஒரு பூஸ்ட் மாற்றி மூலம் | தரவுத்தாள்.

nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்
nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

புலம்-விளைவு டிரான்சிஸ்டர்களைப் பயன்படுத்தி சாதனம் ஒரு பவர்-ஆஃப் சர்க்யூட்டை செயல்படுத்துகிறது. பொத்தானை அழுத்திய பிறகு, மைக்ரோகண்ட்ரோலரே பவர் கட்டுப்பாட்டை இடைமறித்து, பின்னர் பொத்தானை சேவை முறைகளுக்குப் பயன்படுத்தலாம் (என் விஷயத்தில், இது மற்ற சாதனங்களுடன் இணைத்தல், சக்தியை அணைத்தல் மற்றும் தொழிற்சாலை அமைப்புகளுக்கு மீட்டமைத்தல்).

மாநிலங்கள் மற்றும் சேவை முறைகளைக் குறிக்க 2 rgb LEDகள் உள்ளன. தொடு பொத்தான்கள் மற்றும் சேவை முறைகளின் ஒலிக் குறிப்பைத் தொடும்போது கிளிக் செய்வதை உருவகப்படுத்த பைசோ எமிட்டர் சேர்க்கப்பட்டுள்ளது. எல்.ஈ.டி மற்றும் பைசோ உமிழ்ப்பான் பயனரின் விருப்பப்படி ஆன் மற்றும் ஆஃப் செய்யப்படலாம். தொழில்நுட்ப சென்சார்களுக்கு கட்டளைகளை அனுப்புவதன் மூலம் ஸ்மார்ட் ஹோம் கன்ட்ரோலர் மூலம் இது செய்யப்படுகிறது; ஸ்மார்ட் ஹோம் கன்ட்ரோலர் மூலம் பேட்டரி சார்ஜ் மற்றும் சிக்னல் அளவை அனுப்புவதற்கான இடைவெளிகளையும் பயனர் மாற்றலாம். என் விஷயத்தில் அது MAJORDOMO.

டிரான்ஸ்மிட் பயன்முறையில் நுகர்வு 7mA (250kbit, 10ms), தூக்கத்தில் நுகர்வு 40µA, ஆஃப் நிலையில் உள்ள நுகர்வு 1µA க்கும் குறைவாக உள்ளது (="ஐட்ல்" பயன்முறையில் பூஸ்ட் மாற்றியின் நுகர்வு). நிரலாக்கத்திற்கான Rx, tx, swd இணைப்பு வழங்கப்பட்டுள்ளது. 2 சுருதி கொண்ட ஒரு மினியேச்சர் 3x1.27p இணைப்பு பயன்படுத்தப்படுகிறது. நிரலாக்கத்திற்காக ஒரு சிறப்பு அடாப்டர் செய்யப்படுகிறது.

nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

எப்போதும் போல, சாதனத்தின் செயல்பாடு நெறிமுறையை அடிப்படையாகக் கொண்டது MySensors. இந்த டச் சுவிட்சை ரோலர் பிளைண்ட் கண்ட்ரோல் சிஸ்டத்தில் பயன்படுத்த திட்டமிடப்பட்டுள்ளது. ஆனால் பொதுவாக, பயன்பாடு உங்கள் கற்பனையால் மட்டுமே வரையறுக்கப்படுகிறது. எடுத்துக்காட்டாக, என் மகன் (7 வயது) ஏற்கனவே சுவிட்ச் பதிப்புகளுக்கு 3 ஆர்டர்களைச் செய்துள்ளார்: குளியல் தொட்டியுடன் கூடிய கழிப்பறையில் ஒளியை இயக்கவும் அணைக்கவும் (அது தரையிலிருந்து தாழ்வாக ஏற்றப்படும்), ஒளியை இயக்க நீண்ட மற்றும் இருண்ட நடைபாதையில் ஒரு குளியல் தொட்டியுடன் கழிப்பறைக்குச் செல்லும்போது, ​​மற்றொன்று படுக்கைக்கு அருகில், உங்கள் அறையில் உள்ள விளக்கை விரைவாக இயக்கவும், இதனால் பேய்கள் ஓடிவிடும்.

nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்
nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்
nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

வழக்கு பாரம்பரியமாக ஒரு SLA அச்சுப்பொறியில் அச்சிடப்பட்டது, சாதனம் மினியேச்சர், வழக்கு சிறியதாக மாறியது, இந்த அச்சிடும் தொழில்நுட்பத்தின் பயன்பாடு நியாயமானது.

அச்சிடப்பட்ட மாதிரியைப் பார்க்கவும்nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்
nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்
nRF52832 இல் கண்ணாடி பேனலுடன் மினி டச் சுவிட்ச்

காந்தங்கள் வழக்கு மற்றும் பேட்டரி பெட்டியின் அட்டையில் ஒட்டப்படுகின்றன.

இந்தச் சாதனத்தின் சோதனைகள் கொண்ட வீடியோக்கள்:



மீண்டும் செய்ய விரும்புவோருக்கு:

Arduino IDE க்கான ரோலர் பிளைண்ட் கட்டுப்பாட்டு அமைப்பில் ஒரு சுவிட்சுக்கான நிரல் குறியீட்டை சோதிக்கவும்

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

stl இல் வழக்கு கோப்புகள் - கூகுள் டிரைவ்

கெர்பர் பிசிபி கோப்புகள் - கூகுள் டிரைவ்

இந்த மேம்பாடு பற்றிய கேள்விகளுக்கு, Arduinos மற்றும் Mysensors இல் உள்ள உங்கள் முன்னேற்றங்களில் உள்ள சிரமங்கள் பற்றிய கேள்விகளுக்கு, எங்கள் டெலிகிராம் அரட்டையில் எப்போதும் மீட்புக்கு வரும் - https://t.me/mysensors_rus.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்