Leyendo el sensor ultrasónico HC-SR04 con Gadgeteer y Visual Basic
Este programa pretende ser un punto de partida para la lectura del sensor HC-SR04, pero por supuesto usted debe proporcionar las funciones Adicionales necesarias, tales como «tomar valores promediados« para obtener un mínimo de precisión 🙂
Imports GT = Gadgeteer Imports GTM = Gadgeteer.Modules Imports GTI = Gadgeteer.Interfaces ' This program is intended as a starting point reading the HC-SR04 sensor, ' but of course you must provide adicional functions like "take values from average" to make a minimum of precission. Namespace GadgeteerApp1 Partial Public Class Program 'Define GPIO's Private Echo As GTI.DigitalInput Private Trig As GTI.DigitalOutput Private Ticks As Integer = CInt(TimeSpan.TicksPerMillisecond / 1000) 'Define socket number Private soketNum As Integer = 9 'Main Public Sub ProgramStarted() Dim socket = Gadgeteer.Socket.GetSocket(soketNum, True, Nothing, Nothing) Echo = New GTI.DigitalInput(socket, Gadgeteer.Socket.Pin.Three, GTI.GlitchFilterMode.Off, GTI.ResistorMode.PullDown, Nothing) Trig = New GTI.DigitalOutput(socket, Gadgeteer.Socket.Pin.Four, False, Nothing) timer.Start() Debug.Print("Program Started") End Sub ' Just print distance into Debug windows Private WithEvents timer As GT.Timer = New GT.Timer(1000) Private Sub timer_Tick(timer As Gadgeteer.Timer) Handles timer.Tick ' Debug.Print(readSR04.ToString()) End Sub 'Define Max/Min for SR04 reading distances Private Const Dist_MIN As Integer = 2 'cm Private Const Dist_MAX As Integer = 400 'cm 'Define return values if reading fails (out of range) Private Const Flag_MIN As Integer = -999 Private Const Flag_MAX As Integer = 999 'This function returns distance in cm from SR04 Function readSR04() As Integer Dim start As Double = 0 Dim Distance As Integer = 0 Dim Fails As Integer = 0 'send a 10us TTL pulse Trig.Write(True) Thread.Sleep(10) Trig.Write(False) 'wait for the echoe While Not Echo.Read Fails += 1 If Fails > 500 Then Thread.Sleep(0) Exit While End If start = System.DateTime.Now.Ticks End While ' calculating distance While Echo.Read Thread.Sleep(0)Distance = CInt(((System.DateTime.Now.Ticks - start) / Ticks) / 58) + Dist_MIN End While If Distance < Dist_MAX Then If Distance >= Dist_MIN Then Return Distance Else Return Flag_MIN End If Else Return Flag_MAX End If End Function End Class End Namespace Saludos,
PepLluis,