Detectar velocidad con puerto serial
Publicado por guid (1 intervención) el 23/06/2014 03:37:26
HOla gente, soy nuevo en el foro. Tenía unas dudas con un soft que estoy armando en visual basic.
Arme un circuito que tiene 2 sensores de luz compuestos por fototransistores que activan los puertos CD y RSD.
Cuando se activa el primer sensor utilizo el API QueryPerformanceCounterAny para registrar ese valor. Cuando el segundo sensor es activado se usa de nuevo el API QueryPerformanceCounterAny, luego se resta TiempoFinal - TiempoInicial y se cuanto transcurrio en pasar el objeto entre sensor y sensor. Como la distancia entre sensores es conocida se puede despejar la velocidad en mts/s o la unidad que sea.
Esto lo hice para medir la velocidad de un balín de aire comprimido.
Arme uno igual con el puerto LPT y funciona EXCELENTE.
Dije, uso un conversor USB-Serial y lo hago mas compatible.
Pero si los comparo, en velocidades de un dedo moviendose rapido, miden lo mismo.
Pero en velocidades altas como 200mts/s el que utiliza el puerto serial mide mucho menos velocidad que el LPT que funciona bien.
El objeto pasaría entre ambos sensores en aprox. 0.5miliSegundos
Sera un tema del boudrate?
Alguna idea??'
Arme un circuito que tiene 2 sensores de luz compuestos por fototransistores que activan los puertos CD y RSD.
Cuando se activa el primer sensor utilizo el API QueryPerformanceCounterAny para registrar ese valor. Cuando el segundo sensor es activado se usa de nuevo el API QueryPerformanceCounterAny, luego se resta TiempoFinal - TiempoInicial y se cuanto transcurrio en pasar el objeto entre sensor y sensor. Como la distancia entre sensores es conocida se puede despejar la velocidad en mts/s o la unidad que sea.
Esto lo hice para medir la velocidad de un balín de aire comprimido.
Arme uno igual con el puerto LPT y funciona EXCELENTE.
Dije, uso un conversor USB-Serial y lo hago mas compatible.
Pero si los comparo, en velocidades de un dedo moviendose rapido, miden lo mismo.
Pero en velocidades altas como 200mts/s el que utiliza el puerto serial mide mucho menos velocidad que el LPT que funciona bien.
El objeto pasaría entre ambos sensores en aprox. 0.5miliSegundos
Sera un tema del boudrate?
Alguna idea??'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Private Sub Form_Load()
On Error Resume Next
If comm1.PortOpen Then
comm1.PortOpen = False
End If
comm1.CommPort = 5
comm1.Settings = "9600,N,8,1"
comm1.RTSEnable = False
comm1.DTREnable = False
comm1.Handshaking = 0
comm1.InBufferSize = 1
comm1.InputLen = 0
comm1.RThreshold = 0
comm1.NullDiscard = False
comm1.CTSTimeout = 0
comm1.CDTimeout = 0
comm1.DSRTimeout = 0
Primero=0
' por si el puerto ya está abierto por otra aplicación
comm1.PortOpen = True
end sub
Private Sub comm1_OnComm()
Select Case comm1.CommEvent
Case comEvReceive
Case comEvDSR
If comm1.DSRHolding = True Then
QueryPerformanceCounterAny startTime
Primero = 1
End If
Case comEvCD
If comm1.CDHolding Then
If Primero = 1 Then
QueryPerformanceFrequencyAny frequency
QueryPerformanceCounterAny endTime
result = ((endTime - startTime) / frequency) * 1000
result = (result / 0.085) / 1000
result = 1 / result
resultmts = result
result = result * 3.28083989501
Masa = Round((6.479891 * cmbGrains.Text) / 100000, 6)
Energia = 0.5 * Masa * ((resultmts) * (resultmts))
lblJoules.Caption = Round(Energia, 2) & " Joules"
lblVelFps.Caption = Round(result, 2) & " fps"
Primero = 0
Sleep (1500)
lblVelFps.Caption = "...."
lblJoules.Caption = "...."
End If
End If
End Select
End Sub
Valora esta pregunta


0