VB上位机土壤湿度检测实验+水位检测+湿度+太阳能供电
本帖最后由 123bac 于 2015-1-10 21:40 编辑本系统选用STC125A60S2,系统主要由单片机控制、水池水位控制、VB上位机组成。对土壤的湿度,环境的温度、湿度、光照进行检测进行检测,土壤湿度经过12位模数转换芯片(TLC2543)处理,最多支持11路的输入。光照检测采用数字光照传感器。在LCD12864上显示。测得的数据通过单片机的串行口发送给上位机显示实时数据曲线,改变,数据存储。VB上位机监测系统,可以实时监控的变化情况,设置相应变量的报警值,通过上位机可以进行手动浇水。本系统下位机用户可以设置浇水量光照土壤湿度的下限值。设置的值可以存储在EEPROM中具有掉电保护。可通过手机用蓝牙进行手动浇水,电源可以通过太阳能电池板对蓄电池充电节约能源。
硬件调试无错以后才能进行软件部分的编写调试。整个系统软件是灵魂,软件的调试分两部分下位机和VB上位机。一、首先通过编写各传感器单独运行的小程序包括实时时钟DS1302测试、Arduino Moisture Sensor 土壤湿度传感器测试、BH1750光照采集测试、DHT11温湿度采集测试。二、VB上位机的调试,首先通过串口调试助检查串口接收的数据是否与下位机上12864上显示的值。串口接收的数据正常以后打开VB上位机配置串口号,波特率。通过联机测试实时数据、波形图是否能够准确绘制,数据能否保存,报表是否能输出,按键是否能够控制下位机的电磁阀。三、蓝牙通信的调试。
VB上位机程序节选
*********************************************************************/
Dim z_start As Boolean '开始标志位
Dim ovt As Integer
Dim in_data(7) As Byte
Dim t_z_start As Boolean
Dim z_start_turang As Boolean '土壤湿度起始位
Dim turang_ovt As Integer
Dim turang_in_data(7) As Byte '土壤数据接收数组
Dim t_ovt As Integer
Dim t_in_data(7) As Byte
Dim wenduzhi(20) As Single '图片1
Dim wenduzhi_k As Integer
Dim time_count As Integer
Dim line_k As Integer
Dim time_count1 As Integer '图片2
Dim wenduzhi_k1 As Integer
Dim line_k1 As Integer
Dim wenduzhi1(20) As Single
'Dim time_count3 As Integer '图片3
'Dim wenduzhi_k3 As Integer
'Dim line_k3 As Integer
'Dim wenduzhi3(20) As Single
Private Sub Combo1_Click()
On Error GoTo BLAK
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MSComm1.CommPort = Combo1.ListIndex + 1
MSComm1.PortOpen = True
Else
MSComm1.CommPort = Combo1.ListIndex + 1
MSComm1.PortOpen = True
End If
Exit Sub
BLAK:
MsgBox "串口不存在或者被占用!", vbOKOnly, "提示信息"
End Sub
Private Sub Combo2_Change()
MSComm1.Settings = Combo2.Text & "n,8,1"
End Sub
Private Sub Command1_Click()
Dim key_liang(0) As Byte
key_liang(0) = &H3 '开
MSComm1.Output = key_liang
MSComm1.Output = key_liang
MSComm1.Output = key_liang
MSComm1.Output = key_liang
MSComm1.Output = key_liang
End Sub
Private Sub Command2_Click()
Dim key_mie(0) As Byte
key_mie(0) = &H4 '关
MSComm1.Output = key_mie
MSComm1.Output = key_mie
MSComm1.Output = key_mie
MSComm1.Output = key_mie
MSComm1.Output = key_mie
End Sub
Private Sub Command3_Click()
Timer1.Enabled = False '停止记录
End Sub
Private Sub Command4_Click()
Timer1.Enabled = True '开始记录
End Sub
Private Sub Command5_Click()
监视控制界面.Hide
Form2.Show
End Sub
Private Sub Command6_Click()
监视控制界面.Hide
Form2.Hide
Form3.Show
End Sub
Private Sub Form_Load()
Combo1.ListIndex = 0
Combo2.ListIndex = 0
MSComm1.InputMode = comInputModeBinary
监视控制界面.Hide
Form2.Hide
Form3.Show
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive ' 收到 RThreshold # ofchars.
xv: Dim hk As Variant
hk = MSComm1.Input
'第0通道数据接受与处理******************************************** 温度
If hk(0) = &HFA Then '通道0的开始标志位
z_start = True
ovt = 0
End If
If hk(0) = &HFB Then '通道0的结束标志位
z_start = False
Text1.Text = in_data(1) & in_data(2)
End If
If z_start = True Then
in_data(ovt) = hk(0)
ovt = ovt + 1
End If
'第1通道数据接受与处理*****************************************湿度
If hk(0) = &HFC Then '通道0的开始标志位
t_z_start = True
t_ovt = 0
End If
If hk(0) = &HFD Then '通道0的结束标志位
t_z_start = False
Text2.Text = t_in_data(1) & t_in_data(2)
End If
If t_z_start = True Then
t_in_data(t_ovt) = hk(0)
t_ovt = t_ovt + 1
End If
'第2通道数据接受与处理*****************************************土壤
If hk(0) = &HF0 Then '通道0的开始标志位
z_start_turang = True
turang_ovt = 0
End If
If hk(0) = &HF1 Then '通道0的结束标志位
z_start_turang = False
Text7.Text = turang_in_data(1) & turang_in_data(2) & turang_in_data(3) '百,十 , 个
End If
If z_start_turang = True Then
turang_in_data(turang_ovt) = hk(0)
turang_ovt = turang_ovt + 1
End If
If MSComm1.InBufferCount <> 0 Then
GoTo xv
End If
End Select
'判断是否报警 温度 text3上限值 text4下限值 text5上限值 text6下限值
If (Val(Text1.Text) > Val(Text3.Text)) Or (Val(Text1.Text) < Val(Text4.Text)) Or (Val(Text2.Text) > Val(Text5.Text)) Or (Val(Text2.Text) < Val(Text6.Text)) Then
Shape1.BackColor = &HFF& '红色背景色
Else
Shape1.BackColor = &H8000&
End If
If (Val(Text1.Text) < Val(Text3.Text)) And (Val(Text1.Text) > Val(Text4.Text)) And (Val(Text2.Text) < Val(Text5.Text)) And (Val(Text2.Text) > Val(Text6.Text)) Then
Shape1.BackColor = &HC00000 '蓝色
End If
End Sub
Private Sub Picture3_Click()
End Sub
Private Sub Timer1_Timer()
Adodc1.Recordset.AddNew '添加新的
'将文本框中用户输入的各个字段值添加到数据库相应的字段中
Adodc1.Recordset.Fields("室温") = Val(Text1.Text)
Adodc1.Recordset.Fields("土壤湿度") = Val(Text2.Text)
'Adodc1.Recordset.Fields("湿度") = Val(Text7.Text)
Adodc1.Recordset.Fields("时间") = Now
Adodc1.Recordset.Update '更新数据
'第一张图片
Picture1.Picture = LoadPicture("") '每次都清空
For wenduzhi_k = 0 To 18 '循环
wenduzhi(wenduzhi_k) = wenduzhi(wenduzhi_k + 1) '后的数值赋给前一个
Next wenduzhi_k
wenduzhi(18) = Val(Text1.Text) * 30 '将实时温度值赋给第十八个 *
'开始画线
For line_k = 0 To 18 'picture1.scalewidth画面的 宽度 Picture1.ScaleHeight4/5作为标签 wenduzhi(line_k)改变坐标的起始位置原来是左上角的改为左下角中间的Y: Picture1.ScaleHeight / 5 * 4 - wenduzhi(line_k + 1
Picture1.Line ((time_count) * Picture1.ScaleWidth / 18, Picture1.ScaleHeight / 5 * 4 - wenduzhi(line_k))-((time_count + 1) * Picture1.ScaleWidth / 18, Picture1.ScaleHeight / 5 * 4 - wenduzhi(line_k + 1)), vbWhite
time_count = time_count + 1
If (time_count * Picture1.ScaleWidth / 18 > Picture1.ScaleWidth) Then '要改变坐标的起始位置
time_count = 0 '超出画面的范围
End If
Next line_k
'第二张图片
Picture2.Picture = LoadPicture("")
For wenduzhi_k1 = 0 To 18
wenduzhi1(wenduzhi_k1) = wenduzhi1(wenduzhi_k1 + 1)
Next wenduzhi_k1
wenduzhi1(18) = Val(Text2.Text) * 20
'开始划线
For line_k1 = 0 To 18
Picture2.Line ((time_count1) * Picture2.ScaleWidth / 18, Picture2.ScaleHeight / 5 * 4 - wenduzhi1(line_k1))-((time_count1 + 1) * Picture2.ScaleWidth / 18, Picture2.ScaleHeight / 5 * 4 - wenduzhi1(line_k1 + 1)), vbWhite
time_count1 = time_count1 + 1
If (time_count1 * Picture2.ScaleWidth / 18 > Picture2.ScaleWidth) Then
time_count1 = 0
End If
End Sub
{:lol:}不错,围观学习下,呵呵 不错 ,VB的上位机 ! 楼主, 我是来看你的上位机的 需要的人自己研究吧这只是参考 都是基础 给楼主点个赞 liyang0727 发表于 2015-1-10 23:01
都是基础
{:smile:} 确实是滴。说的没错{:biggrin:} 土壤湿度测的原理是啥? 楼主加油{:smile:}! 谢谢分享,期待单片机程序和原理图啊 不错,围观一下。 请教一下LZ土壤湿度那一块是怎么做的 以前学过 VB,楼主编的不错,谢谢分享~ 湿度应该是靠极间阻值,也就是采集模拟量的吧? 不错,太赞了! 不错,以后农上估计用的上。{:smile:} 都不错!赞个 这是毕业设计? wolflsh 发表于 2015-3-18 12:45
这是毕业设计?
不是哦,把手上有的搭在一起而已 现在正好也在做这方面的东西,谢谢 想对测量液位和湿度了解一下。方便说说怎么检测的吗
{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 能把水位测量的电路发出来看看吗 土壤检测,很少见,收藏了 不会vb编程,我也想玩玩这个,怎上位机么弄? 了解一下,谢谢 非常不错东西,顶起一下 楼主能说是一下,你画点和保存数据的原理吗?看程序没有看懂呀
页:
[1]