今天為大家?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文章
8246瀏覽量
162164 -
傳感器
+關(guān)注
關(guān)注
2573文章
54329瀏覽量
785494 -
電機(jī)
+關(guān)注
關(guān)注
143文章
9480瀏覽量
153087 -
esp32s3
+關(guān)注
關(guān)注
0文章
9瀏覽量
2219
原文標(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)境是什么原因?
ESP32S3 通過(guò)USB燒錄,燒錄失敗
esp32s3 lcd接口有api可以調(diào)用了嗎?
esp32S3無(wú)法燒寫的原因是什么?
是否有任何外部組件可以使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)試
esp32s3使用多串口
UIFlow 2.0 新增支持 XIAO ESP32S3
基于XIAO ESP32S3 sense開(kāi)發(fā)板的小型相機(jī)設(shè)計(jì)

基于XIAO ESP32S3的可以檢測(cè)困倦的海綿寶寶
評(píng)論