使用Arduino UNO的气象站的制作

电子说

1.3w人已加入

描述

步骤1:项目列表

1。屏幕:OLED,1.3英寸显示屏SH1106,I2C白色– PID:18283

2.传感器:数字湿度和温度传感器DHT22 ---- PID:7375

3.连接:跳线---- PID:10316或10318或10312(取决于长度),也可以使用22 AWG实心线---- PID:22490

面包板---- PID:10686或10698或103142(取决于大小)

4。电源:此电缆只能与计算机USB端口连接,该电缆还用于IDE和Arduino板之间的数据传输。电缆,A到B,M/M,0.5M(1.5FT)---- PID:29862

或者您可以用它为板子供电:5V 2A AC/DC适配器---- PID:10817。

步骤2:相对介绍

气象站

屏幕介绍:1.3英寸OLED显示屏白

1。您可以找到显示基本设置和说明的文档:http://www.ett.co.th/prod2017/OLED%201.3%20I2C%20ENG.pdf

传感器简介:湿度和温度传感器DHT22 1.您可以找到显示说明的文档:https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

步骤3:连接电路

气象站

DHT22传感器将串行数据发送到引脚2。因此,从左侧连接第二个引脚,“ SDA”引脚应连接到引脚2。

对于SSH1106显示屏,它使用模拟引脚进行传输。屏幕的电路将是Arduino的“ A5”的“ SCL”引脚,而Arduino的“ A4”的“ SDA”引脚。当像素位置数据连续传输时,程序中的显示功能每次在每次从传感器读取数据时都会触发一次命令。

传感器和屏幕均可使用3.3V通电Arduino作为直流电源输入。要供电,我们需要将两个“ VCC”引脚都连接到Arduino的“ 3.3V”。并且“ GND”引脚可以简单地连接到Arduino板上的“ GND”引脚。

使用USB A到B电缆,将Arudino连接到计算机。

步骤4:为Olikraus的SSH1106屏幕准备编译

“ u8glib”。

为Adafruit的DHT22传感器准备“ DHT传感器库”。您应该下载两个库:DHT22传感器库:https://github.com/adafruit/DHT-sensor-library

U8glib:https://github.com/adafruit/DHT-sensor-library

并在IDE中使用“管理库”将其解压缩。在线管理库的说明:https://github.com/adafruit/DHT-sensor-library

第5步:DHT22传感器串行端口的测试代码

DHT22传感器串行端口的测试代码(位于DHT22库中》》示例):

(您可以跳过这一部分。)

这只是为了测试DHT22传感器是否正常读取数据。

#include

#include

#include

#include

#include

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht(DHTPIN,DHTTYPE);

void setup(){

Serial.begin(9600);

Serial.println(F(“ DHT22测试!”));

dht.begin();

}

无效循环(){

///在两次测量之间等待几秒钟。

delay(2000);

///读取温度或湿度大约需要250毫秒!

//传感器的读数也可能长达2秒“过时”(它的传感器非常慢)

float h = dht.readHumidity();

//以摄氏度(默认)读取温度

float t = dht.readTemperature();

//以华氏温度(isFahrenheit = true)读取温度

float f = dht.readTemperature(true);

//检查是否有任何读取失败并且提早退出(重试)。

如果(isnan(h)|| isnan(t)|| isnan(f)){

Serial.println(F( “无法从DHT传感器读取!”));

return;

}

//计算华氏热指数(默认值)

float hif = dht.computeHeatIndex(f,h);

//以摄氏度计算热量指数(isFahreheit = false)

float hic = dht.computeHeatIndex(t,h,false);

Serial.print (F(“湿度:”));

Serial.print(H);

Serial.print(F(“%Temperature:”));;

Serial.print(T);

Serial.print(F(“°C”));

Serial.print(F);

Serial.print(F(“°F Heat index:”));

Serial.print(HIC);

Serial.print(F(“°C”));

Serial.print(HIF);

Serial.println(F( “°F”));

}

//编译程序后,单击工具》》串行监视器以检查数据。

//测试程序结束。

步骤6:项目代码

#include

#include

#include

#include

#include

#define DHTPIN 2

#define DHTTYPE DHT22

#include“ U8glib。 h“

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);

DHT传感器(DHTPIN,DHTTYPE);

void draw(void){

u8g.setFont(u8g_font_unifont);

float h = sensor.readHumidity();

//以摄氏度(默认)读取温度

浮点t = sensor.readTemperature();

//检查是否有任何读取失败并提早退出(重试)。

if(isnan(h)|| isnan(t)){

u8g.print(“ Error。”);

for(;;) ;

return;

}

u8g.setPrintPos(4,10);

u8g.print( “温度(C):”);

u8g.setPrintPos(4,25);

u8g.print(t);

u8g.setPrintPos(4,40);

u8g.print( “湿度(%):”);

u8g.setPrintPos(4,55);

u8g.print(h);

}

无效设置(void){

u8g.setRot180();

Serial.begin(9600);

sensor.begin();

}

无效循环(void){

//图片循环

u8g.firstPage();

do {

draw();

} while(u8g.nextPage());

//经过一段时间的延迟后重新生成图片(2000年);

}

//主程序结束。

步骤7:说明

然后,初始化Arduino板的引脚电路。因为传感器库需要数据来声明对象。

而且,您可以使用称为“ Serial.print()”的功能通过数字引脚2监视输出数据来测试传感器的数据。由于数据传输的频率大约每2秒读取一次(0.5 Hz),因此在Arduino IDE中进行编程时,我们需要将循环函数内部的延迟设置为大于2秒。因此,循环函数内部有一个“ delay(2000)”。这样可以确保数据经常刷新。在“绘制”功能中,从串行数据端口获取数据,然后使用“ readHumidity”和“ readTemperature”功能将它们放入浮点数。

使用打印功能打印出湿度和温度在“ u8glib”文件中。您可以通过更改“ setPrintPos”功能中的数字来调整位置。打印功能可以直接显示文本和数字。

要设置硬件,请给串行端口10秒钟的延迟。然后调用传感器的begin函数。根据我的电路,我的屏幕是颠倒的。因此,我还包括了“ setRot180”功能来旋转显示。

Arduino开发板的循环功能是主要功能。每次刷新传感器时,它都会不断调用draw函数以显示文本和数据。

屏幕如下所示:

您可以从计算机和电源上断开Arduino UNO的连接。它使用5V DC电源适配器连接到其2.1mm电源插孔。它将程序存储在其驱动器中,并在通电后可以再次连续运行该程序。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分