【官方】<DIY系列> EP01——《自制PM2.5测量仪》-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10774|回复: 5

【官方】<DIY系列> EP01——《自制PM2.5测量仪》

[复制链接]
发表于 2016-2-29 17:46 | 显示全部楼层 |阅读模式
本帖最后由 mostfun 于 2017-1-9 09:35 编辑

嗯,这是3D打印DIY系列的第一话,虽然只是打了个壳壳。
但比基佬紫更加妖娆的骚绿色也是把它的颜值拉高(?)了几个档次~

成品:


(运行正常~

模型:



软件用的Cura


打印参数:


打印时间约为3小时,想提高打印精度的话可以把层厚改成0.1mm。
注意:打印支撑类型和粘附平台选择Everywhere和Raft,才能打出原模型大小。


组件:


一块arduino uno主控器,一块SHARP GP2Y1010AU0F compact optical dust sensor(灰尘传感器),一块SHARP  i2c 1602显示器


代码:

用Arduino软件进行写入:


[mw_shl_code=cpp,true]#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int measurePin = 0; //Connect dust sensor to Arduino A0 pin
int ledPower = 2;   //Connect 3 led driver pins of dust sensor to Arduino D2
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
void setup(){
  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);
  lcd.init();                     
  lcd.backlight();
  lcd.setCursor(5, 0);
  lcd.print("Boot...");
  lcd.setCursor(0, 1);
  for(int i=0;i<16;i++)
  {
    lcd.write(0xff);
    delay(250);
  }
}
void loop(){
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);
  voMeasured = analogRead(measurePin); // read the dust value
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);
  // 0 - 5V mapped to 0 - 1023 integer values
  // recover voltage
  calcVoltage = voMeasured * (5.0 / 1024.0);
  // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
  // Chris Nafis (c) 2012
  dustDensity = 0.17 * calcVoltage - 0.1;
  Serial.print("Raw Signal Value (0-1023): ");
  Serial.print(voMeasured);
  Serial.print(" - Voltage: ");
  Serial.print(calcVoltage);
  Serial.print(" - Dust Density: ");
  Serial.println(dustDensity); // unit: mg/m3
  lcd.init();                     
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("dustDensity:");
  lcd.setCursor(0,1);
  lcd.print(dustDensity);
  lcd.setCursor(9,1);
  lcd.print(" mg/m^3");
  delay(1000);
}[/mw_shl_code]

因为有同学还是新手,这边给个详细的过程
先复制上方代码到IDE 里,
然后
arduino教程1.png
教程2.png
教程3.png
教程4.png
就可以使用了
最后附上
视频链接



关注官方公众平台,获得更多信息




我们的微博:  http://weibo.com/mostfun3d           我们的微信:

QQ群:212384359

发表于 2016-5-21 17:38 | 显示全部楼层
尊敬的版主先生,我按照上面的源代码(写进相应的那些数字)烧写进芯片后,开机后1602不显示上面的“dustDensity”,只显示下面一行,图片附后,请问是什么原因,怎样才能正常显示2行?

20160521_173232.jpg

发表于 2016-5-21 18:01 | 显示全部楼层
本帖最后由 yjx189 于 2016-5-22 11:27 编辑

明白了,我加了一句:"lcd.begin(16, 2); // 设置列和行的LCD的数: “ 以后,就正常显示2行了!只是1602屏上的字,大概以每秒一次左右的频率,轻轻的跳动,,今天发现,那0.15的值永远是不会变的!!!坑爹啊!!!

20160521_175924.jpg

发表于 2017-1-6 12:57 | 显示全部楼层
我的数值会定在0.49,后面就无限0.49、0.49、0.49、0.49  无任何改变。。。怎么弄啊大神?
发表于 2017-1-20 11:58 | 显示全部楼层
LiquidCrystal_I2C 库要求运行在 [avr] 架构(),可能与你现在运行在 [arc32] 架构上的开发板()不兼容。
怎样解决这个问题?intel genuine 101
发表于 2017-2-13 21:54 来自手机 | 显示全部楼层
有个小新手问我要参数,但他是个近视眼,求高清大图。谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 03:32 , Processed in 0.215528 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表