在《2024 DigiKey 汽車應(yīng)用創(chuàng)意挑戰(zhàn)賽》中,設(shè)計一個創(chuàng)新的汽車座椅和方向盤加熱系統(tǒng)是一個非常有潛力的方向,也是我接下來需要完成的項目任務(wù)。
下面是一些創(chuàng)意設(shè)計思路和技術(shù)實現(xiàn)方案,詳細(xì)的介紹。
一、項目名稱:
基于
樹莓派PI5汽車座椅方向盤加熱系統(tǒng)
二、項目概述
本項目是利用樹莓派PI5作為核心
處理器,結(jié)合多種
傳感器和
執(zhí)行器,包含多個加溫控制模塊,風(fēng)扇等,實現(xiàn)一個
智能化的汽車座椅和方向盤加熱系統(tǒng)。系統(tǒng)通過AHT10
溫濕度傳感器實時監(jiān)測環(huán)境溫濕度,利用STO21加熱片模塊進(jìn)行加熱,并通過Motor Module
直流電機控制風(fēng)扇散熱,確保系統(tǒng)在舒適和安全的環(huán)境下運行。串口屏用于
顯示系統(tǒng)狀態(tài)和用戶交互。
下面主要的功能以一組為示例進(jìn)行講解與操作。
系統(tǒng)組成
樹莓派PI5:核心處理器,負(fù)責(zé)數(shù)據(jù)處理、
邏輯控制和
通信。
AHT10溫濕度傳感器:用于實時監(jiān)測環(huán)境溫濕度。
GPIO2(SDA,
I2C1),GPIO3(SCL,I2C1)
STO21加熱片模塊:用于座椅和方向盤的加熱。GPIO4
Motor Module直流電機:用于控制風(fēng)扇散熱。GPIO17
串口屏:用于顯示系統(tǒng)狀態(tài)和用戶交互。TX(GPIO15),RX(GPIO14)
系統(tǒng)功能
溫濕度監(jiān)測:通過AHT10傳感器實時監(jiān)測車內(nèi)溫濕度。
加熱控制:根據(jù)用戶設(shè)置和環(huán)境溫度,控制STO21加熱片模塊進(jìn)行加熱。
散熱控制:通過Motor Module直流電機控制風(fēng)扇,確保系統(tǒng)不過熱。
用戶交互:通過串口屏顯示系統(tǒng)狀態(tài),用戶可以通過
觸摸屏進(jìn)行設(shè)置和操作。
硬件連接
AHT10傳感器:通過I2C接口連接到樹莓派PI5。
STO21加熱片模塊:通過GPIO口控制,連接到樹莓派PI5。
Motor Module直流電機:通過
PWM控制,連接到樹莓派PI5。
軟件設(shè)計
系統(tǒng)初始化:
初始化I2C、GPIO、PWM和UART接口。
初始化AHT10傳感器、STO21加熱片模塊、Motor Module直流電機和串口屏。
溫濕度讀取:
通過I2C接口讀取AHT10傳感器的溫濕度數(shù)據(jù)。
加熱控制:
根據(jù)用戶設(shè)置和環(huán)境溫度,控制STO21加熱片模塊的
開關(guān)。
散熱控制:
根據(jù)系統(tǒng)溫度,控制Motor Module直流電機的轉(zhuǎn)速。
用戶交互:
通過串口屏顯示當(dāng)前溫濕度、加熱狀態(tài)和風(fēng)扇狀態(tài)。
用戶可以通過觸摸屏設(shè)置加熱溫度和風(fēng)扇轉(zhuǎn)速。
主循環(huán):
循環(huán)讀取溫濕度數(shù)據(jù)。
根據(jù)數(shù)據(jù)調(diào)整加熱和散熱控制。
更新串口屏顯示內(nèi)容。
三、實物圖
AHT10傳感器:

AHT10 傳感器特性
測量范圍:
溫度:-40°C ~ 85°C
濕度:0% ~ 100% RH
精度:
溫度:±0.3°C
濕度:±2% RH
供電電壓:2.2V ~ 5.5V
STO21加熱片模塊:
【品名】:加熱片模塊
【規(guī)格】:41.6x12.1x11.6mm(長x寬x高)
【顏色】:藍(lán)色
【
PCB 材質(zhì)】:軍工級別雙面PCB 板
【工作電壓】:5V
【工作溫度】:-40~85°℃
【工作方式】:輸入低電平或接地信號,加熱片工作【產(chǎn)品特點】:
1、采用 5VPTC 恒溫發(fā)熱片
2、放置在容器外部進(jìn)行加熱使用,切勿將加熱片置于液體之中進(jìn)行使用
4、提供 3mm 固定安裝螺絲孔
Motor Module直流電機:
參數(shù)簡介
工作電壓:3.3V-5V
信號電平:0V-5V最大轉(zhuǎn)速:3500RPM
工作溫度:-20℃-80℃定位方式:M3螺絲重量:50.88g
模塊尺寸:40mm*30mm(手工測量)
串口屏:
系列&尺寸
X2 6.2時
型號
比例1:3
分辨率360x960
亮度(nit)300
工作電壓(V)4.65-6.5
flash容量(Bytes)16M
TFT類型IPS
有效顯示尺寸(mm)147.46(L)x55.30(W)
工作電流(mA)340
工作溫度(°C)20~+70
掉電存儲容量(Bytes)1K
串口指令緩存區(qū)(Bytes)4K
四、軟件工作流程
軟件控制說明:
初始化
開始
初始化風(fēng)扇(GPIO17,默認(rèn)關(guān)閉)
初始化加熱板(GPIO4,默認(rèn)關(guān)閉)
初始化AHT10傳感器
讀取當(dāng)前溫度
向串口屏發(fā)送初始溫度顯示值(t2.txt="20")
設(shè)置目標(biāo)溫度(aim = 20)
主循環(huán)
循環(huán)開始
讀取串口屏數(shù)據(jù)
從串口屏讀取目標(biāo)溫度值(target)
如果讀取到新數(shù)據(jù):
更新目標(biāo)溫度(aim = target[-4])
讀取當(dāng)前溫度
調(diào)用AHT10.read_data()獲取當(dāng)前溫度(temp)
顯示當(dāng)前溫度
格式化溫度值為字符串(temp_str = "{0:.2f}".format(temp))
向串口屏發(fā)送當(dāng)前溫度值(t2.txt="temp_str")
溫度控制邏輯
如果當(dāng)前溫度 < 目標(biāo)溫度
進(jìn)入加熱模式:
關(guān)閉風(fēng)扇(fan.off())
打開加熱板(heat_board.off())
更新串口屏顯示加熱圖標(biāo)(p3.pic=1)
如果當(dāng)前溫度 > 目標(biāo)溫度
進(jìn)入散熱模式:
打開風(fēng)扇(fan.on())
關(guān)閉加熱板(heat_board.on())
更新串口屏顯示散熱圖標(biāo)(p3.pic=2)
如果當(dāng)前溫度 = 目標(biāo)溫度
進(jìn)入待機模式:
保持當(dāng)前狀態(tài)(device.init())
更新串口屏顯示待機圖標(biāo)(p3.pic=3)
延時
短暫延時(time.sleep(0.05)
主循環(huán)延時(time.sleep(0.9)
循環(huán)結(jié)束
五、點亮效果圖
屏點亮效果
PI5控制軟件代碼:
連接圖:

六、代碼
class AHT10:
def __init__(self, bus=1, address=0x38):
self.bus = smbus2.SMBus(bus)
self.address = address
def read_data(self):
self.bus.write_i2c_block_data(self.address, 0xAC, [0x33, 0x00])
time.sleep(0.1)
data = self.bus.read_i2c_block_data(self.address, 0x00, 6)
if not (data[0] & 0x80):
raise RuntimeError("Device not ready")
raw_temp = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5]
temperature = (raw_temp * 200.0 / 1048576) - 50
return temperature
class CONTROLLER:
def __init__(self):
self.temp = 0
# 正向控制 on是開 off是關(guān)
self.fan = LED(17)
# 反向控制 off是開 on是關(guān) 是否加熱從硬件外觀是看不出的 加熱比較慢 耐心等待
self.heat_board = LED(4)
self.aht10 = AHT10()
self.init()
def init(self):
self.fan.off()
self.heat_board.on()
self.temp = self.aht10.read_data()
def heat(self):
self.fan.off()
self.heat_board.off()
self.temp = self.aht10.read_data()
def cool(self):
self.fan.on()
self.heat_board.on()
self.temp = self.aht10.read_data()
ser = serial.Serial("/dev/ttyAMA0", 9600)
device = CONTROLLER()
device.init()
ser.write('t2.txt="20"'.encode("GB2312"))
ser.write(bytes.fromhex("ff ff ff"))
aim = 20
while 1:
target = ser.read_all()
print("---------------")
if target != b"":
aim = target[-4]
print(aim)
temp = device.temp
print(temp, aim)
temp_str = "{0:.2f}".format(temp)
if int(temp) < aim:
device.heat()
ser.write("p3.pic=1".encode("GB2312"))
ser.write(bytes.fromhex("ff ff ff"))
elif int(temp) > aim:
device.cool()
ser.write("p3.pic=2".encode("GB2312"))
ser.write(bytes.fromhex("ff ff ff"))
else:
device.init()
ser.write("p3.pic=3".encode("GB2312"))
ser.write(bytes.fromhex("ff ff ff"))
time.sleep(0.05)
ser.write('t2.txt="{}"'.format(temp_str).encode("GB2312"))
ser.write(bytes.fromhex("ff ff ff"))
time.sleep(0.9)
七、屏軟件操作界面
整體界面

多組選擇菜單:

模塊圖:

八、計劃框架圖
主要是多級控制時的一個架構(gòu)圖:

軟件控制操作圖:

九、原理圖:

十、視頻講解: