2019-07-04
用arduino制作具有无线数据传输功能的气象站

#define BACKLIGHT_PIN 3

myFile.print("Rain Fall (24 Hour): ");

myFile.print("Wind Direction: ");

int WindDirection() //Wind Direction

// lcd.print(" ");

{

原标题:用arduino制作具有无线数据传输功能的气象站

_temp[_index - _start] = _buffer[_index] - '0';

但是类似的项目也提供了很好的机会,让你能够不断扩充升级在设计和电路方面的知识。此外,项目还包含了许多其他技术领域,比如3D建模、3D打印、焊接等等。所以,它不仅能让你了解某一个技术领域,更重要的是让你了解不同的技术领域如何交互作用,从而实现一个完整的项目。

}

//////////

double temp;

}

myFile.print("Rain Fall (One Hour): ");

// Serial.print("Wind Direction: ");

char databuffer[35];

if(WindDirection()==180){

组装:

}

}

void getBuffer() //Get weather status data

Serial.print(WindSpeedMax());

myFile.print("Wind Direction: ");

lcd.home ();

}

{

{

5、然后,使用一个3D打印托架将塑料接线盒安装到支架上。更多详情参见第5步。

#include <SD.h> //SD

本项目的主要升级就是增加了无线数据传输功能。所以还需要增加一个室内数据接收器。

如前文所述,本篇教程是对上篇气象站教程的升级。

Serial.print("Max Wind Speed (Five Minutes): ");

Serial.print("Wind Direction: ");

lcd.print("Voltage bat: ");

return result;

Serial.println(" ");

Serial.println(" ");

Serial.println("mm ");

return temp;

pinMode(pinCS, OUTPUT);

if(WindDirection()==90){

Serial.print("SW");

myFile.println(" ");

myFile.print("Wind Direction: ");

myFile.println(" ");

#include <Wire.h>

return temp;

}

index = -1;

sensorValue = analogRead(sensorPin); //Monitoring battery voltage

float RainfallOneDay() //Rainfall (24 hours)

return temp;

if (databuffer[0] != 'c')

接收器所需零件:

Serial.print(BarPressure());

if(WindDirection()==135){

myFile.print("Humidity: ");

}

第5步:3D打印零件

4、然后,使用钢丝把“锚”上的吊环连到支架两端。先拿来两根1.7 m(5.57ft)长的钢丝,一端用钢丝夹直接固定到吊环螺母上,另一端固定到不锈钢螺丝扣上。不锈钢螺丝扣用于紧固钢丝。

Serial.println("hPa");

有了这个托架,塑料接线盒就能直接安装到钢管上。安装高度也可以灵活调节。

} else

myFile = SD.open("test.txt", FILE_WRITE);

myFile.print("SE");

myFile.print("Wind Direction: ");

myFile.println(" ");

myFile.println(" ");

File myFile; //SD

temp = transCharToInt(databuffer,28,32);

int sensorValue = 0;

您还将需要以下工具:

myFile.println(" ");

首先,需要增加从气象站到室内接收器的无线数据传输功能,去掉了SD卡模块,换成Arduino Uno接口扩展板。

Serial.println("SD card initialization failed");

int transCharToInt(char *_buffer,int _start,int _stop) //char to int)

lcd.print(" V");

2、2到3小时后,除锈完成,接着把钢管焊接起来。先把吊环螺母焊到钢管两端,然后把钢管放到距地面2米的位置。当然还可以放到更高的位置,但是不能更低,否则靠上的部分就会变得不稳。

这个项目从最初的想法变成最终的产品,整个过程非常有趣,也很有挑战性。你需要花时间思考不同的选项。所以,整个项目要顺利完成,就需要投入大量时间和精力,才能让它变成你真正想要的样子。

}

Serial.print("Average Wind Speed (One Minute): ");

}

if(WindDirection()==0){

在将各零部件组装起来之前,必须进行一些测试。

}

Serial.println(" ");

Serial.println("error opening test.txt");

第3步:小结

Serial.print("Temperature: ");

{

// myFile.println(" ");

Serial.print("Wind Direction: ");

myFile.print(RainfallOneHour());

myFile.println(" ");

// lcd.print("C ");

Serial.print("Wind Direction: ");

int sensorPin = A0; //battery voltage pin

myFile.println(" V");

/////////////////////

// lcd.print(" ");

myFile.print("Average Wind Speed (One Minute): ");

if(WindDirection()==90){

for (_index = _start;_index <= _stop;_index )

delay(100);

lcd.print(voltage);

// lcd.print(" v");

void setup()

Serial.print("Rain Fall (24 Hour): ");

///////////////////

首先要测试Arduino的发送和接收模块。先得找到合适的代码,然后进行修改以使其符合项目需求。我从最简单的例子开始,从发射器向接收器发送一个字,测试成功之后再发送更多的数据。

// Serial.println(" ");

return;

}

getBuffer(); //Begin!

Serial.print(" E");

}

////

{

myFile.println(" ");

myFile.print(Temperature());

myFile.println("m/s");

float voltage_solar = 2*sensorValue_solar*(5.0/1023.0)-0.07;

myFile.print(WindSpeedAverage());

int num = _stop - _start 1;

该项目设计简单,只要具备电路、焊接、研磨、设计等方面的基本技能,每个人都可以完成。最关键的要素还是时间。

// lcd.print("Temperature: ");

myFile.println("m/s ");

}

if(WindDirection()==225){

myFile.println("");

temp = 0.44704 * transCharToInt(databuffer,5,7);

databuffer[index] = Serial.read();

int pinCS = 10;

{

return temp;

Serial.print("Wind Direction: ");

if (myFile) {

Serial.print(" S");

}

int result = 0;

}

myFile.println(" ");

这个模块整体不错,因为非常便宜,而且简单易用,只不过由于存在信号中断问题,使用距离会受到一定的限制。

LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

myFile.print("NE");

Serial.print("Barometric Pressure: ");

// lcd.setCursor(0,2);

myFile.println("mm");

myFile.print("Wind Direction: ");

myFile.print("SW");

myFile.println("hPa");

//lcd.print(WindSpeedMax());

{

////////

然后需要对这两个模块的范围进行测试。先把天线去掉,测试发现通信距离非常短,大约4米(13英尺)。然后把天线加上进行测试。通过相关研究和分析,我认为天线长度最好是17厘米(6.7英寸)。之后分别在室内和室外进行了测试,以确定环境对信号的影响。

}

6、最后,对每一个钢制零件都涂上两层底漆。在此基础上,您可以涂上任何喜欢的颜色。

//LCD

if (SD.begin())

}

// SD Card Initialization

myFile.print("Voltage bat: ");

myFile.print(" E");

Serial.println(" ");

if(WindDirection()==270){

Serial.print("Wind Direction: ");

myFile.print("Wind Direction: ");

{

Serial.println("m/s");

为使安装支架易于拆卸,需要制作一些3D打印零件。每一个零件都是我亲自设计并使用PLA塑料打印出来的。

}

//////////

{

if(WindDirection()==315){

// lcd.print(Temperature());

{

for (index = 0;index < 35;index )

int Humidity() //Humidity

Serial.begin(9600);

}

总结

Serial.print("NE");

}

Serial.println("SD card is ready to use.");

{

温湿度传感器外壳

Serial.println(" ");

Serial.print(" W");

temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00;

myFile.println(" V");

}

float voltage = sensorValue*(5.0/1023.0);

int index;

Serial.print(WindSpeedAverage());

myFile.print("Max Wind Speed (Five Minutes): ");

Serial.print("Wind Direction: ");

lcd.begin (20,4);

第1步:构想

还有一个问题,那就是如何安装能够承受室外条件的气象站支架。

Serial.println(" ");

if(WindDirection()==225){

Serial.print("Humidity: ");

Serial.print("Rain Fall (One Hour): ");

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1、先从fi18 3.4m(11.15ft)长钢管开始。在钢管上涂一层酸性除锈剂,对钢管进行除锈处理。

Serial.println("m/s ");

第6步:室内数据接收器

Serial.println("");

}

在制作气象站支架时需要:

{

if(WindDirection()==315){

// lcd.setCursor(0,0);

3、然后,需要在每一侧制作一个“锚”。为此我使用了两个fi12 50cm(1.64ft)钢棒。在每个钢棒的顶端焊上一个吊环螺母和一个小钢板,这样就可以把它踩到或用锤子砸到地里面。

// myFile.print(WindDirection());

else

Serial.println(" ");

myFile.print("NW");

本项目是用arduino开源硬件,来快速制作具有无限数据传输功能的气象站,我之前做过一个带数据记录功能的气象站项目,这次算是升级和改进的版本。

我考虑的主要问题是,这个支架必须模块化且易于拆卸,这样便于转移到其他位置。

myFile.print(" W");

// if the file didn't open, print an error:

return transCharToInt(databuffer,25,26);

关于气象站支架的类型和设计,我做了一些研究。最后我决定使用3米长的钢管来制作支架。通常建议将风速计安装到最高点(大约10米(33英尺)),但是由于我使用的是一体化气象站套件,我选择了套件建议的高度 - 大约3米(10英尺)。

{

为此,我使用了适合Arduino的430 MHz接收器,然后使用17厘米(6.7英寸)天线对其进行了升级。接着,需要测试一下该模块的通信距离。第一项测试在室内进行,以确定墙壁对信号范围的影响,以及会不会造成信号中断。第二项测试是在室外进行。结果表明,该模块的通信距离在10米(33英尺)以上,远远超出室内接收器的要求。

myFile.print(RainfallOneDay());

lcd.setCursor(0,3); //0,3

如图所示:

temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;

myFile.print("Barometric Pressure: ");

Serial.print("SE");

最后,将发射器置于室外,接收器置于室内,再进行测试,以确定能否实现良好的室内接收效果。最初有一些信号中断的问题,因为接收到的数据和发射的数据不一致。后来换上从ebay购买的433 Mhz模块天线,才解决了这个问题。

if(WindDirection()==270){

}

myFile.print(Humidity());

int sensorPin_solar = A1; //solar panel voltage pin

result = 10*result _temp[_index - _start];

}

myFile.print(voltage_solar);

myFile.print(" S");

第7步:测试

/////////////////

{

int sensorValue_solar = 0;

Serial.println("");

myFile.print(WindSpeedMax());

Serial.println(voltage_solar);

//////////////////

Serial.print("Wind Direction: ");

////////////////

机器人论坛:http://www.dfrobot.com.cn/

展开全文

Serial.println("mm");

如图所示,这个接收器可以显示室外温度和湿度、日期和时间。

int _index;

temp = 0.44704 * transCharToInt(databuffer,9,11);

return temp / 10.00;

myFile.print("Voltage sol: ");

代码:

myFile.print(voltage);

第2步:原材料

{

int _temp[num];

sensorValue_solar = analogRead(sensorPin_solar);

if(WindDirection()==180){

return temp;

Serial.print(" N");

////////////

lcd.setBacklight(HIGH);

Serial.println("C ");

myFile.print(BarPressure());

myFile.print("Wind Direction: ");

Serial.println(" ");

硬件清单:

///////

}

//Serial.print(WindDirection());

myFile.close(); // close the file

#include <SPI.h> //SD

if(WindDirection()==0){

if(Serial.available())

}

{

Serial.print(Humidity());

return transCharToInt(databuffer,1,3);

float Temperature() //Temperature ("C")

}

index --;

塑料接线盒托架

float BarPressure() //Barometric Pressure

float RainfallOneHour() //Rainfall (1 hour)

}

if(WindDirection()==135){

在上一篇教程中,我用钢板制作了托架,但是不是特别实用。所以我决定使用3D打印零件再做一个。一共有五个3D打印零件,损坏的零件可以快速更换。

我需要为温湿度传感器设计一个外壳。在参考网上资料之后,我确定了这个外壳的最终形状。我设计了带托架的史蒂文森百叶箱,这样所有部件都可以安装到钢管上。

第4步:气象站安装方案

if(WindDirection()==45){

Serial.println("% ");

它一共包括10个零件。主体底座由两部分组成,顶部是一个“盖子”,这样就可以实现密封,不会进水。每一个零件都是使用PLA耗材打印而成。

这样做的主要原因是为了节省空间,接口扩展版完全兼容Arduino Uno,因此无需使用导线进行连接。气象站支架也进行了重新设计。之前的支架太低,而且不稳,所以我又做了一个新的支架(更高而且更稳)。对于直接安装到气象站支架上的外壳而言,我还增加了一个新的托架。此外,还增加了用于供电的太阳能板。

///////////

// lcd.print(voltage_solar);

void loop()

Serial.print("Wind Direction: ");

myFile.print("Temperature: ");

{

else {

myFile.print("Wind Direction: ");

}

// myFile.print("Wind Direction: ");

}

{

myFile.println("C ");

}

}

myFile.println("% ");

{

float WindSpeedMax() //Max air speed (5 minutes)

// lcd.print("m/s");

}

}

// lcd.setCursor(0,2); //This is example how to set your LCD commands

myFile.println("mm ");

myFile.print(" N");

Serial.print(RainfallOneDay());

// lcd.print("Voltage sol: ");

if(WindDirection()==45){

temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;

myFile.println("");

#include <LiquidCrystal_I2C.h>

// lcd.print("Max Speed");

Serial.print(RainfallOneHour());

}

float WindSpeedAverage() //air Speed (1 minute)

Serial.print(Temperature());

Serial.print("NW");

}