DHT11 перестает работать при подаче питания с платы блока питания

У меня был мини-проект с DHT11, датчиком температуры и влажности, который отлично работал на моем клоне Arduino UNO. Затем я купил плату питания, которая может питать датчик требуемыми 5В, но по какой-то причине она не работает. Питание датчика от Arduino приводит к тому, что он получает правильные значения, питание от платы приводит к тому, что он вообще перестает работать.

Я использовал мультиметр для проверки вольт и ампер. Показания на датчике одинаковые с Ардуино и платой, 5В, а вот амперы нет. Создается впечатление, что датчик потребляет энергию только на мгновение, пока «чувствует». При использовании Arduino ток 1,62 мА поступает на датчик, а затем падает до 0, но при использовании платы он никогда не превышает 0,001 мА.

Я повторил тест с разными проводами, макетными платами и даже платами питания. У меня их трое, все работают нормально и показания мультиметра одинаковые. На плате перемычки в правильном положении: 5В.

Я всего лишь любитель, изучающий, как работает электроника, и я не понимаю, что здесь происходит. Есть идеи?

Работает:

Не работает:

Не думаю, что проблема в коде, но на всякий случай...

#include "DHTStable.h"

DHTStable DHT;

#define DHT11_PIN 5

void setup() {
    Serial.begin(115200);
    Serial.println(__FILE__);
    Serial.print("LIBRARY VERSION: ");
    Serial.println(DHTSTABLE_LIB_VERSION);
    Serial.println();
    Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}

void loop() {

    // ЧТЕНИЕ ДАННЫХ
    Serial.print("DHT11, \t");
    int chk = DHT.read11(DHT11_PIN);

    switch (chk)
    {
        case DHTLIB_OK:
            Serial.print("OK,\t");
            break;
        case DHTLIB_ERROR_CHECKSUM:
            Serial.print("Checksum error,\t");
            break;
        case DHTLIB_ERROR_TIMEOUT:
            Serial.print("Time out error,\t");
            break;
        default:
            Serial.print("Unknown error,\t");
            break;
    }

    // ДАННЫЕ ДИСПЛЕЯ
    Serial.print(DHT.getHumidity(), 1);
    Serial.print(",\t");
    Serial.println(DHT.getTemperature(), 1);

    delay(2000);
}

, 👍0

Обсуждение

Датчики должны быть подключены к той же земле, что и Arduino. На изображении ниже это не так. Подключите землю (и только землю, а не +5 В) вашего внешнего источника питания к земле Arduino, и DHT11, вероятно, снова заработает., @StarCat

@StarCat Вот оно! Добавление провода для соединения земли платы блока питания с землей Arduino заставило его работать. Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я пометил его как правильный? Кроме того, если бы вы могли немного объяснить, почему это было необходимо, было бы здорово. Спасибо., @Joan Botella


1 ответ


Лучший ответ:

0

В вашем вопросе на изображении ниже ваши основания не связаны. Решение вашей проблемы состоит в том, чтобы соединить землю (и только землю, а не +5 В) вашего внешнего источника питания с землей Arduino, и DHT11, вероятно, снова заработает.

Небольшая предыстория

Датчики должны быть подключены к той же земле, что и Arduino. Это справедливо для всех частей электронной схемы. Заземление функционирует как фиксированное общее опорное напряжение, с помощью которого измеряются другие сигналы (например, цифровые данные, которыми обмениваются датчик DHT11 и Arduino).

Подключая основания, вы гарантируете, что "высокий" который выводится DHT11, читается как "высокий" уровень. Ардуино и наоборот. Когда заземление не подключено, напряжения между двумя частями цепи будут «плавающими». относительно друг друга, и они не смогут общаться. Эта ссылка объясняет немного больше.

,

Большое спасибо! Я сегодня кое-что узнал., @Joan Botella