Mạch đo nhiệt độ sử dụng homephone lcd

Xin chào tất cả các bạn trong Cộng đồng Arduino Việt Nam. 

Hôm nay mình xin giới thiệu một thiết bị nho nhỏ ứng dụng từ bài viết thư viện cho màn hình homephone.

Thiết bị của mình gồm có

  • 01 màn hình homephone lcd - 20k
  • 01 arduino promini - 50k
  • 01 transitor pn2222 - 400d/1 con. thực tế là có thể nhiều hơn nhưng dưới 1k đồng devil
  • 02 điện trở 10k và 750 ohm - không nhớ rõ giá nó là bao nhiêu nhưng mà siêu rẻ. Lưu ý là mua theo bịch hoặc mua chục con chứ mà nói bán 1, 2 con là họ đánh á broken heart
  • 01 còi chíp (buzzer kêu) - 2.5k/1 con
  • 01 mạch đồng đục lỗ sẵn - cái này chắc tầm 20k đổ lại.

Nối mạch

về mạch thì mình sẽ vẽ lại và upload lên vào ngày hôm sau vì còn phải sửa đổi tí

Lập trình

code thì các bạn có thể tham khảo ở đây mình viết khá đơn giản

#include <homephone.h>
#include <OneWire.h>
#include <DallasTemperature.h>

homephone lcd = homephone (9, 8, 7, 6, 5);
OneWire ds (4);
DallasTemperature tempSens (&ds);


//global variable
int sirenState = LOW;
int sirenPin = A5;
float abnormalValue = 39;
unsigned long currentMillis;
unsigned long previousMillis = 0 ;
const long interval = 750;


void setup () {
  pinMode (sirenPin, OUTPUT);
  tempSens.begin();
  lcd.begin();
  lcd.setContrast(0x10);
  lcd.clearDisplay();
  Serial.begin(9600);
}

void loop() {
  tempSens.requestTemperatures();
  float temp1 = tempSens.getTempCByIndex(0);
  float temp2 = tempSens.getTempCByIndex(1);
  float temp3 = tempSens.getTempCByIndex(2);
  float temp4 = tempSens.getTempCByIndex(3);
  if (temp1 >= abnormalValue || temp2 >= abnormalValue || temp3 >= abnormalValue || temp4 >= abnormalValue){
    alert();
  }
  else {
    digitalWrite(sirenPin, LOW);
  }
  drawFrame(temp1, temp2, temp3, temp4);
}

//************this function is used to
void drawFrame(float t1, float t2, float t3, float t4) {
  //*********draw rectangle frame************
  lcd.drawRect(0, 0, 127, 63, black);
  lcd.drawLine(65, 1, 65, 62, black);
  lcd.drawLine(0, 34, 65, 34, black);

  
  //*********Display temperature information**************
  lcd.setTextColor(black, white);
  lcd.setCursor(2, 2);
  if(t1 ==-127){
    lcd.print("Failed");
  }
  else{
    lcd.print("HDD1:"); lcd.print (t1);
  }
  
  lcd.setCursor(2, 10);
  if(t2 ==-127){
    lcd.print("Failed");
  }
  else{
    lcd.print("HDD2:"); lcd.print (t2);
  }
  lcd.setCursor(2, 18);
  if (t3==-127){
    lcd.print("Failed");
  }
  else {
    lcd.print("HDD3:"); lcd.print (t3);
  }
  
  lcd.setCursor(2, 26);
  if (t4==-127){
    lcd.print("Failed");
  }
  else {
    lcd.print("HDD4:"); lcd.print (t4);
  }

  

  //*********Display Fan Information**************
  lcd.setCursor(2, 36);
  lcd.print ("FAN1:N/A");
  lcd.setCursor (2, 44);
  lcd.print ("FAN2:N/A");
  lcd.setCursor (2, 52);
  lcd.print("FAN3:N/A");

  
  


  //************Display Chart*****************
  lcd.drawRect(75,4,50,4,black);
  lcd.drawRect(75,12,50,4,black);
  lcd.drawRect(75,20,50,4,black);
  lcd.drawRect(75,28,50,4,black);
  lcd.fillRect(75,5,map(t1, 0,99.99,0,49),2,black);
  lcd.fillRect(124,5,-(50-map(t1, 0,99.99,0,49)),2,white);
  lcd.fillRect(75,13,map(t2, 0,99.99,0,49),2,black);
  lcd.fillRect(124,13,-(50-map(t2, 0,99.99,0,49)),2,white);
  lcd.fillRect(75,21,map(t3, 0,99.99,0,49),2,black);
  lcd.fillRect(124,21,-(50-map(t3, 0,99.99,0,49)),2,white);
  lcd.fillRect(75,29,map(t4, 0,99.99,0,49),2,black);
  lcd.fillRect(124,29,-(50-map(t4, 0,99.99,0,49)),2,white);  
  lcd.display();
  //delay(400);
}

//function to call siren.
void alert() {
  currentMillis = millis ();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (sirenState == LOW) {
      sirenState = HIGH;
    }
    else {
      sirenState = LOW;
    }
    digitalWrite (sirenPin, sirenState);
  }
}


Nếu có bạn nào chưa hiểu gì có thể email mình để hỏi rõ hơn nhé hoặc comment dưới bài viết, hoặc comment trong youtube channel, (nên chọn comment trên youtube vì như thế nó sẽ báo ngay cho mình laugh)

chúc các bạn có một ngày "nghịc ngợm" vui vẻ

Youtube: 
demo
Bài viết truyền cảm hứng: 
lên
14 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Vỏ hộp cho ARDUINO UNO

Tự làm 1 chiếc vỏ hộp bảo vệ cho ARDUINO UNO của bạn chưa bao giờ đơn giản như thế này. Chỉ việc đem file dxf của mình ra ngoài tiệm cắt laser (quảng cáo và cắt thôi)!

Mình mới học ARDUINO cũng được khoảng 1 tuần thôi, đọc bài viết trên page cũng nhiều nhưng chả đóng góp được gì. Hôm nay rãnh rỗi ngồi làm cái hộp cho con UNO vì mấy hôm trước mình toàn lót giấy phía dưới rồi đặt em nó lên thấy cũng bất tiện, nếu các bạn có hứng thú thì làm theo file cad mình để ở cuối bài nha.

lên
14 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Public Homephone LCD Library - Thư viện điều khiển màn hình LCD điện thoại công cộng và điện thoại bàn

Như tiêu đề, hôm nay, mình xin giới thiệu library cho arduino sử dụng để điều khiển màn hình homephone. Màn hình homephone giá bao rẻ, độ phân giải cực cao, lại dễ sử dụng. Sau đây là một số hướng dẫn khi sử dụng thư viện. Các bạn sẽ sở hữu một màn hình cực lớn để làm GAME với xuất thông tin đó nhé.

lên
21 thành viên đã đánh giá bài viết này hữu ích.