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);
}
@Joan Botella, 👍0
Обсуждение1 ответ
Лучший ответ:
В вашем вопросе на изображении ниже ваши основания не связаны. Решение вашей проблемы состоит в том, чтобы соединить землю (и только землю, а не +5 В) вашего внешнего источника питания с землей Arduino, и DHT11, вероятно, снова заработает.
Небольшая предыстория
Датчики должны быть подключены к той же земле, что и Arduino. Это справедливо для всех частей электронной схемы. Заземление функционирует как фиксированное общее опорное напряжение, с помощью которого измеряются другие сигналы (например, цифровые данные, которыми обмениваются датчик DHT11 и Arduino).
Подключая основания, вы гарантируете, что "высокий" который выводится DHT11, читается как "высокий" уровень. Ардуино и наоборот. Когда заземление не подключено, напряжения между двумя частями цепи будут «плавающими». относительно друг друга, и они не смогут общаться. Эта ссылка объясняет немного больше.
Большое спасибо! Я сегодня кое-что узнал., @Joan Botella
- Как запитать Arduino и 1 цветную светодиодную ленту от одного источника питания
- Как остановить uno от запуска программы при включении питания?
- Питание Arduino напряжением более 5 В
- Режим глубокого сна для Uno без сложных схем?
- Питание двух шаговых двигателей с драйверами A4988
- Как перевести RFID-модуль MFRC522 в спящий режим?
- Не удается включить Arduino Uno + Ethernet Shield с USB-разъема, отличного от компьютера
- Питание Raspberry Pi 3 от Arduino Uno
Датчики должны быть подключены к той же земле, что и Arduino. На изображении ниже это не так. Подключите землю (и только землю, а не +5 В) вашего внешнего источника питания к земле Arduino, и DHT11, вероятно, снова заработает., @StarCat
@StarCat Вот оно! Добавление провода для соединения земли платы блока питания с землей Arduino заставило его работать. Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я пометил его как правильный? Кроме того, если бы вы могли немного объяснить, почему это было необходимо, было бы здорово. Спасибо., @Joan Botella