24 C
Hanoi
Chủ Nhật, Tháng Mười Một 27, 2022

THIẾT KẾ PHẦN CỨNG - NHẬN THIẾT KẾ ĐIỆN TỬ CHO SẢN PHẨM PHẦN CỨNG SỐ, IOT, CÔNG NGHIỆP,...

Home LẬP TRÌNH VI ĐIỀU KHIỂN ARDUINO Arduino Uno với cảm biến DHT11 hiển thị lên màn hình OLED

Arduino Uno với cảm biến DHT11 hiển thị lên màn hình OLED

Chuẩn bị phần cứng

Trong ví dụ này, bạn sẽ cần các linh kiện sau:

  • Màn hình OLED 1x 0,96 inch
  • 1x Arduino
  • 1x cảm biến nhiệt độ và độ ẩm DHT11
  • 1x Breakboard
  • 1x Điện trở 10k Ohm
  • Dây dẫn

Thông số kĩ thuật DHT11:

  • Điện áp hoạt động: 3-5.5V DC
  • Ngưỡng độ ẩm: 20 – 90%
  • Sai số độ ẩm: ± 5%
  • Ngưỡng nhiệt độ: 0 – 55oC
  • Sai số nhiệt độ: ± 2o

Màn hình OLED:

Đó là một màn hình rất nhỏ với 128 x 64 pixel OLED riêng lẻ và không cần đèn nền. Màn hình OLED là đơn sắc (màu trắng), nhưng có những mẫu khác với nhiều màu.
Màn hình này sử dụng giao tiếp I2C. Điều này có nghĩa là nó giao tiếp với Arduino chỉ bằng 2 chân.

  • DHT11 VCC pin – 5V
  • OLED VCC pin – 5V
  • DHT11 GND pin – GND
  • OLED GND pin – GND
  • DHT11 Data pin – D2 của Arduino Uno
  • OLED SCL pin – A4 của Arduino Uno
  • OLED SDA pin – A5 của Arduino Uno

Nếu bạn đang sử dụng board Arduino khác chứ không phải uno, hãy tìm hiểu các chân SCL và SDA của chúng là gì.

  • Nano: SDA (A4); SCL (A5);
  • MEGA: SDA (20); SCL (21);
  • Leonardo: SDA (20); SCL (21);

Code chương trình

Thư viện:

Để điều khiển màn hình OLED, bạn sẽ cần thư viện của “adafruit_GFX.h” và “adafruit_SSD1306.h”.

Cài đặt thư viện adafruit_GFX

  1. Nhấn vào đây để tải về thư viện adafruit_GFX.
  2. Giải nén thư mục .zip và bạn sẽ thấy thư mục Adafruit-GFX-Library-master
  3. Đổi tên thư mục của bạn từ Adafbean-GFX-Library-mastervào thành Adafruit_GFX_Library
  4. Di chuyển thư mục Adafruit_GFX_Libraryvào thư mục thư viện cài đặt Arduino IDE của bạn
  5. Cuối cùng, mở lại Arduino IDE

Cài đặt thư viện adafruit_SSD1306

  1. Nhấn vào đây để tải xuống thư viện adafruit_SSD1306.
  2. Giải nén thư mục .zip và bạn sẽ thấy thư mục Adafruit-SSD1306-Library-master
  3. Đổi tên thư mục của bạn thành Adafruit-SSD1306
  4. Di chuyển thư mục Adafruit_SSD1306 vào thư mục thư viện cài đặt Arduino IDE của bạn
  5. Cuối cùng, mở lại Arduino IDE

Đây là một số chức năng sẽ giúp bạn xử lý thư viện màn hình OLED để viết văn bản hoặc vẽ đồ họa đơn giản.

  • clearDisplay () – tất cả các pixel đều tắt
  • drawPixel (x, y, color) – vẽ một pixel theo tọa độ x, y
  • setTextSize (n) – đặt kích thước phông chữ, hỗ trợ kích thước từ 1 đến 8
  • setCoder (x, y) – đặt tọa độ để bắt đầu viết văn bản
  • print (tin nhắn trực tiếp) – in các ký tự ở vị trí x, y

Cài đặt thư viện cảm biến DHT

  • Nhấn vào đây để tải về thư viện cảm biến DHT.
  • Giải nén thư mục .zip và bạn sẽ nhận được thư viện DHT-sensor-library-master
  • Đổi tên thư mục của bạn thành DHT-sensor-library
  • Di chuyển thư mục DHT_sensor_Library vào thư mục thư viện cài đặt Arduino IDE của bạn
  • Cuối cùng, mở lại Arduino IDE

Code hiển thị nhiệt độ và độ ẩm lên màn hình OLED

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"

#define DHTPIN 2     
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup()   {                
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C
    display.display(); // show splash screen
    delay(2000);
    display.clearDisplay();   // clears the screen and buffer
    dht.begin();
    delay(2000);
}

void loop() {
    float h = dht.readHumidity();
    // Read temperature as Celsius (the default)
    float t = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    float f = dht.readTemperature(true);

    // Check if any reads failed.
    if (isnan(h) || isnan(t) || isnan(f)) {
        delay(2000);
    } 
    else {
        // routine for converting temp/hum floats to char arrays
        char temp_buff[5]; char hum_buff[5];
        char temp_disp_buff[11] = "Tmp:";
        char hum_disp_buff[11] = "Hum:";
    
        // appending temp/hum to buffers
        dtostrf(t,2,1,temp_buff);
        strcat(temp_disp_buff,temp_buff);
        dtostrf(h,2,1,hum_buff);
        strcat(hum_disp_buff,hum_buff);
    
        // routine for displaying text for temp/hum readout
        display.clearDisplay();
        display.setTextSize(2);
        display.setTextColor(WHITE);
        display.setCursor(0,0);
        display.println(temp_disp_buff);
        display.println(hum_disp_buff);
        display.display();
        delay(2000);
    }
}

Code khác, có chuyển đổi độ F:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT11   // DHT 11
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Wire.begin();
  dht.begin(); // initialize dht
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// initialize with the I2C addr 0x3C (for the 128x32)(initializing the display)
  Serial.begin(9600);
}
void displayTempHumid(){
  delay(2000);
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    display.clearDisplay(); // clearing the display
    display.setTextColor(WHITE); //setting the color
    display.setTextSize(1); //set the font size
    display.setCursor(5,0); //set the cursor coordinates
    display.print("Failed to read from DHT sensor!");
    return;
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Humidity: "); 
  display.print(h);
  display.print(" %\t");
  display.setCursor(0,10);
  display.print("Temperature: "); 
  display.print(t);
  display.print(" C"); 
  display.setCursor(0,20);
  display.print("Temperature: "); 
  display.print(f);
  display.print(" F"); 
}
void loop()
{
  displayTempHumid();
  display.display();
}

Theo:
https://vietmachine.com.vn/
https://electrosome.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Chia sẻ PCB KIT ESP32

Mạch nguyên lý schemaic: Download toàn bộ project phần mềm Altium: DOWNLOAD Một vài hình ảnh thiết kế trên Altium:

Chia sẻ PCB Ethernet Gigabit Switch 5 Port

Mạch nguyên lý Schematic: DOWNLOAD ALTIUM PROJECT Một số hình ảnh 3D và 2D của mạch: Lớp TOP: Lớp 2: Lớp 3:Lớp Bottom:

Chia sẻ PCB mạch Hub USB2.0 dùng FE1.1S

DOWNLOAD PROJECT (ALTIUM) Mạch thiết kế trên phần mềm Altium, 2 lớp, dùng cho mục đích thử nghiệm.

Chia sẻ PCB nguồn công nghiệp VRB2405YMD-20WR3

Công suất đầu ra 20 Vin (VDC) 18~36 Vout (VDC) 5 Số đầu ra 1 Điện áp cách ly 1500     DOWNLOAD  

Recent Comments