Измерение температуры и влажности воздуха (DHT11)

londonist
Offline
Зарегистрирован: 21.05.2017

Приветствую всех!
Я на данный момент работаю над проектом "термометра"
Изначально я планировал сделать его безпроводным, но пока до этого не дошло, я пытаюсь всячески его улучшить. Сделать особенным.
Буду скидывать сюда свои наработки. Заранее благодарен тем кто будет хоть чемто помогать!

Сейчас стоит проблема с выводом напряжения 5V на аналоговый пин ардуины.
В проекте использую PRO Mini 5v, LCD 1602A, DHT11
Список возможно будет пополнятся.

Пинов на PRO Mini мало и приходится либо экономить, либо использовать аналоговые пины.
Сейчас осталось всего 4 свободных цифровых и их я планирую выделить на клавиатуру.

Код на момент загрузки поста:
 

/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 7
 * LCD Enable pin to digital pin 6
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 8
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

*/

// include the library code:
#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 12

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 8, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
DHT dht(DHTPIN, DHT11);

void setup() {
  lcd.begin(16, 2);
  lcd.print("Loading...");
  dht.begin();
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("C:");
  lcd.setCursor(0, 1);
  lcd.print("H2O:");
  lcd.setCursor(3, 0);
  lcd.print(t);
  lcd.setCursor(5, 1);
  lcd.print(h);
}

 

arduino328
Offline
Зарегистрирован: 01.09.2016

londonist пишет:

Сейчас стоит проблема с выводом напряжения 5V на аналоговый пин ардуины.

Здесь ему решение этой проблемы уже объяснили: http://arduino.ru/forum/programmirovanie/vyvod-5v-na-analogovyi-pin

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ох, не с тех бубей ты зашёл на этом форуме. 

londonist
Offline
Зарегистрирован: 21.05.2017

Появилась проблема с KeyPad
По непонятной причине она говорит что нажата кнопка "1", даже когда к Arduino вообще ничего не подключено.
Вот скетч
 

#include <Keypad.h>
#include <LiquidCrystal.h>

const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const byte ROWS = 3; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'}
};
byte rowPins[ROWS] = { 13, 12, 11 };
byte colPins[COLS] = { 10, 9, 8 }; 

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Loading...");

}

void loop() {
  char key = kpd.getKey();
  if (key != NO_KEY)
  {
  Serial.print(key);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(key);
  }
}

Использую KeyPad 4*4, но из за нехватки пинов пришлось использовать только сетку 3*3

bwn
Offline
Зарегистрирован: 25.08.2014

londonist пишет:

Пинов на PRO Mini мало и приходится либо экономить, либо использовать аналоговые пины.
Сейчас осталось всего 4 свободных цифровых и их я планирую выделить на клавиатуру.
 

Слюшай, вот жалуешься на недостаток пинов. Есть чудесная, дешевая, мелкосхема PCF8574. Два ее корпуса займут два пина (A4, A5) и позволят подключить и дисплей и клавиатуру. На те же пины можешь добавить часы, барометр и еще много всякой х-ни. Гуглить: "шина I2C". ИМХО.

Та, кстати, а зачем на термометре 16 клавиш?

londonist
Offline
Зарегистрирован: 21.05.2017

Спасибо за информацию.

По поводу клавиш:
Помимо термометра хочу добавить еще пару режимов для удобства, но монитор не резиновый...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

на свете есть клава на 12 клавиш, использующая всего 1 аналоговый пин

https://ru.aliexpress.com/item/Button-Keypad-3x4-module/32530917534.html

И на 16 есть. Там же

Pyotr
Offline
Зарегистрирован: 12.03.2014

Вариант подключения матричной клавиатуры через PCF8574
http://arduino.ru/forum/programmirovanie/podklyuchenie-matrichnoi-klavia...

Её же через один аналоговый вход
http://arduino.ru/forum/programmirovanie/podklyuchenie-membrannoi-klavia...