DIY無(wú)線傳感器集線器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在這個(gè)項(xiàng)目中,我們?cè)O(shè)計(jì)了一個(gè)無(wú)線傳感器集線器,利用ESP32和Arduino通過(guò)NRF24L01收發(fā)器連接。
您可以從JLCMC獲得所有組件。
特性和功能
ESP32中心:
?菜單配置與按鈕:選擇傳感器節(jié)點(diǎn),切換警報(bào)模式,查看系統(tǒng)狀態(tài),設(shè)置開關(guān)定時(shí)器。
?開關(guān)控制:通過(guò)物理開關(guān)撥動(dòng)連接的繼電器/燈/電器。
?OLED UI:實(shí)時(shí)顯示傳感器數(shù)據(jù)和系統(tǒng)狀態(tài)。
?NRF24通信:無(wú)線接收來(lái)自多個(gè)節(jié)點(diǎn)的傳感器告警。
Arduino(ATMEGA328P) -實(shí)時(shí)監(jiān)控
Arduino板作為專用警報(bào)節(jié)點(diǎn),負(fù)責(zé)監(jiān)控關(guān)鍵的安全和自動(dòng)化組件:
?門傳感器:使用簧片開關(guān)檢測(cè)打開/關(guān)閉狀態(tài),以監(jiān)控未經(jīng)授權(quán)的訪問(wèn)或進(jìn)入。
?氣體泄漏傳感器:使用mq系列傳感器連續(xù)檢查氣體泄漏(例如,LPG,甲烷)。
?自動(dòng)門鈴:檢測(cè)存在使用PIR或按鈕按下,觸發(fā)門鈴警報(bào)。
?LED指示燈:根據(jù)觸發(fā)的傳感器(例如,門,氣體,運(yùn)動(dòng))點(diǎn)亮四個(gè)LED。
?蜂鳴器警報(bào):當(dāng)任何傳感器檢測(cè)到故障或存在時(shí),一個(gè)響亮的蜂鳴器會(huì)激活。
該節(jié)點(diǎn)將所有警報(bào)無(wú)線傳輸?shù)紼SP32,實(shí)現(xiàn)快速和集中的顯示或操作。
由JLCMC贊助:您的機(jī)械零件首選合作伙伴!
介紹JLCMC,值得信賴的JLC家族的最新成員,以市場(chǎng)上最優(yōu)惠的價(jià)格提供高質(zhì)量的機(jī)械零件。憑借JLCPCB建立的卓越傳統(tǒng),JLCMC在這里為您的所有機(jī)械需求提供可靠且價(jià)格合理的解決方案。
為什么選擇JLCMC?
一個(gè)值得信賴的名字:JLCMC建立在JLC服務(wù)的基礎(chǔ)上,JLC是PCB制造和原型設(shè)計(jì)的全球領(lǐng)導(dǎo)者。他們對(duì)質(zhì)量和客戶滿意度的承諾體現(xiàn)在他們的機(jī)械零件服務(wù)中。
無(wú)與倫比的價(jià)格:忠實(shí)于JLC的傳統(tǒng),JLCMC以行業(yè)領(lǐng)先的價(jià)格提供機(jī)械零件,確保您的項(xiàng)目在不影響質(zhì)量的情況下保持預(yù)算。
廣泛的產(chǎn)品范圍:從精密工程組件到定制解決方案,JLCMC擁有將您的想法變?yōu)楝F(xiàn)實(shí)所需的一切,無(wú)論您是業(yè)余愛好者還是專業(yè)人士。
全球信任:JLC的服務(wù)贏得了全球數(shù)百萬(wàn)制造商的信任。有了JLCMC,你就有了同樣的可靠性,現(xiàn)在是在機(jī)械部件領(lǐng)域。
代碼
#include
#include
#include
#define CE 9
#define CSN 10
#define BUZZER A0
#define DOOR_STATUS_LED 8
RF24 radio(CE, CSN); // CE, CSN
const byte address[6] = "10001";
// Define data structure
struct data {
uint8_t nodeId;
uint8_t nodeState;
uint8_t doorState;
};
unsigned long previousMillis = 0;
bool buzzerState = false;
// bool wasDisconnected = false; // Flag to track disconnection state
void setup() {
Serial.begin(115200);
Serial.println("\nInitializing...");
pinMode(DOOR_STATUS_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
NRF24_Init();
}
void loop() {
if (radio.available()) {
struct data receiveData;
radio.read(&receiveData, sizeof(receiveData));
Serial.print("ID: ");
Serial.print(receiveData.nodeId);
Serial.print(", Status: ");
Serial.print(receiveData.nodeState);
Serial.print(", Door: ");
Serial.println(receiveData.doorState);
digitalWrite(DOOR_STATUS_LED, receiveData.doorState);
// digitalWrite(BUZZER, receiveData.doorState == 1 ? HIGH : LOW);
buzzer(receiveData.doorState, 100);
}
}
void NRF24_Init() {
if (!radio.begin()) {
Serial.println("? NRF24L01 Initialization Failed!");
return;
}
radio.openReadingPipe(1, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
Serial.println("? NRF24L01 Initialized Successfully!");
}
void buzzer(int signal, int delayTime) {
if (signal == 1) {
if (millis() - previousMillis >= delayTime) {
previousMillis = millis();
buzzerState = !buzzerState;
digitalWrite(BUZZER, buzzerState);
}
} else {
digitalWrite(BUZZER, LOW);
}
}
本文編譯自hackster.io