利用 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);
}
}