CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM DHT21

Thảo luận trong 'Sản Phẩm Mới' bắt đầu bởi BanLinhKien.Vn, 28 Tháng tám 2014.

Users Viewing Thread (Users: 0, Guests: 0)

Lượt xem: 2,108

  1. BanLinhKien.Vn

    BanLinhKien.Vn Nhóm MCU

    Chào các bạn!
    Hôm nay mình xin giới thiệu đến các bạn cảm biến đo nhiệt độ, độ ẩm DHT 21.
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    Cảm biến DHT21 có 3 dây ra, với 3 màu đen, đỏ, vàng có chức năng như sau:
    Dây màu đen: GND
    Dây màu đỏ: VCC: 3.3-5V
    Dây màu vàng: dây truyền dữ liệu (DATA).
    Thông số kỹ thuật.
    Điện áp hoạt động: 3.3-5V.
    Dải đo độ ẩm: 0-99.9%.
    Dải đo nhiệt độ: -40-80 độ C.
    Sai số độ ẩm: +-3%.
    Sai số nhiệt độ: +-0.3 độ C.
    Chuẩn giao tiếp: 1 dây (1 wire).
    Giao tiếp DHT21 với Vi Điều Khiển.
    [​IMG]
    - Nguyên lý hoạt động:
    Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:
    o Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại.
    o Khi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu và nhiệt độ đo được.
    - Bước 1: gửi tín hiệu Start
    [​IMG]
    o MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian >800us. Trong Code mình để 900ms. Khi đó DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm.
    o MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.
    o Sau khoảng 20us, DHT11 sẽ kéo chân DATA xuống thấp. Nếu >20us mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT21.
    o Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT21 kéo nên cao trong 80us. Bằng việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT21 ko. Nếu tín hiệu đo được DHT21 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT.
    - Bước 2: đọc giá trị trên DHT11
    o DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte, được miêu tả như sau.
    . Byte 1: Byte cao của giá trị độ ẩm.
    . Byte 2: Byte thấp của giá trị độ ẩm
    . Byte 3: Byte cao giá trị nhiệt độ.
    . Byte 4 : Byte thấp giá trị nhiệt độ.
    . Byte 5 : kiểm tra tổng.
    . Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là chính xác, nếu sai thì kết quả đo không có nghĩa.
    Cách tính nhiệt độ và độ ẩm:
    (byte cao *256 + byte thấp) /10.
    Giá trị của nhiệt độ và độ ẩm là 1 số thực.
    o Đọc dữ liệu:
    Sau khi giao tiếp được với DHT21, DHT21 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và độ ẩm.
    . Bit 0:
    [​IMG]
    . Bit 1:
    [​IMG]
    Sau khi tín hiệu được đưa về 0, ta đợi chân DATA của MCU được DHT21 kéo lên 1. Nếu chân DATA là 1 trong khoảng 26-28 us thì là 0, còn nếu tồn tại 70us là 1. Do đó trong lập trình ta bắt sườn lên của chân DATA, sau đó delay 50us. Nếu giá trị đo được là 0 thì ta đọc được bit 0, nếu giá trị đo được là 1 thì giá trị đo được là 1. Cứ như thế ta đọc các bit tiếp theo.
    Các bạn có thể thao khảo theo CODE mình gửi kèm theo.

    Các file đính kèm:

    • DHT21.rar
      Kích thước:
      113 KB
      Đọc:
      123
  2. olala

    olala New Member

    anh có thể cho e xin code tham khảo viết bằng ccs không ạ
  3. olala

    olala New Member

    Cho e hỏi thêm là vđk e chỉ có 1 SPI thì có thể giao tiếp với 2 DHT21 không ạ?
  4. BanLinhKien.Vn

    BanLinhKien.Vn Nhóm MCU

    Chào bạn!
    Code trên được viết bằng các lệnh vào ra với GPIO chứ không dùng SPI cứng, cho nên bạn không cần quan tâm đến có bao nhiêu SPI cả.
  5. olala

    olala New Member

    A có thể nói rõ hơn được không ạ?
  6. quang.dt7bk

    quang.dt7bk Admin

    Chào bạn!
    Thông thường, ở mỗi dòng vi điều khiển sẽ hỗ trợ cho chúng ta những chân giao tiếp cứng để thực hiện giao tiếp theo chuẩn SPI, tuy nhiên để tăng độ linh hoạt cũng như việc dễ dàng trong thiết kế phần cứng, bạn có thể sử dụng các chân GPIO của vi điều khiển để viết giao tiếp SPI. Bạn tham khảo các chân trong giao tiếp SPI hoạt động như thế nào thì viết cho các chân GPIO như vậy là OK.
    Chúc bạn thành công!
  7. hellical

    hellical New Member

    Bạn cho mình hỏi con DTH22 nên giao tiếp với con vi điều khiển nào.tks bạn:)
  8. kiều phương

    kiều phương New Member

    Cách sử dụng và sửa chữa tay hàn No. 907
    10726497_314715075382858_1238141342_n.jpg
    Với sinh viên, viêc trang bị một mỏ hàn phù hợp với túi tiền thật không đơn giản . Với những bạn đam mê điện tử , mỏ hàn là dụng cụ cực kỳ quan trọng , nó ảnh hưởng trực tiếp đến chất lượng sản phẩm của chúng ta nghiên cứu sau khi hoàn thành.

    Hôm nay, mình xin giới thiệu với các bạn các sử dụng và sửa chữa đối với mỏ hàn cầm tay No.907 60W.

    Với tầm giá 190k, điều chỉnh được nhiệt độ , chế độ bảo hành hợp lý ,thì máy hàn tay là lựa chọn phù hợp cho sinh viên .

    10726597_314715652049467_210199845_n.jpg
    Cách sử dụng mỏ hàn hợp lý và hiệu quả.

    Như trên hình , khi hàn chúng ta điều chỉnh nhiệt độ là 350 c, ở nhiệt độ này đã đảm bảo được thiếc nóng chảy và độ bền của mỏ hàn , chúng ta không nên vặn nhiệt độ cao hơn.

    Trong quá trình hàn ta luôn phải giữ cho mũi hàn luôn được sạch, nhằm đảm bảo nhiệt độ hàn và chất lượng mối hàn

    Cách sửa chữa tay hàn 907 974398_314716135382752_1349927703_n.jpg
    Đây là hình ảnh tổng quát các linh kiện trong tay hàn No.907. Khi các bạn tháo ra xem xét kỹ, có bị cháy nổ linh kiện nào không. Các bạn chú ý điểm hai dây ngồn vào thường hay bị xoắn vào nhau, gây chập mạch.

    Các bệnh thường gặp:

    Sau khi sử dụng một thời gian, các bạn thấy mỏ hàn không nóng nữa , đến lúc đó chúng ta cần thay sensơ của mỏ hàn
    10733476_314716695382696_495418347_n.jpg
    Đây là sensơ tay hàn 907. Gồm 4 đầu dây , hai đầu dây trắng là dây đốt nóng 220v, hai đầu dây còn là là dây sensơ tương ứng dây đỏ là dương nguồn, còn lại là âm nguồn 10733445_314717242049308_1233857_n.jpg
    Các bạn thay cẩn thận, đúng thứ tự dây như trên hình nhé

    Lưu ý: Nếu các bạn thay sensơ nên thay luôn mũi hàn, để đảm bảo tuổi thọ của sensơ,
    10581567_314717738715925_1723852912_n.jpg
    Trên hình hà mũi hàn dao, các bạn nên dùng khi hàn linh kiện dán , mũi hàn có ưu điểm diện tích tiếp xúc nhiệt rộng và dễ thao tác . Hiện tại mình đang dùng mũi hàn này .

    Sau khia thay sensơ và mũi hàn, nếu tay hàn hoạt động bình thường, đèn báo lên , ngắt đúng nhiệt độ Ok.

    Nhưng sau bước này còn có hai bệnh thường gặp nữa ở mỏ hàn đó là .

    -Mỏ hàn tiếp tục nóng , đèn đỏ lên , nhưng không ngắt nhiệt ,các bạn phải rút nhanh tay hàn ra khỏi nguồn , không thì sẽ hỏng sensơ

    - Mỏ hàn không nóng , đèn không báo .

    Trong cả hai trường hợp chúng ta cần xem lại đường mạch, và linh kiện một lần nữa, thật tỉ mỉ . 10723481_314718372049195_1152625471_n.jpg
    Đây là đường mạch phía dưới của tay hàn , nét mạch khá mỏng . các bạn xem có bị đứt do chập hay không , đặt biệt chú ý khu vực phía hai dây nguồn vào.
    10728811_314719375382428_1289453558_n.jpg
    Tiếp theo các bạn dùng đồng hồ vạn năng, đo các điện trở trong khu vựa hình vẽ .

    Lưu ý : Nếu cháy nổ nhìn bằng mắt thường thì ta thay luôn , nhưng có trường hợp điện trở hỏng bị đứt ngầm bên trong , ta không nhìn thấy được , để cho chắc chúng ta tách 1 chân điện trở ra khỏi bo mạch và kiểm tra .

    Có các giá trị lần lượt là 1.5M, 680k, 560, và trở công suất 47K.

    Tiếp theo ta kiểm tra hai đầu chân của diode zener, cũng là chân GND( chân số 4)

    và chân VCC ( Chân số 8) của ic Lm358. Nếu trong cả hai lần đo ( đảo chiều que đo ) đều thông mạch, nghĩa là IC và diode zener đều hỏng, chúng ta cần thay hai linh kiện này . Tương tự chúng ta cần kiểm tra diode zener của đèn báo ( trong trường hợp hỏng 2, do đèn không lên )
    10733445_314717242049308_1233857_n.jpg
    Sau cùng là chúng ta kiểm tra con trở phía dưới biến trở xoay màu đen , và đo con triac này. Trên đây là một số kiến thức của mình trong việc sửa tay han NO.907.

  9. NC.Hung

    NC.Hung Mod

    Có thể xem giúp em code(asm) 89s52 dùng thạch anh 12mhz để giao tiếp với dht21 thế này được chưa? Chỗ kiểm tra byte5 em không hiểu :(! Byte5 = 8bit còn byte1-4 cũng là 8x4 = 32 bit thì so sánh như thế nào vậy mọi người? Và byte cao * 256 + byte thấp / 10 thì dùng số nguyên hay số hex vậy mọi người? Em dùng asm và kém C nên mọi người giúp đỡ em. Cho em hỏi nhúng asm vào C như thế nào nữa được không ạ?

    Các file đính kèm:

    • Code.TXT
      Kích thước:
      598 bytes
      Đọc:
      4
  10. NC.Hung

    NC.Hung Mod

    Ai có thể giúp em được không :(
  11. tranbac211

    tranbac211 New Member

    sht21 kết nối với chân mcu là chân nào vậy bác ?
    Last edited: 11 Tháng một 2015
  12. rokovn

    rokovn New Member

    uppppppppppppppppppppppppppppppppppppppp phụ
  13. NC.Hung

    NC.Hung Mod

    MCU là chân VDK để đọc tín hiệu từ CB về vdk rồi xử lý đó bạn :)
  14. viethung094

    viethung094 New Member

    Ad ơi, cho em hỏi khi em đo nhiệt độ, độ ẩm xuất ra LCD, giá trị nhiệt độ thì đo được còn độ ẩm báo 0% và 1 % thôi. như vậy là sao ạk?
  15. an.dxuan

    an.dxuan Admin

    Chào Bạn!
    Bạn cho mình hỏi code của bạn có lấy driver như bên mình hỗ trợ trên bài viết không ,hay bạn tự viết .Bạn có up code của bạn lên thì mình mới giúp bạn được
  16. tranbac211

    tranbac211 New Member

    admin có thể viết code gọn vào một file được ko.
  17. Dukebk.dt7

    Dukebk.dt7 Admin

    Code ở một file khó quản lý lắm bạn ơi. Ngày trước mình cũng viết hết code ở một file bởi vì không biết cách tạo và add file header. Khi xảy ra một lỗi thì việc Debug rất là khó khăn nên dần dần cũng tìm tòi và viết code chia ra nhiều file hơn. Như thế thì việc quản lý các chương trình con rất là dễ.
  18. an.dxuan

    an.dxuan Admin

    Bạn có thể tự mình làm điều này được mà .
    Bạn làm như sau :
    Trong file main.c của bạn đầu tiên bạn định nghĩa chân (Coppy #define chân ở trong main.h pase vào )
    Sau đó bạn coppy khai báo hàm trong thư viện dht21.h pase vào dòng tiếp theo
    Tiếp theo coppy định nghĩa hàm trong file dht21.c pase vào
    Còn thực thi trong hàm main.c cũ thì bạn giữ nguyên là được nhé .
  19. tranbac211

    tranbac211 New Member

    em coppy nhưng ko được.
  20. dainguyhiem

    dainguyhiem New Member

    bác cho e hỏi câu lệnh if(DHT_DATA_IN) return 0; nghĩa là sao ??
    sao câu lệnh if lạ vậy

Chia sẻ trang này

Lên trên