电子说
第1步:安装Arduino IDE,ESP8266开发板和库以及你的ThingSpeak帐户
安装Arduino IDE和Nodemcu
如果您从未安装过IDE Arduino,请阅读链接中的教程 - 如何安装Arduino IDE - 您可以在其中找到完整的说明。
下一步,安装Nodemcu板使用Magesh Jayakumar Instructables的本教程,这是非常完整的。如何安装Nodemcu no Arduino IDE
安装库
创建ThingSpeak帐户
要使用ThingSpeak(https://thingspeak.com/),您必须创建一个帐户(对于一定数量的互动仍然是免费的),您可以在其中保存测量的数据您的风速计和监控家中的风况,甚至通过手机。通过使用ThingSpeak,您可以让公众访问您收集的数据给任何感兴趣的人。这是ThingSpeak的一个很好的优势。进入主页并按照步骤创建帐户。
创建帐户后,请输入本教程 - ThingSpeak入门 - 创建频道。这很好解释。总之,您必须创建一个存储数据的通道。此通道具有ID和Key API,每次要记录数据时都应在草图中引用。 ThingSpeak会将所有数据存储在银行中,并在您每次访问帐户时以您配置的方式显示这些数据。
第2步:探索草图
流程图
在图表中,您可以了解草图的通量图。当您唤醒(链接)Nodemcu时,它将连接到您已配置其参数的Wi-Fi网络,并开始计算1分钟的时间来执行测量。
首先,它将计算风速计旋转25秒,计算线速度并读取风的方向。结果显示在OLED上。再次执行相同的步骤,对于第二次读取,它将传输到ThingSpeak。
然后Nodemcu休眠15分钟以节省电池。当我使用小型太阳能电池板时,我必须这样做。如果您使用5V电源,您可以修改程序,使其无法休眠并继续测量数据。
程序结构
In图表中,您可以看到草图的结构。
Anemometer_Instructables
这是加载库的主程序,启动变量,控制附加中断,调用所有功能,计算风速,确定其方向并使其进入休眠状态。
通信
连接WiFi并将数据发送到ThingSpeak。
credentials.h
您的WiFi网络的密钥以及ThingSpeak中您的帐户的标识符。您可以在此处更改密钥ID和API。
definitions.h
它包含所有内容程序的变量。您可以在此处更改阅读时间或nodemcu应该睡多长时间。
功能
它包含组合参数和读取多路复用器的功能以及读取风速计旋转的功能。
oledDisplay
显示风速和风向的屏幕结果。
第3步:关于。..。..的解释
附加中断
风速计的旋转是通过Nodemcu的GPIO 12(引脚D6)中的 attachInterrupt()(以及 detachInterrupt())函数来测量的(它具有D0-D8引脚上的中断功能。
中断是导致微控制器停止执行正在执行的任务的事件或条件,暂时在另一个任务中工作回到初始任务。
您可以在Arduino教程的链接中阅读该函数的详细信息。请参阅attachInterrupt()。
语法:attachInterrupt(引脚,回调函数,中断类型/模式);
引脚 = D6
回调函数 = rpm_anemometer - 计算变量上的每个脉冲。
中断类型/模式 = RISING - 当引脚从低电平变为高电平时中断。
在霍尔传感器中的磁电机产生的每个脉冲处,引脚从低电平变为高电平。在建立的25秒期间,计数功能被激活并且在变量中求和脉冲。一旦时间到期,计数器将断开连接( detachInterrupt())并且例程在断开连接时计算速度。
计算风速
一旦确定了风速计在25秒内给出了多少次旋转,我们就会计算速度。
RADIO是从中心轴测量的。风速计到乒乓球的尖端。你必须非常好地测量你的 - (见图10厘米)。
RPS(每秒旋转数)=旋转/25秒
RPM(每分钟旋转数)= RPS * 60
OMEGA(角速度 - 每秒弧度) )= 2 * PI * RPS
Linear_Velocity(米/秒)= OMEGA * RADIO
Linear_Velocity_kmh(每小时Km)= 3.6 * Linear_Velocity这是将要发送的内容到ThingSpeak。
读取风向标
读取风向标的位置以确定程序发送的风向具有参数 A,B,C ( muxABC矩阵)的所有组合的多路复用器的低信号和高信号,并等待接收到引脚 A0 结果可以是 0 和 3.3V 之间的任何电压。组合如图所示。
例如,当 C = 0(低),B = 0(低),A = 0(低)时,多路复用器给出它引脚 0 的数据,并将信号发送到Nodemcu读取的 A0 ;如果 C = 0(低),B = 0(低),A = 1(高)多路复用器将向您发送引脚 1 的数据,依此类推,直到完成8个通道的读取。
当信号为模拟信号时,程序转换为数字(0或1),如果电压小于或等于1.3V,则信号为0;如果它大于1.3V,则信号为1.值1.3V是任意的,对我来说,它工作得非常好。总是存在小的电流泄漏,这可以保护没有误报。
这些数据存储在矢量 val [8] 中,将与地址数组进行比较作为指南针。请参见图中的矩阵。例如,如果接收的矢量是 [0,0,1,0,0,0,0,0,0] ,则它在矩阵中指示方向 E 和对应于 90 度的角度;如果[ 0,0,0,0,0,0,1,1] 在矩阵中指示 WNW 地址并且对应角度 292.5 度。 N 对应 [1,0,0,0,0,0,0,0,0] 和角度 0 度。
将发送给ThingSpeak的是什么,因为它只接受数字。
步骤4:通信
如何将数据发送到ThingSpeak
函数 thingspeaksenddata() 负责发送数据。
ThingSpeak.setField(1,float(linear_velocity_kmh)) - 将速度数据发送到我频道的field1
ThingSpeak.setField(2,float(wind_Direction_Angle)) - 将地址数据发送到我频道的field2
ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey) - 使用TS指示的书面 myWriteAPIKey API发送到我的频道 myChannelNumber 。这些数据是在创建帐户和频道时由TS生成的。
在上面的图片中,您可以看到ThingSpeak如何显示收到的数据。
在此链接中,您可以访问数据我的项目在ThingSpeak的公共频道中。
第5步:主要变量
风向标参数
MUX_A D5 - mux pi A到Nodemcu引脚D5
MUX_B D4 - mux引脚B到Nodemcu引脚D4
MUX_C D3 - mux引脚C到Nodemcu引脚D3
READPIN 0 - NodeMcu上的模拟输入= A0
NO_PINS 8 - 多路复用引脚数
val [NO_PINS] - 端口0到7 mux
wind_Direction_Angle - 风向角
String windRose [16] = {“N”,“NNE”,“NE”,“ENE”,“E”,“ESE “,”SE“,”SSE“,”S“,”SSW“,”SW“,”WSW“,”W“,”WNW“,”NW“,”NNW“} - cardenals,抵押品和副抵押品
windAng [16] = {0,22.5,45,67.5,90,112.5,135,157.5,180,202.5,225,247.5,270,292.5,315,337.5} - 每个方向的角度
数字[16] [ NO_PINS] - 方向垫rix
muxABC [8] [3] - ABC mux组合
风速计参数
rpmcount - 计算在规定时间内风速计完全旋转的次数
timemeasure = 25.00 - 测量延迟时间(秒)
timetoSleep = 1 - Nodemcu唤醒时间(分钟)
sleepTime = 15 - 在几分钟内保持睡眠的时间
rpm,rps - 旋转频率(每分钟旋转,每秒旋转)
radius - 米 - 长度的度量风速计翼
linear_velocity - 线速度m/seg
linear_velocity_kmh - 线速度km/h
omega - 径向速度rad/seg
您可以在下面找到完整的草图。在计算机的Arduino文件夹上创建一个与主程序同名的新文件夹( Anemometer_Instructables )并将它们放在一起。
输入wifi网络的数据和Credentials.h中的ThingSpeak ID和API Writer Key并保存。上传到Nodemcu就是这样。
为了测试系统的运行,我建议使用一个好的旋转风扇。
要通过手机访问数据,请下载适用于IOS或Android的应用程序名为 ThingView ,幸运的是,它仍然是免费的。
配置您的帐户设置,无论您身在何处,您都可以随时查看家乡的风况。
全部0条评论
快来发表一下你的评论吧 !