// Определяем ядро платы Arduino // для установки рабочего напряжения #if defined(__AVR__) #define OPERATING_VOLTAGE 5.0 #else #define OPERATING_VOLTAGE 3.3 #endif // Назначаем пины для коммуникации с датчиком пыли constexpr uint8_t PIN_AOUT = A0; constexpr uint8_t PIN_IR_LED = A1; // Нулевой порог напряжения float zeroSensorDustDensity = 0.6; // Переменные для хранения данных с датчика int sensorADC; float sensorVoltage; float sensorDustDensity; void setup() { // Открываем Serial-порт Serial.begin(9600); // Пин с IR-LED в режим выхода pinMode(PIN_IR_LED, OUTPUT); // Выключаем IR-LED digitalWrite(PIN_IR_LED, LOW); } void loop() { // Считываем значение с датчика for (int i = 0; i < 10 ; i++) { digitalWrite(PIN_IR_LED, HIGH); delayMicroseconds(280); sensorADC += analogRead(PIN_AOUT); digitalWrite(PIN_IR_LED, LOW); delay(10); } sensorADC = sensorADC / 10; // Переводим «сырые» значения с АЦП в напряжение sensorVoltage = (OPERATING_VOLTAGE / 1024.0) * sensorADC * 11; // Переводим напряжение в концентрацию пыли // Также учитываем нулевой порог напряжение if (sensorVoltage < zeroSensorDustDensity) { sensorDustDensity = 0; } else { sensorDustDensity = 0.17 * sensorVoltage - 0.1; } // Выводим результат в Serial-порт; Serial.print(sensorVoltage); Serial.print("\t\t"); Serial.print(sensorDustDensity); Serial.println(" ug/m3"); delay(1000); }