今天為大家帶來的是來自Hackster創作者Mondal3011的作品:可以檢測困倦的海綿寶寶.這個裝置主要是使用二氧化碳傳感器去進行二氧化碳濃度測試,通過識別二氧化碳來判斷環境是否會造成人體困倦。通常,房間里的高 CO2 會導致嗜睡。當房間里的 CO2 水平上升時,這個海綿寶寶會變得困倦,這樣你就可以打開窗戶了!
材料清單
硬件
Seeed Studio XIAO ESP32S3 Sense
Mq135
跳線
絲桿電機
M4螺栓
軟件
Arduino IDE
JLCPCB易達
故事背景
最近,你可能注意到自己在課堂上感到很困。也許你并不覺得課程無聊,而且晚上睡得很好,所以這不是原因。經過一些在線研究(主要是通過 Google 和 ChatGPT),你發現這種困倦可能是由于教室里積累了過多的二氧化碳。這讓人覺得有道理,因為最近天氣很冷,教室的門窗大部分時間都關著。
同樣的問題也可能出現在你的宿舍。當你學習時,可能會感到昏昏欲睡,因為一直關著窗戶,導致房間內二氧化碳濃度過高。于是,你想出了一個創意,制作一個看起來很酷且直觀易懂的 CO2 監測器!這個監測器的設計靈感來源于海綿寶寶,眼瞼會根據二氧化碳水平的變化而上下移動,顯示他有多困。當 CO2 水平較低時,海綿寶寶的眼睛會睜得大大的,眼瞼高高翹起;隨著二氧化碳濃度的升高,眼瞼會逐漸降低。如果眼睛完全閉上,意味著房間里的二氧化碳濃度過高,你最好讓一些新鮮空氣進來!
加工流程
該項目的主要組件是 MQ135 空氣質量傳感器和小 esp32 微控制器。該裝置還包含 5 個霍爾效應傳感器,每個傳感器都映射到特定的 CO2 ppm 水平。電機通過 L293D 電機驅動器 IC 連接到微控制器。該電機是一種 DIY 絲桿電機,可根據旋轉方向上下移動眼瞼。眼瞼的長端包含一個磁鐵,霍爾傳感器可以檢測到該磁鐵。微控制器讀取 MQ135 傳感器的模擬輸出,并通過一些數學運算將其轉換為 CO2 ppm 水平。這是在特定的持續時間內完成的(在我的代碼中為 5 分鐘),并且 ppm 值是該持續時間的平均值。然后,微控制器打開絲桿電機,直到磁體位于霍爾傳感器前面,該傳感器對應于相同的 ppm(在容差范圍內)。這樣眼瞼就會移動以匹配 ppm 水平。
對于這個項目,決定設計一個 PCB 并組裝起來是個很好的選擇。盡管之前沒有過這樣的經驗,但這正是一個探索新領域的機會。許多創作者在 Instructables 和 YouTube 上展示了他們自己的 PCB 制作過程,這為這個項目提供了很好的靈感和指導。
使用 EasyEDA 設計電路和 PCB 是一個不錯的選擇。雖然可能還有其他更優秀的工具,但 EasyEDA 因其易于學習和使用而受到許多 YouTuber 的青睞。通過這個平臺,可以有效地設計出所需的電路圖和印刷電路板,從而使整個項目更加順利地進行。
設計PCB
PCB 由 Seeed Fusion 制造,因此在設計之前,確保仔細閱讀了他們的所有指南。
首先,用戶在設計菜單中選擇了“將原理圖轉換為 PCB”選項,立創EDA 隨即生成了一個新的 PCB 文件,其中包含了原理圖中的所有元器件。接下來,用戶開始設計 PCB,并生成了 Gerber 文件。目前的設計以海綿寶寶為特色,雖然沒有他的 SquarePants,但歡迎其他人添加褲子,完全沒有規定禁止這樣做!
在材料選擇上,決定使用 Sunboard,這是一種低密度 PVC 板。Sunboard 非常易于使用,同時仍然具備較好的耐用性,十分適合這種手工藝項目。
制作海綿寶寶
這個項目中使用 Sunboard,一種低密度 PVC 板。它非常易于使用,同時仍然非常耐用,非常適合這種工藝。
組裝
組裝好 PCB 后,把它全部組裝在一起。并將 CO2 傳感器放在后面以將其隱藏起來。如果您也這樣做,請確保框架不要放置在沒有空氣流通的房間角落。否則你的海綿寶寶可能總是昏昏欲睡!移動時眼瞼確實會有點晃動,但這根本不是問題。由于它們僅在 CO2 水平存在顯著差異時才會移動,因此您幾乎不會看到它們移動。但是,它在移動時確實會發出一些噪音。主要是因為舊減速電機磨削。所以認為微型 N20 電機會是更好的選擇。
代碼
// 為霍爾傳感器、電機驅動器和 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); // 為每個霍爾傳感器定義 CO2 ppm 范圍 const int ppmRanges[][2] = { {800, 1000}, {1001, 1200}, {1201, 1400}, {1401, 1600}, {1601, 1800} }; //存儲 CO2 ppm 讀數 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); } // 將電機驅動器引腳初始化為輸出端 pinMode(motorEnable, OUTPUT); pinMode(motorInput1, OUTPUT); pinMode(motorInput2, OUTPUT); // 初始化電機,使其停止 digitalWrite(motorEnable, LOW); } void loop() { // 從 MQ135 傳感器讀取二氧化碳ppm 含量 float ppm = gasSensor.getPPM(); // 存儲 CO2 ppm 讀數 ppmReadings[readingIndex] = ppm; readingIndex = readingIndex + 1; if(readingIndex >= 30) { //計算二氧化碳的平均ppm含量 int avgPPM = calculateAveragePPM(); // 根據 CO2 ppm 平均水平確定目標大廳傳感器 int targetSensor = determineTargetSensor(avgPPM); // 將電機移至目標霍爾傳感器處 moveMotorToTargetSensor(targetSensor); readingIndex = 0; } delay(10000); // 等待 10 秒 } // 根據存儲的讀數計算二氧化碳的平均ppm含量 int calculateAveragePPM() { int sum = 0; for (int i = 0; i < maxReadings; i++) { sum += ppmReadings[i]; } return sum / maxReadings; } // 根據 CO2 ppm 平均水平確定目標大廳傳感器 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 超出范圍,則默認為第一個傳感器 } // 將電機移至目標霍爾傳感器處 void moveMotorToTargetSensor(int targetSensor) { int currentSensor = getCurrentSensor(); if (currentSensor != targetSensor) { int direction = (targetSensor > currentSensor) ? 1 : -1; while (currentSensor != targetSensor) { moveMotor(direction); currentSensor = getCurrentSensor(); } stopMotor(); } } // 獲取當前霍爾傳感器 int getCurrentSensor() { for (int i = 0; i < 5; i++) { if (digitalRead(hallSensors[i]) == LOW) { return i; } } return 0; // 如果沒有傳感器處于活動狀態,則默認為第一個傳感器 } // 按指定方向移動電機 void moveMotor(int direction) { digitalWrite(motorEnable, HIGH); if (direction == 1) { digitalWrite(motorInput1, HIGH); digitalWrite(motorInput2, LOW); } else { digitalWrite(motorInput1, LOW); digitalWrite(motorInput2, HIGH); } } // 停止電機 void stopMotor() { digitalWrite(motorEnable, LOW); }
-
微控制器
+關注
關注
48文章
7658瀏覽量
152183 -
傳感器
+關注
關注
2553文章
51453瀏覽量
756922 -
電機
+關注
關注
142文章
9093瀏覽量
146479 -
esp32s3
+關注
關注
0文章
7瀏覽量
638
原文標題:創客項目秀|基于XIAO ESP32S3 的可以檢測困倦的海綿寶寶!
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創客空間】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于XIAO的圖像分類處理項目
![基于<b class='flag-5'>XIAO</b>的圖像分類處理項目](https://file1.elecfans.com/web2/M00/AC/C0/wKgZomU8aq-ANaLNAAAfRphpnqc682.png)
ESP32S3外置Jtag連接失敗的原因?
使用esp-idf-tools2.12不能搭建esp32s3開發環境是什么原因?
請問ESP32S3的PCLK的上限為多少?
ESP32S3 通過USB燒錄,燒錄失敗
esp32s3 lcd接口有api可以調用了嗎?
esp32S3無法燒寫的原因是什么?
是否有任何外部組件可以使ESP32S3與CAN-FD兼容?
ESP32S3內部外設包括DMA之類的可以直接用ESP32的配置來啟用嗎?
使用esp-idf-tools2.12不能搭建esp32s3開發環境的原因?
使用Arduino通過USB串行對ESP32S3進行編程和調試
![使用Arduino通過USB串行對<b class='flag-5'>ESP32S3</b>進行編程和調試](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
esp32s3使用多串口
![<b class='flag-5'>esp32s3</b>使用多串口](https://file1.elecfans.com/web2/M00/AE/6D/wKgZomVIXSuAaM5sAAXoDI31jJc130.png)
UIFlow 2.0 新增支持 XIAO ESP32S3
![UIFlow 2.0 新增支持 <b class='flag-5'>XIAO</b> <b class='flag-5'>ESP32S3</b>](https://file.elecfans.com/web2/M00/7D/DA/pYYBAGN-zMaAF9QdAAAZUkbIjzU950.png)
基于XIAO ESP32S3 sense開發板的小型相機設計
![基于<b class='flag-5'>XIAO</b> <b class='flag-5'>ESP32S3</b> sense開發板的小型相機設計](https://file1.elecfans.com/web2/M00/05/7A/wKgZombaZmaASOx0AACTyoUFfmc292.jpg)
評論