搜索
bottom↓
回复: 28

VB上位机土壤湿度检测实验+水位检测+湿度+太阳能供电

[复制链接]

出0入0汤圆

发表于 2015-1-10 21:20:11 | 显示全部楼层 |阅读模式
本帖最后由 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-1-10 21:26:23 | 显示全部楼层
不错,围观学习下,呵呵

出0入0汤圆

发表于 2015-1-10 21:30:01 | 显示全部楼层
不错 ,VB的上位机 !

出0入0汤圆

发表于 2015-1-10 21:42:52 | 显示全部楼层
楼主, 我是来看你的上位机的

出0入0汤圆

 楼主| 发表于 2015-1-10 21:51:54 | 显示全部楼层
需要的人自己研究吧这只是参考

出0入0汤圆

发表于 2015-1-10 23:01:01 | 显示全部楼层
都是基础

出0入0汤圆

发表于 2015-1-10 23:05:58 | 显示全部楼层
    给楼主点个赞

出0入0汤圆

 楼主| 发表于 2015-1-11 10:03:23 | 显示全部楼层

确实是滴。说的没错

出0入85汤圆

发表于 2015-1-11 10:23:17 | 显示全部楼层
土壤湿度测的原理是啥?

出0入0汤圆

发表于 2015-1-11 10:35:53 | 显示全部楼层
楼主加油

出0入17汤圆

发表于 2015-1-11 16:07:54 | 显示全部楼层
谢谢分享,期待单片机程序和原理图啊

出0入0汤圆

发表于 2015-1-11 17:15:14 | 显示全部楼层
不错,围观一下。

出0入0汤圆

发表于 2015-2-10 10:13:23 | 显示全部楼层
请教一下LZ土壤湿度那一块是怎么做的

出0入0汤圆

发表于 2015-2-10 10:56:24 来自手机 | 显示全部楼层
以前学过 VB,楼主编的不错,谢谢分享~

出0入0汤圆

发表于 2015-3-18 12:11:00 | 显示全部楼层
湿度应该是靠极间阻值,也就是采集模拟量的吧?

出0入0汤圆

发表于 2015-3-18 12:25:20 | 显示全部楼层
不错,太赞了!

出0入0汤圆

发表于 2015-3-18 12:33:55 | 显示全部楼层
不错,以后农上估计用的上。

出0入0汤圆

发表于 2015-3-18 12:34:05 来自手机 | 显示全部楼层
都不错!赞个

出0入0汤圆

发表于 2015-3-18 12:45:50 | 显示全部楼层
这是毕业设计?

出0入0汤圆

 楼主| 发表于 2015-3-18 13:54:38 | 显示全部楼层
wolflsh 发表于 2015-3-18 12:45
这是毕业设计?

不是哦,把手上有的搭在一起而已

出0入0汤圆

发表于 2015-4-4 11:30:41 | 显示全部楼层
现在正好也在做这方面的东西,谢谢

出30入0汤圆

发表于 2015-4-4 16:15:34 | 显示全部楼层
想对测量液位和湿度了解一下。方便说说怎么检测的吗

出0入0汤圆

发表于 2015-4-7 17:03:27 | 显示全部楼层

出0入0汤圆

发表于 2015-4-18 15:57:30 | 显示全部楼层
能把水位测量的电路发出来看看吗

出0入0汤圆

发表于 2015-4-18 22:28:33 | 显示全部楼层
土壤检测,很少见,收藏了

出0入0汤圆

发表于 2015-7-7 17:05:34 | 显示全部楼层
不会vb编程,我也想玩玩这个,怎上位机么弄?

出0入0汤圆

发表于 2017-10-13 20:18:01 | 显示全部楼层
了解一下,谢谢         

出0入0汤圆

发表于 2018-1-10 14:06:18 | 显示全部楼层
非常不错东西,顶起一下

出0入0汤圆

发表于 2018-1-10 14:07:14 | 显示全部楼层
楼主能说是一下,你画点和保存数据的原理吗?看程序没有看懂呀
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 12:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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