Arduino 3.5寸vLcds | Arduino I2C接口組態屏帶GPU電容觸摸屏(&HX711稱重模塊)

這個實驗主要是將HX711稱重模塊檢測到的數據,通過單片機顯示在3.5寸LCD屏幕上。
在這裏插入圖片描述

1. 準備工作

1.1 硬 件:

  • Arduino x 1
  • hx711 稱重傳感器 x 1
  • 3.5寸LCD屏幕 x 1

1.2 軟 件:

  • Arduino IDE(開發環境)
  • VisualLcds (UI設計)
2 . vLcds組態屏

2.1 什麼是3.5寸vLcds HMI 組態屏?

官方資料下載
網盤資料下載 提取碼:qz6i
(資料文件夾中打開:vLCD_I2C_Package\說明文檔\vLcds I2C接口顯示屏入門指南)

人機界面(HMI)產品由硬件和軟件兩部分組成,硬件部分包括處理器、顯示單元、輸入單元、通訊接口、數道據存貯單元等,其中處理器的性能決定了HMI產品的性能高 低,是HMI的核心單元。根據HMI的產品等級不同,處理器可分別選用8位、16位、32位的處理器。

HMI軟件一般分爲兩部分,即運行於內HMI硬件中的 系統軟件和運行於PC機Windows操作系統下的畫面組態軟件。使用者都必須先使用HMI的畫面組態軟件製作“工容程文件 ”,再通過PC機和HMI 產品的串行通訊口,把編制好的“工程文件”下載到HMI的處理器中運行。
在這裏插入圖片描述
在這裏插入圖片描述

2.2 Visual Lcd Studio 介紹

Visual Lcd Studio 軟件是用於TFT顯示模塊UI設計的PC應用工具,適合和各種尺寸的LCD屏幕。分別支持URAT,SPI,I2C,RS485接口屏的UI設計和命令測試。工具欄包含多種控件,方便用戶快速開發和應用。

在這裏插入圖片描述

軟件工具的模塊有:

  • 編輯欄:UI設計的編輯工具
  • 工具欄: 各種控件工具
  • 控件屬性:控件屬性的編輯欄
  • 界面編輯: 界面編輯區域
  • 頁面列表:編輯頁面列表
  • 圖片列表:導入圖片的列表,用於UI設計(可以導入PS設計好的圖片)
  • 編譯輸出:編譯工程的輸出窗口

2.3 LCD屏幕顯示溫度實例

以溫度page頁面,顯示溫度變量爲例。

  • 新建組態屏項目設計UI ,注意ID設置
    在這裏插入圖片描述
  • 關鍵函數

TFTlcd.SetThermometerValue(page_Id,9,value);

  • page_Id :屏幕頁面的 page_Id
  • 9 : 控件_Id
  • value : 溫度變量

在這裏插入圖片描述

2.4 關鍵代碼

else if(page_Id == Temperture_PAGE)
    {
      value =20;
      for(i=0;i<=10;i+=1)
      {
        TFTlcd.SetThermometerValue(page_Id,9,value);
		
        TFTlcd.SetNumberValue(page_Id,11,value-20);
        value +=10;
        delay(200);
      }
  
      value =120;
      for(i=0;i<=10;i+=1)
      {
        TFTlcd.SetThermometerValue(page_Id,9,value);
        TFTlcd.SetNumberValue(page_Id,11,value-20);
        value -=10;
        delay(200);
      }
    }

注意:以官方資料爲準。若出現按照官方資料中的示例設計屏幕UI、單片機源程序編譯\下載都沒有問題,屏幕仍然不能顯示傳感器數據的問題,試一試檢查線路連接的問題,說明單片機和屏幕通過I2C通信有問題。

補充:賣家的資料裏面關於I2C引腳接線出了問題,難怪我之前測試的時候,屏幕上老是顯示不了傳感器變量數據,原來是是因爲arduino 單片機 I2C接線出了問題,導致屏幕與單片機沒有進行通信。資料上面的接線如下:

Nano I2C 接線:

  • A4 SDA (數據線)
  • A5 SCL(時鐘線)

下面是官方資料上的錯誤接線:
在這裏插入圖片描述

Uno I2C接線:

  • A4 SDA (數據線)
  • A5 SCL(時鐘線)

官方資料的Arduno Uno 與屏幕的接線不存在問題,UNO板子上面有引出對應的I2C通信接口,同時A4\A5引腳也可以用。
在這裏插入圖片描述


在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

3 . HX711模塊

3.1 HX711簡介

(HX711壓力傳感器模塊資料 提取碼:qjy4)

HX711是一款專爲高精度電子秤而設計的24位A/D轉換器芯片。與同類型其它芯片相比,該芯片集成了包括穩壓電源、片內時鐘振盪器等其它同類型芯片所需要的外圍電路,具有集成度高、響應速度快、抗干擾性強等優點。降低了電子秤的整機成本,提高了整機的性能和可靠性。該芯片與後端MCU芯片的接口和編程非常簡單,所有控制信號由管腳驅動,無需對芯片內部的寄存器編程。輸入選擇開關可任意選取通道A或通道B,與其內部的低噪聲可編程放大器相連。通道A的可編程增益爲128或64,對應的滿額度差分輸入信號幅值分別爲±20mV或±40mV。通道B則爲固定的32增益,用於系統參數檢測。芯片內提供的穩壓電源可以直接向外部傳感器和芯片內的A/D轉換器提供電源,系統板上無需另外的模擬電源。芯片內的時鐘振盪器不需要任何外接器件。上電自動復位功能簡化了開機的初始化過程。

3.2 HX711芯片特點

  • 兩路可選擇差分輸入

  • 片內低噪聲可編程放大器,可選增益爲64和128

  • 片內穩壓電路可直接向外部傳感器和芯片內A/D轉換器提供電源

  • 片內時鐘振盪器無需任何外接器件,必要時也可使用外接晶振或時鐘

  • 上電自動復位電路

  • 簡單的數字控制和串口通訊:所有控制由管腳輸入,芯片內寄存器無需編程

  • 可選擇10Hz或80Hz的輸出數據速率

  • 同步抑制50Hz和60Hz的電源干擾

  • 耗電量(含穩壓電源電路):

    • 典型工作電流:1.7mA
    • 斷電電流:1μA
  • 工作電壓範圍:2.6~5.5V

  • 工作溫度範圍:-20~+85℃

  • 16管腳的SOP-16封裝

3.3 HX711引腳及功能

在這裏插入圖片描述
在這裏插入圖片描述
3.4 HX711應用電路

HX711芯片應用於計價秤的一個參考電路圖。該方案使用內部時鐘振盪器(XI=0),10Hz的輸出數據速率(RATE=0)。電源(2.7~5.5V)直接取用與MCU芯片相同的供電電源。通道A與傳感器相連,通道B通過片外分壓電阻(未在圖一中顯示)與電池相連,用於檢測電池電壓。

在這裏插入圖片描述

在這裏插入圖片描述

3.5 關鍵代碼

//****************************************************
//讀取HX711
//****************************************************
unsigned long HX711_Read(void)  //增益128
{
  unsigned long count; 
  unsigned char i;
  bool Flag = 0;

  digitalWrite(HX711_DT, HIGH);
  delayMicroseconds(1);

  digitalWrite(HX711_SCK, LOW);
  delayMicroseconds(1);

    count=0; 
    while(digitalRead(HX711_DT)); //INPUT , AD轉換未結束則等待,否則開始讀取
    for(i=0;i<24;i++)//24位
  { 
      digitalWrite(HX711_SCK, HIGH); //發送脈衝
    delayMicroseconds(1);
      count=count<<1;  //下降沿來時變量Count左移一位,右側補零
    digitalWrite(HX711_SCK, LOW); 
    delayMicroseconds(1);
      if(digitalRead(HX711_DT))
      count++; 
  } 
  digitalWrite(HX711_SCK, HIGH); 
  count ^= 0x800000;//第25個脈衝下降沿來時,轉換數據
  delayMicroseconds(1);
  digitalWrite(HX711_SCK, LOW); 
  delayMicroseconds(1);
  
  return(count);
}
4. 輕軌擁擠度顯示

4.1 框架圖
在這裏插入圖片描述

4.2 程序流程圖

在這裏插入圖片描述

4.3 關鍵代碼

void loop()
{

    int i ;
    unsigned int value_1;//定義value_1爲無符號整形
    int value_2,value_3,value_4;

/********************************************************/
//   Weight = Get_Weight();  //計算放在傳感器上的重物重量
//   Serial.print(float(Weight/1000),3); //串口顯示重量
//   Serial.print(" kg\n");  //顯示單位
//   Serial.print("\n");   //顯示單位
//   delay(1000);        //延時1s

/********************************************************/
     Weight = Get_Weight();  //計算放在傳感器上的重物重量
     Serial.print("壓力重量:");      
     Serial.print(Weight);  //顯示
     Serial.print("\n");   //

//     if(Weight <= 0)//設置數值範圍在0~1023,0~25之間
//     { Weight = 0; }
//     if(Weight >= 1023)
//      { Weight = 25; }

//    value_1 = random(0,25);
    value_1 = map((int)Weight,0,1023,0,50);//將壓力傳感器0~1023的數值裝換至0~50
    
    value_2 = random(52, 76);//random隨機函數,設置其他車廂的人數值爲52~76的隨機數
    value_3 = random(77, 100);
    value_4 = random(26, 51);
     Serial.print("屏幕重量:"); 
     Serial.print(value_1);  //顯示
     Serial.print("\n");   //
    
//   Serial.println("ProcessMessage");
    TFTlcd.SetPage(page_id_2);//page2爲常顯示頁面

    TFTlcd.SetNumberValue(page_id_2,Num_id_1,value_1);//page2,NO.1,value1分別爲:頁面2的第一號車廂顯示value人數數值
    TFTlcd.SetNumberValue(page_id_2,Num_id_2,value_2);
    TFTlcd.SetNumberValue(page_id_2,Num_id_3,value_3);
    TFTlcd.SetNumberValue(page_id_2,Num_id_4,value_4);

    TFTlcd.SetBatteryValue(page_id_2,Bry_id_1,value_1);//NO.1
    TFTlcd.SetBatteryValue(page_id_2,Bry_id_2,value_2+1);
    TFTlcd.SetBatteryValue(page_id_2,Bry_id_3,value_3+1);
    TFTlcd.SetBatteryValue(page_id_2,Bry_id_4,value_4+1);

    delay(5000);
  
//
// data_size = TFTlcd.queue_find_cmd(cmd_buffer,CMD_MAX_SIZE);
//  
//  if(data_size>0)//receive command
//  {
//    Serial.println(data_size, HEX);
//    Serial.println(F("ProcessMessage"));
//    ProcessMessage((PCTRL_MSG)cmd_buffer, data_size);//command process
//  } 
//
//  if(update_en)
//  {
//    Serial.println(F("UpdateUI"));
//    update_en = 0;
//    delay(100);
//    UpdateUI();
//  }

  
}

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章