DIY RF बग डिटेक्टर के लिए ESP32 फर्मवेयर
Wikiprompt से, मुफ्त प्रॉम्प्ट विश्वकोश
DIY RF बग डिटेक्टर के लिए ESP32 फर्मवेयर क्लॉड कोड के लिए प्रॉम्प्ट, ताकि वह हैंडहेल्ड RF सिग्नल (छिपे बग) डिटेक्टर के लिए पूरा Arduino/ESP32 फर्मवेयर तैयार कर सके, जिसमें OLED बार ग्राफ और ऑडियो फीडबैक हो।
संबंधित मीडिया
प्रॉम्प्ट सामग्रीसहेजें
🌐
यहाँ ESP32 के लिए RF बग डिटेक्टर फर्मवेयर है:
```cpp
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <driver/dac.h>
// पिन परिभाषाएँ
#define RF_DETECTOR_PIN 34 // AD8317 एनालॉग आउटपुट
#define BUZZER_PIN 25 // बज़र पिन
#define CAL_BUTTON_PIN 4 // कैलिब्रेशन बटन
// OLED सेटअप
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// कैलिब्रेशन वैरिएबल्स
float baseline_dBm = -60.0; // डिफ़ॉल्ट बेसलाइन (dBm में)
float current_dBm = 0.0;
// टाइमिंग वैरिएबल्स
unsigned long last_read_time = 0;
const unsigned long READ_INTERVAL = 50; // 20 रीडिंग प्रति सेकंड
// AD8317 कैलिब्रेशन पैरामीटर्स (ट्यून करने योग्य)
const float V_MIN = 0.2; // न्यूनतम वोल्टेज (वोल्ट में)
const float V_MAX = 2.2; // अधिकतम वोल्टेज (वोल्ट में)
const float DB_RANGE = 60.0; // dB रेंज (AD8317 के लिए लगभग 60 dB)
const float DB_OFFSET = -75.0; // dBm ऑफसेट (ट्यून करें)
void setup() {
Serial.begin(115200);
// OLED इनिशियलाइज़ेशन
Wire.begin(21, 22); // SDA, SCL पिन
if(!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println("OLED नहीं मिला!");
while(1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// बज़र और बटन सेटअप
pinMode(BUZZER_PIN, OUTPUT);
pinMode(CAL_BUTTON_PIN, INPUT_PULLUP);
// ADC रिज़ॉल्यूशन 12 बिट पर सेट करें
analogReadResolution(12);
display.display();
delay(1000);
}
void loop() {
unsigned long current_time = millis();
// हर 50ms में एक बार रीडिंग लें (20 Hz)
if(current_time - last_read_time >= READ_INTERVAL) {
last_read_time = current_time;
// ADC रीडिंग लें और वोल्टेज में बदलें
int raw_adc = analogRead(RF_DETECTOR_PIN);
float voltage = (raw_adc / 4095.0) * 3.3;
// वोल्टेज को dBm में बदलें (रैखिक इंटरपोलेशन)
current_dBm = map_voltage_to_dBm(voltage);
// कैलिब्रेशन बटन चेक करें (LOW = दबाया गया)
if(digitalRead(CAL_BUTTON_PIN) == LOW) {
baseline_dBm = current_dBm;
// फीडबैक के लिए तीन बीप दें
for(int i = 0; i < 3; i++) {
tone(BUZZER_PIN, 1000, 100);
delay(150);
}
Serial.println("कैलिब्रेटेड!");
}
// बज़र फ्रीक्वेंसी सिग्नल स्ट्रेंथ के अनुसार सेट करें
update_buzzer(current_dBm);
// OLED डिस्प्ले अपडेट करें
update_display(current_dBm);
// डिबग आउटपुट
Serial.print("ADC: ");
Serial.print(raw_adc);
Serial.print(" | V: ");
Serial.print(voltage);
Serial.print(" | dBm: ");
Serial.print(current_dBm);
Serial.print(" | Baseline: ");
Serial.println(baseline_dBm);
}
}
// वोल्टेज को dBm में बदलने का फंक्शन
float map_voltage_to_dBm(float voltage) {
// क्लैम्पिंग वोल्टेज रेंज में
if(voltage < V_MIN) voltage = V_MIN;
if(voltage > V_MAX) voltage = V_MAX;
// रैखिक मैपिंग: वोल्टेज -> dBm
float dBm = DB_OFFSET + ((voltage - V_MIN) / (V_MAX - V_MIN)) * DB_RANGE;
return dBm;
}
// बज़र को सिग्नल स्ट्रेंथ के अनुसार अपडेट करें
void update_buzzer(float signal_dBm) {
float delta = signal_dBm - baseline_dBm; // बेसलाइन से अंतर
if(delta > 粘连1.0) { // बेसलाइन से 1 dB ऊपर होने पर बीप शुरू करें
// फ्रीक्वेंसी 500 Hz से 5000 Hz तक, सिग्नल के साथ बढ़ती हुई
int freq = map((int)(delta * 10), 10, 500, 500, 5000);
freq = constrain(freq, 500, 5000);
tone(BUZZER_PIN, freqapsed, 20); // 20ms की बीप
} else {
noTone(BUZZER_PIN);
}
}
// OLED डिस्प्ले अपडेट करें
void update_display(float signal_dBm) {
display.clearDisplay();
// शीर्षक
display.setCursor(0, 0);
display.print("RF Detector");
// dBm मान प्रदर्शित करें
display.setCursor(0, 16);
display.print("Signal: ");
display.print(signal_dBm);
display.print(" dBm");
// बेसलाइन प्रदर्शित करें
display.setCursor(0, 26);
display.print("Base: ");
display.print(baseline_dBm);
display.print(" dBm");
// बार ग्राफ बनाएं
draw_bar_graph(signal_dBm);
display.display();
}
// बार ग्राफ ड्रॉ करने का फंक्शन
void draw_bar_graph(float signal_dBm) {
float delta = signal_dBm - baseline_dBm;
// डेल्टा को 0-100% में बदलें (0-20 dB रेंज)
int bar_height = map((int)(delta * 10), 0, 200, 0, 40);
bar_height = constrain(bar_height, 0, 40);
// बार ग्राफ ड्रॉ करें (नीचे से ऊपर)
int bar_width = 10;
int bar_x = 110;
int bar_y = 54; // नीचे का आधार
// बेसलाइन के नीचे वाले हिस्से को हरे रंग में
for(int i = 0; i < 50; i++) {
int y = bar_y - i;
if(i < 40) {
display.drawPixel(bar_x, y, SSD1306_WHITE);
display.drawPixel(bar_x + 1, y, SSD1306_WHITE);
display.drawPixel(bar_x + 2, y, SSD1306_WHITE);
}
}
// सक्रिय भाग को सफेद रंग में
for(int i = 0; i < bar_height; i++) {
int y = bar_y - i;
display.drawPixel(bar_x, y, SSD1306_WHITE);
display.drawPixel(bar_x + 1, y, SSD1306_WHITE);
display.drawPixel(bar_x + 2, y, SSD1306_WHITE);
}
// सीमाएँ
display.drawRect(bar_x - 2, bar_y - 40, 7, 41, SSD1306_WHITE);
}
```
**ट्यूनिंग के लिए टिप्स:**
- `DB_OFFSET` और `DB_RANGE` को अपने AD8317 मॉड्यूल के अनुसार समायोजित करें
- बेसलाइन के ऊपर बीप शुरू करने की सीमा (`delta > 1.0`) बदलें
- बजर की फ्रीक्वेंसी रेंज को अपनी पसंद के अनुसार बदलें
पूरा प्रॉम्प्ट देखने के लिए साइन इन करें
Continue with:
By logging in, you agree to our Terms of Use and Privacy Policy
उपयोग
यह प्रॉम्प्ट coding के साथ उपयोग के लिए डिज़ाइन किया गया है। ऊपर प्रॉम्प्ट सामग्री कॉपी करें और अपने पसंदीदा AI टूल में पेस्ट करें।
सर्वोत्तम परिणामों के लिए, आप अपनी विशिष्ट आवश्यकताओं के अनुसार प्लेसहोल्डर (वर्ग कोष्ठक या बड़े अक्षरों में दर्शाए गए) को अनुकूलित कर सकते हैं।
चर्चा
0 टिप्पणियाँ