Чудеса с датчиками
- Войдите на сайт для отправки комментариев
Всем доброе время суток, у меня возникла проблема, и весьма странная (На мой взгляд).
В арсенале имеется: датчик качества воздуха 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
Заранее спасибо!
Только что подключил питание датчика не через всю макетную плату, а напрямую в боковые дорожки питания. Всё заработало. Но почему?