今天為大家?guī)?lái)的是來(lái)自Hackster創(chuàng)作者M(jìn)ondal3011的作品:可以檢測(cè)困倦的海綿寶寶.這個(gè)裝置主要是使用二氧化碳傳感器去進(jìn)行二氧化碳濃度測(cè)試,通過(guò)識(shí)別二氧化碳來(lái)判斷環(huán)境是否會(huì)造成人體困倦。通常,房間里的高 CO2 會(huì)導(dǎo)致嗜睡。當(dāng)房間里的 CO2 水平上升時(shí),這個(gè)海綿寶寶會(huì)變得困倦,這樣你就可以打開(kāi)窗戶了!
材料清單
硬件
Seeed Studio XIAO ESP32S3 Sense
Mq135
跳線
絲桿電機(jī)
M4螺栓
軟件
Arduino IDE
JLCPCB易達(dá)
故事背景
最近,你可能注意到自己在課堂上感到很困。也許你并不覺(jué)得課程無(wú)聊,而且晚上睡得很好,所以這不是原因。經(jīng)過(guò)一些在線研究(主要是通過(guò) Google 和 ChatGPT),你發(fā)現(xiàn)這種困倦可能是由于教室里積累了過(guò)多的二氧化碳。這讓人覺(jué)得有道理,因?yàn)樽罱鞖夂芾?,教室的門窗大部分時(shí)間都關(guān)著。
同樣的問(wèn)題也可能出現(xiàn)在你的宿舍。當(dāng)你學(xué)習(xí)時(shí),可能會(huì)感到昏昏欲睡,因?yàn)橐恢标P(guān)著窗戶,導(dǎo)致房間內(nèi)二氧化碳濃度過(guò)高。于是,你想出了一個(gè)創(chuàng)意,制作一個(gè)看起來(lái)很酷且直觀易懂的 CO2 監(jiān)測(cè)器!這個(gè)監(jiān)測(cè)器的設(shè)計(jì)靈感來(lái)源于海綿寶寶,眼瞼會(huì)根據(jù)二氧化碳水平的變化而上下移動(dòng),顯示他有多困。當(dāng) CO2 水平較低時(shí),海綿寶寶的眼睛會(huì)睜得大大的,眼瞼高高翹起;隨著二氧化碳濃度的升高,眼瞼會(huì)逐漸降低。如果眼睛完全閉上,意味著房間里的二氧化碳濃度過(guò)高,你最好讓一些新鮮空氣進(jìn)來(lái)!
加工流程
該項(xiàng)目的主要組件是 MQ135 空氣質(zhì)量傳感器和小 esp32 微控制器。該裝置還包含 5 個(gè)霍爾效應(yīng)傳感器,每個(gè)傳感器都映射到特定的 CO2 ppm 水平。電機(jī)通過(guò) L293D 電機(jī)驅(qū)動(dòng)器 IC 連接到微控制器。該電機(jī)是一種 DIY 絲桿電機(jī),可根據(jù)旋轉(zhuǎn)方向上下移動(dòng)眼瞼。眼瞼的長(zhǎng)端包含一個(gè)磁鐵,霍爾傳感器可以檢測(cè)到該磁鐵。微控制器讀取 MQ135 傳感器的模擬輸出,并通過(guò)一些數(shù)學(xué)運(yùn)算將其轉(zhuǎn)換為 CO2 ppm 水平。這是在特定的持續(xù)時(shí)間內(nèi)完成的(在我的代碼中為 5 分鐘),并且 ppm 值是該持續(xù)時(shí)間的平均值。然后,微控制器打開(kāi)絲桿電機(jī),直到磁體位于霍爾傳感器前面,該傳感器對(duì)應(yīng)于相同的 ppm(在容差范圍內(nèi))。這樣眼瞼就會(huì)移動(dòng)以匹配 ppm 水平。
對(duì)于這個(gè)項(xiàng)目,決定設(shè)計(jì)一個(gè) PCB 并組裝起來(lái)是個(gè)很好的選擇。盡管之前沒(méi)有過(guò)這樣的經(jīng)驗(yàn),但這正是一個(gè)探索新領(lǐng)域的機(jī)會(huì)。許多創(chuàng)作者在 Instructables 和 YouTube 上展示了他們自己的 PCB 制作過(guò)程,這為這個(gè)項(xiàng)目提供了很好的靈感和指導(dǎo)。
使用 EasyEDA 設(shè)計(jì)電路和 PCB 是一個(gè)不錯(cuò)的選擇。雖然可能還有其他更優(yōu)秀的工具,但 EasyEDA 因其易于學(xué)習(xí)和使用而受到許多 YouTuber 的青睞。通過(guò)這個(gè)平臺(tái),可以有效地設(shè)計(jì)出所需的電路圖和印刷電路板,從而使整個(gè)項(xiàng)目更加順利地進(jìn)行。
設(shè)計(jì)PCB
PCB 由 Seeed Fusion 制造,因此在設(shè)計(jì)之前,確保仔細(xì)閱讀了他們的所有指南。
首先,用戶在設(shè)計(jì)菜單中選擇了“將原理圖轉(zhuǎn)換為 PCB”選項(xiàng),立創(chuàng)EDA 隨即生成了一個(gè)新的 PCB 文件,其中包含了原理圖中的所有元器件。接下來(lái),用戶開(kāi)始設(shè)計(jì) PCB,并生成了 Gerber 文件。目前的設(shè)計(jì)以海綿寶寶為特色,雖然沒(méi)有他的 SquarePants,但歡迎其他人添加褲子,完全沒(méi)有規(guī)定禁止這樣做!
在材料選擇上,決定使用 Sunboard,這是一種低密度 PVC 板。Sunboard 非常易于使用,同時(shí)仍然具備較好的耐用性,十分適合這種手工藝項(xiàng)目。
制作海綿寶寶
這個(gè)項(xiàng)目中使用 Sunboard,一種低密度 PVC 板。它非常易于使用,同時(shí)仍然非常耐用,非常適合這種工藝。
組裝
組裝好 PCB 后,把它全部組裝在一起。并將 CO2 傳感器放在后面以將其隱藏起來(lái)。如果您也這樣做,請(qǐng)確保框架不要放置在沒(méi)有空氣流通的房間角落。否則你的海綿寶寶可能總是昏昏欲睡!移動(dòng)時(shí)眼瞼確實(shí)會(huì)有點(diǎn)晃動(dòng),但這根本不是問(wèn)題。由于它們僅在 CO2 水平存在顯著差異時(shí)才會(huì)移動(dòng),因此您幾乎不會(huì)看到它們移動(dòng)。但是,它在移動(dòng)時(shí)確實(shí)會(huì)發(fā)出一些噪音。主要是因?yàn)榕f減速電機(jī)磨削。所以認(rèn)為微型 N20 電機(jī)會(huì)是更好的選擇。
代碼
// 為霍爾傳感器、電機(jī)驅(qū)動(dòng)器和 MQ135 傳感器定義引腳 const int hallSensors[] = {D1, D2, D3, D4, D5}; const int motorEnable = D8; const int motorInput1 = D6; const int motorInput2 = D7; const int mq135Pin = A0; MQ135 gasSensor = MQ135(mq135Pin); // 為每個(gè)霍爾傳感器定義 CO2 ppm 范圍 const int ppmRanges[][2] = { {800, 1000}, {1001, 1200}, {1201, 1400}, {1401, 1600}, {1601, 1800} }; //存儲(chǔ) CO2 ppm 讀數(shù) const int maxReadings = 30; // 5 minutes / 10 seconds float ppmReadings[maxReadings]; int readingIndex = 0; void setup() { Serial.begin(115200); // 將霍爾傳感器初始化為輸入端 for (int i = 0; i < 5; i++) { pinMode(hallSensors[i], INPUT); } // 將電機(jī)驅(qū)動(dòng)器引腳初始化為輸出端 pinMode(motorEnable, OUTPUT); pinMode(motorInput1, OUTPUT); pinMode(motorInput2, OUTPUT); // 初始化電機(jī),使其停止 digitalWrite(motorEnable, LOW); } void loop() { // 從 MQ135 傳感器讀取二氧化碳ppm 含量 float ppm = gasSensor.getPPM(); // 存儲(chǔ) CO2 ppm 讀數(shù) ppmReadings[readingIndex] = ppm; readingIndex = readingIndex + 1; if(readingIndex >= 30) { //計(jì)算二氧化碳的平均ppm含量 int avgPPM = calculateAveragePPM(); // 根據(jù) CO2 ppm 平均水平確定目標(biāo)大廳傳感器 int targetSensor = determineTargetSensor(avgPPM); // 將電機(jī)移至目標(biāo)霍爾傳感器處 moveMotorToTargetSensor(targetSensor); readingIndex = 0; } delay(10000); // 等待 10 秒 } // 根據(jù)存儲(chǔ)的讀數(shù)計(jì)算二氧化碳的平均ppm含量 int calculateAveragePPM() { int sum = 0; for (int i = 0; i < maxReadings; i++) { sum += ppmReadings[i]; } return sum / maxReadings; } // 根據(jù) CO2 ppm 平均水平確定目標(biāo)大廳傳感器 int determineTargetSensor(int avgPPM) { for (int i = 0; i < 5; i++) { if (avgPPM >= ppmRanges[i][0] && avgPPM <= ppmRanges[i][1]) { return i; } } return 0; //如果 avgPPM 超出范圍,則默認(rèn)為第一個(gè)傳感器 } // 將電機(jī)移至目標(biāo)霍爾傳感器處 void moveMotorToTargetSensor(int targetSensor) { int currentSensor = getCurrentSensor(); if (currentSensor != targetSensor) { int direction = (targetSensor > currentSensor) ? 1 : -1; while (currentSensor != targetSensor) { moveMotor(direction); currentSensor = getCurrentSensor(); } stopMotor(); } } // 獲取當(dāng)前霍爾傳感器 int getCurrentSensor() { for (int i = 0; i < 5; i++) { if (digitalRead(hallSensors[i]) == LOW) { return i; } } return 0; // 如果沒(méi)有傳感器處于活動(dòng)狀態(tài),則默認(rèn)為第一個(gè)傳感器 } // 按指定方向移動(dòng)電機(jī) void moveMotor(int direction) { digitalWrite(motorEnable, HIGH); if (direction == 1) { digitalWrite(motorInput1, HIGH); digitalWrite(motorInput2, LOW); } else { digitalWrite(motorInput1, LOW); digitalWrite(motorInput2, HIGH); } } // 停止電機(jī) void stopMotor() { digitalWrite(motorEnable, LOW); }
-
微控制器
+關(guān)注
關(guān)注
48文章
7951瀏覽量
154983 -
傳感器
+關(guān)注
關(guān)注
2565文章
52983瀏覽量
767290 -
電機(jī)
+關(guān)注
關(guān)注
143文章
9298瀏覽量
149421 -
esp32s3
+關(guān)注
關(guān)注
0文章
8瀏覽量
1865
原文標(biāo)題:創(chuàng)客項(xiàng)目秀|基于XIAO ESP32S3 的可以檢測(cè)困倦的海綿寶寶!
文章出處:【微信號(hào):ChaiHuoMakerSpace,微信公眾號(hào):柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于XIAO的圖像分類處理項(xiàng)目

ESP32S3外置Jtag連接失敗的原因?
使用esp-idf-tools2.12不能搭建esp32s3開(kāi)發(fā)環(huán)境是什么原因?
請(qǐng)問(wèn)ESP32S3的PCLK的上限為多少?
ESP32S3 通過(guò)USB燒錄,燒錄失敗
esp32s3 lcd接口有api可以調(diào)用了嗎?
esp32S3無(wú)法燒寫(xiě)的原因是什么?
是否有任何外部組件可以使ESP32S3與CAN-FD兼容?
ESP32S3內(nèi)部外設(shè)包括DMA之類的可以直接用ESP32的配置來(lái)啟用嗎?
使用esp-idf-tools2.12不能搭建esp32s3開(kāi)發(fā)環(huán)境的原因?
使用Arduino通過(guò)USB串行對(duì)ESP32S3進(jìn)行編程和調(diào)試

UIFlow 2.0 新增支持 XIAO ESP32S3

基于XIAO ESP32S3 sense開(kāi)發(fā)板的小型相機(jī)設(shè)計(jì)

評(píng)論