Чудеса с датчиками
- Войдите на сайт для отправки комментариев
Всем доброе время суток, у меня возникла проблема, и весьма странная (На мой взгляд).
В арсенале имеется: датчик качества воздуха MQ-135, датчик метана и др. газов MQ-4, датчик освещённости bh1750. Ну и Arduino UNO
На скорую руку было собрано всё это на макетной плате. Точнее давайте так: когда я получил MQ-135 я воткнул его в ардуину, и считывал с него показания. Нормой было 60-70 попугаев, при выдыхе в датчик СО2, он зашкаливал до 200-300 (уже точно не помню) попугаев.
Так вот, всё это на скорую руку было собрано на макетной плате. Но тут начались чудеса: MQ-135 зашкаливает даже после 24 часового прогрева. Сначала я начал грешить на питание, но блин, MQ-4 же работает отлично! Никаких проблем не возникло, всё так же реагирует, поднимаясь с 70-90 попугаев до 400-500, нюхая газ из зажигалки. Ну ладно, воткнул я на датчики внешний блок питания 5В 0,9А. Соеденил массу с ардуиной (Иначе не читает показатели аналоговые). Напряжение ардуины поднялось (Из-за отсутсвия потребителей), но с MQ-135 та же петрушка. Опустив руки я пошёл спать, выключив компьютер. Выдернул Ардуино из ПК и о чудо! Встроенный в датчик светодиод, сигнализирующий о превишении порога погас! Так так так, подумал я. И не вытыкая ардуину из ПК (Из него даже в выключенном состоянии подаётся напряжение на USB) Вытащил все провода, ведущие от ардуины к макетке. Тоесть на датчики подаётся ТОЛЬКО питание от БП, но в таком положении светодиод не гаснет. В чём может быть проблема? Код врядли поможет, но вот он (Сильно не пинайте)
#include <Wire.h>
#include <BH1750.h>
#define SENSOR_AQ A3
#define SENSOR_CH A2
BH1750 lightMeter;
void setup(){
Serial.begin(9600);
lightMeter.begin();
Serial.println("Running...");
}
void loop() {
uint16_t lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.print(" lx ");
long val = 0;
for (int i=0; i<100; ++i) {
val = val + analogRead(SENSOR_AQ);
}
val = val/100;
Serial.print("Air Quality: ");
Serial.print(val);
Serial.print(" Pop. ");
long va = 0;
for (int i=0; i<100; ++i) {
va = va + analogRead(SENSOR_CH);
}
va = va/100;
Serial.print("CH4: ");
Serial.print(va);
Serial.print(" Pop. ");
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
ADCSRA |= _BV(ADSC);
while (bit_is_set(ADCSRA, ADSC));
uint8_t low = ADCL;
uint8_t high = ADCH;
float result = (high<<8) | low;
result = (1.1 * 1023.0 * 1000) / result;
Serial.print("Board voltage: ");
Serial.print(result);
Serial.println(" mV");
delay(500);
}
Вот я вам даже видео снял: https://youtu.be/wgzNgr0KF4I
И картинки: http://uploads.ru/?g=MmCaV.jpg
Заранее спасибо!
Только что подключил питание датчика не через всю макетную плату, а напрямую в боковые дорожки питания. Всё заработало. Но почему?