Páginas

domingo, 5 de mayo de 2013

Gambas y Arduino: Ejemplo 5 Medicion de distancia y decirla en voz alta

Gambas y Arduino
 Ejemplo 5
 Medir distancias y decirlas en voz alta





Os dejo aqui otro ejemplo de gambas y arduino, esta vez usando un sensor de distancias (el HC-SR04).
El programa de arduino, lee la distancia y la escribe en el puerto serial.
Lo que hago con gambas es leer la entrada del puerto serie y usar el comando espeak
para dictar la distancia.

Montaje:



Captura del programa funcionando:



Código para arduino:

int trigger=11; // Arduino pin tied to trigger pin on the ultrasonic sensor.
int echo= 12; // Arduino pin tied to echo pin on the ultrasonic sensor.
float distance;
int val;
float lim;

void setup() {
Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
}

void loop() {
digitalWrite(trigger,LOW);
delayMicroseconds(5);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
distance=pulseIn(echo,HIGH);
distance=distance*0.0001657;
// Serial.println("Distancia:");
Serial.println(distance);
delay(200);

}

El programa en gambas


' Gambas class file

Public valor As Integer
Public encendido As Boolean

Public Sub Form_Close()
If Sport.Status = Net.Active Then Close Sport
End

Public Sub Button1_Click()
If Sport.Status = Net.Active Then
Close Sport
Button1.Text = "Abrir"
Else
' Line parameters
Sport.PortName = TxtPort.Text
Sport.Speed = CmbSpeed.Text
Sport.Parity = CmbParity.Index
Sport.DataBits = CmbData.Text
Sport.StopBits = CmbStop.Text
' keep DTR on
Sport.FlowControl = ComboBox1.Index
Sport.Open()
TextArea1.Text = "Port Abierto : " & Sport.PortName & " Settings : " &
Sport.Speed & "," & Sport.Parity & "," & Sport.DataBits & "," &
Sport.StopBits & Chr(13) & Chr(10)
Button1.Text = "Cerrar"
End If
Catch
Message.Info("Error:" & Error.text)
End

Public Sub SPort_Read()
Dim valor As Integer
Dim cadenas As String[]
Dim cadena As String
Dim s As String
Read #Sport, s, Lof(Sport)
If s <> "" Then
cadenas = Split(s, "\n\r")
Print cadenas[cadenas.count - 1]
valor = cadenas.count - 1
While cadenas[valor] = ""
valor = valor - 1
Wend
cadena = "\"Distancia es " & cadenas[valor] & "\""
LabelDistancia.text = cadena
Exec ["espeak", "-v", "es", cadena]
Wait 3
Endif
End

Public Sub ComboBox1_Click()
Sport.FlowControl = ComboBox1.Index
End

Public Sub Form_Open()

Me.Caption = "Medidor de distancia por Arduino"
Me.center
cmbSpeed.Index = cmbSpeed.Find("9600")
ComboBox1.Index = 0
End

Enlace de descarga del código:

Nota:
fuentes:
http://zygzax.com/2012/09/14/medir-distancias-con-arduino-sensor-us-100-o-hc-sr04-p2/
http://fritzing.org/projects/hc-sr04-led-bar/