backup 14041130

This commit is contained in:
2026-02-19 06:17:44 +03:30
parent 18b30d7c3f
commit 2712119071
26 changed files with 9430 additions and 0 deletions

57
14041130/mq/ppm/ppm.ino Normal file
View File

@@ -0,0 +1,57 @@
#include <Arduino.h>
// ========== پارامترهای مدار ==========
#define VREF_ADC 3.3f
#define ADC_RESOLUTION 4095.0f
#define R1 1448.0f
#define R2 1566.0f
#define VCC_SENSOR 4.67f
#define RL_SENSOR 10000.0f
#define R0 139160.0f // ← مقدار R0 بدست‌آمده از کالیبراسیون (بر حسب اهم)
#define CO_A 1.9f // ضریب A در فرمول ppm = A * (Rs/R0)^B
#define CO_B -0.6f // ضریب B (معمولاً منفی)
#define ADC_PIN A2
#define NUM_SAMPLES 10
// =====================================
float readSensorVoltage() {
uint32_t sum = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {
sum += analogRead(ADC_PIN);
delay(10);
}
float adcValue = sum / (float)NUM_SAMPLES;
float vAdc = (adcValue / ADC_RESOLUTION) * VREF_ADC;
return vAdc * (R1 + R2) / R2;
}
float calculateRs(float vOut) {
if (vOut <= 0.0f) return 0.0f;
return RL_SENSOR * (VCC_SENSOR / vOut - 1.0f);
}
float calculatePPM(float rs) {
float ratio = rs / R0;
if (ratio <= 0.0f) return 0.0f;
return CO_A * pow(ratio, CO_B);
}
void setup() {
Serial1.begin(115200);
analogReadResolution(12);
pinMode(ADC_PIN, INPUT);
Serial1.println("MQ7 CO Measurement");
Serial1.print("R0 = "); Serial1.print(R0); Serial1.println(" ohms");
Serial1.println("Starting...\n");
delay(3000);
}
void loop() {
float vOut = readSensorVoltage();
float rs = calculateRs(vOut);
float ppm = calculatePPM(rs);
Serial1.print("CO = "); Serial1.print(ppm, 1); Serial1.println(" ppm");
delay(2000);
}