? ? ? ?利用 MQ-138模塊檢測有機氣體
然后利用 SSD1306定義的屏幕0.96來顯示甲醛狀態(第一版利用Nokia5110)?
再加上一個 DHT11進行溫濕度的檢測(第一版沒有加入)
弄個觸摸鍵盤進行溫濕度信息和甲醛檢測信息的切換(第一版未加入鍵盤)
加上 RTC 模塊顯示時間.(未加入)
然后用線性穩壓 LDO 進行降壓和穩壓(使用 MP2359的芯片降壓)
最后核心用 arduino 的328p 做核心,簡易顯示了模擬量,具體數值需要找公式計算.
核心板自己畫一個,不做拼接了,不然做出來體積好大,目標體積是兩節18650電池的大小. (已經完成)
電池盒要留出空間(已經完成)
利用3D打印機設計外殼, 如果有條件弄個激光打印機打一個貼紙.
步驟1:
先去搜一下各種傳感器的 datasheet,了解一下特性,然后就有了下面這些 datasheet.
新的社區不知道哪里上傳文件,所以只好給你們看看名字,自己搜索啦..
原理圖看完了就準備畫圖了...中間遇到很多問題, 首先是,我的蘋果電腦上無法安裝 AD, 跑虛擬機又覺得 windows 不習慣...
所以就安裝了 eagle 這個開源的軟件,其實還挺輕量級的,就是里面的封裝和庫都太老了... 很多都是直插...搞得我很多東西都要自己畫封裝...
中間省去各種折騰...終于原理圖畫好了!
原理圖:?
其實很簡單的.你們應該一眼就看懂了.哈哈,沒錯~我就是用的 Atmel 的328p 的拆機芯片...
接著是 layout:
比較丑, 各位高手, 大神手下留情,不要吐槽的太狠,這是第一版, 請別讓我沒有開發第二版的勇氣...
我這個全開源哦,大家有興趣都可以試著做做看..
然后各種焊接...慢工出細活兒...
話說這次打板花了我快一周的時間才拿到....之前元器件漲價比較兇..特別是電容..電阻...
還有一些瑕疵需要繼續改進改進啊..
然后就是焊接....原則是,先焊小的,再焊大的,最后焊接直插件....哈哈
焊接完一定要用萬用表測試一下是否短路, 一定, 一定, 一定要測試后再上電.
不然有可能遇到蘑菇云, 猛一點兒的直接一上午的工作白做了...
我使用 USB-ASP 直接下載到板子上的,沒有安裝 BootLoader, 因為沒有引出串口.?
焊接了兩個,但是只有一個 Nokia5110, 回家再找找,也準備去網上淘一下,估計價格低的出奇.?
你你如果想更小巧還可以試試 oled 的屏幕,那個看上去更高大上一些,當然了, 如果用 oled 成本也上去了.看個人的喜好了!
背面一個18650的大電池盒..
屏幕上去了,除了顏色有點兒不搭,其他的感覺還是很不錯的..
再來點兒別的地方的諜照,背面看看效果,這個 mq138的傳感器像不像測試酒駕的啊?
側面也來個特寫
頂部的特寫,位置剛剛好,簡單粗暴,還不帶套~
兩節之前筆記本電腦的電芯, 拆出來就是18650, 平時做樹莓派小車的供電電源,今天來給我捧個電場...
開機后,需要穩定大概10秒的樣子,然后讀數就比較穩定了, 這個數值是我直接讀取到的模擬值, 并不是甲醛的具體含量, 我查資料說 mq138品種好多..不知道這個模塊是什么品種的, 我淘寶上淘來的,估計當時花了沒幾塊錢...這個應該是最便宜的那種...
代碼也非常簡單:
/***************************************************************************
Created by: 騎驢玩兒漂移
License: GPL? No, 全開源! 隨便你怎么折騰!
電路圖和 bom 表回頭放在 github 上(稍安勿躁)
***************************************************************************/
#include
#include
LCD5110 myGLCD(3, 4, 5, 6, 7);
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
float? mq138 = A0;
void setup(void)
{
pinMode(mq138, INPUT);
myGLCD.InitLCD();
}
void loop(void)
{
int a = 70;
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.setContrast(a);
myGLCD.print("YOYOJACKY TECH", 0, 0);
myGLCD.print("Formaldehyde" , 0, 8);
myGLCD.print("CH2O Concent:", 0, 16);
float data = analogRead(A0);
if (data < 300.0)
{
myGLCD.printNumF(data, 2, 0, 24);
delay(200);
}
else {
myGLCD.print("Warning!!!", 12, 32);
delay(200);
}
}
評論
查看更多