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