lunes, 9 de julio de 2012

Arduino y Visual Basic 2010–Controlar relay con un solo boton

En esta publicación controlaremos 4 relays utilizando un programa creado en Visual Basic 2010, mediante la comunicación del puerto USB nos conectaremos al Arduino UNO, y este a subes activara o desactivara los relay.
Lo prepare por una petición en los comentarios y aquí esta la respuesta.
Primero el ejemplo será con 4 Relays y en la próxima publicación será con 8 relays para que puedan ver los cambios realizados y sirva de ejemplo para todos. Espero les guste.

Arduino4ChRelaySinglePulse
El circuito utilizado será el mismo de la publicación anterior:


Conecciones electricas:
Pin 13 – canal 1
pin 12 – canal 2
pin 11 – canal 3
pin 10 – canal 4
 image
image

A continuación el Sketch de Arduino UNO




//apcexpert.blogspot.com
//Con este programa controlaras 4 relays con pulsar un botón para activar y
//al pulsarlo nuevamente se desactiva.

char inData[20]; // Allocate some space for the string
char inChar=-1; // Where to store the character read
byte index = 0; // Index into array; where to store the character
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);

}
char PinOut(char* This) {
while (Serial.available() > 0) // Don't read unless
// there you know there is data
{
if(index < 19) // One less than the size of the array
{
inChar = Serial.read(); // Read a character
inData[index] = inChar; // Store it
index++; // Increment where to write next
inData[index] = '\0'; // Null terminate the string
}
}
if (strcmp(inData,This) == 0) {
for (int i=0;i<19;i++) {
inData[i]=0;
}
index=0;
return(0);
}
else {
return(1);
}
}
void loop()
{
if (PinOut("13 on")==0) { digitalWrite(13, HIGH);}
if (PinOut("13 off")==0) {digitalWrite(13, LOW);}
if (PinOut("12 on")==0) { digitalWrite(12, HIGH);}
if (PinOut("12 off")==0) {digitalWrite(12, LOW);}
if (PinOut("11 on")==0) { digitalWrite(11, HIGH);}
if (PinOut("11 off")==0) {digitalWrite(11, LOW);}
if (PinOut("10 on")==0) { digitalWrite(10, HIGH);}
if (PinOut("10 off")==0) {digitalWrite(10, LOW);}


}


Continuamos con el codigo fuente de Visual Basic 2010


Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
    ' Shared _continue As Boolean
    ' Shared _serialPort As SerialPort
    Dim pinout13 As Boolean = True
    Dim pinout12 As Boolean = True
    Dim pin11 As Boolean = True
    Dim pinout10 As Boolean = True

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Close()
        SerialPort1.PortName = "com4" 'Cambiar el numero de Puerto "COM"
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.Open()
        If pinout13 = True Then
            SerialPort1.Write("13 on")
            RectangleShape1.BackColor = Color.Red
        Else
            SerialPort1.Write("13 off")
            RectangleShape1.BackColor = Color.Lime
        End If
        pinout13 = Not (pinout13)
        SerialPort1.Close()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SerialPort1.Open()
        If pinout12 = True Then
            SerialPort1.Write("12 on")
            RectangleShape2.BackColor = Color.Red
        Else
            SerialPort1.Write("12 off")
            RectangleShape2.BackColor = Color.Lime
        End If
        pinout12 = Not (pinout12)
        SerialPort1.Close()
    End Sub
    Private Sub RectangleShape1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RectangleShape1.Click
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        SerialPort1.Open()
        If pin11 = True Then
            SerialPort1.Write("11 on")
            RectangleShape3.BackColor = Color.Red
        Else
            SerialPort1.Write("11 off")
            RectangleShape3.BackColor = Color.Lime
        End If
        pin11 = Not (pin11)
        SerialPort1.Close()
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        SerialPort1.Open()
        If pinout10 = True Then
            SerialPort1.Write("10 on")
            RectangleShape4.BackColor = Color.Red
        Else
            SerialPort1.Write("10 off")
            RectangleShape4.BackColor = Color.Lime
        End If
        pinout10 = Not (pinout10)
        SerialPort1.Close()
    End Sub
    Private Sub RectangleShape3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RectangleShape3.Click
    End Sub
    Private Sub RectangleShape4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RectangleShape4.Click
    End Sub
    Private Sub RectangleShape2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RectangleShape2.Click
    End Sub
End Class


Suerte con el proyecto. Gracias




18 comentarios:

Unknown dijo...

Porfa me puedes enviar los archivos?
Estoy un poco escaso en programacion.
Enhorabuena por este pedazo de blog, eres una maquina :)
Mi e-mail: juanfran__jabal@hotmail.com
Gracias compañ

Unknown dijo...

Perdon los de 8 relés , Gracias

APC dijo...

Hola Juan ya te embie el archivo a tu e-mail.

Unknown dijo...

muy interesante el tema si no es mucho pedir ami tambien envia me los archivos de 4 reles y de 8 reles mi correo es:

federico.vizzari@gmail.com

muchas gracias

Unknown dijo...

disculpa, el circuito se alimenta del usb o de la fuente externa? si es de la fuente externa, sigue teniendo comunicasion con el puerto serial?

APC dijo...

Hola Luis Enrique, de la forma en que este circuito esta alambradoen, la fuente de alimentacion es de USB.
Pero si deseas una fuente alterna, debes utilizar la tierra
en comun (Comun Ground)entre el USB y la fuente alterna.

Espero que alla aclarado tu pregunta.

juan dijo...

ola podrias enviarme los archivos mi correo es juan_222_111@hotmail.com muy buena pagina

MEDINA dijo...

muy buenas me gustaria si no es molestia me pudieses mandar los archivos de VB y arduino a cardenalblue@hotmail.com, del trabajo de los 8 relay .enhorabuena por tus proyectos ,muchas gracias

Meta dijo...

Hola:

Aquí les dejjo tutoriales de com hacer una interfaz con Visual Basic .net y C++.
http://electronica-pic.blogspot.com.es/2009/03/manual-interfaz-vc-y-visual-basic.html

Este otro manual es en Visual C# y más completo.
http://electronica-pic.blogspot.com.es/2008/11/electrnica-pic.html

Si le dan por el puerto paralelo, aquí hay un manual.
http://electronica-pic.blogspot.com.es/2010/07/interfaz-puerto-paralelo-lpt.html

Ahora que me metí con Arduino, estoy dispuesto hacer este mismo manual con Visual Studio 2013 y los tres lenguajes de programación C#, C++ y Visula Basic. Los diseños de estos manuales o tutoriales lo haré como PDF de calidad igual que arriba.

Saludos a todos.

Unknown dijo...

Hola me pasarias los archivos del de 4 y 8 relés y el archivo del VB si no es mucha molestias. Desde ya muchisimas gracias

Unknown dijo...

Mi correo es ferrcaf@gmail.con

Unknown dijo...

Hola buenas noches te hago una consulta, en esta parte del código del visual basic

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "com4" 'Cambiar el numero de Puerto "COM"
Significa que tengo que ponerle el puerto serial COM4 al Arduino? Muchas gracias

Unknown dijo...

hola me gusta tu trabajo y me gustaría saber si me puedes pasar tu programación mi correo es jchp-juank@hotmail.com

Javier Reinoso dijo...

Me interesa el codigo si puede ser, mi email es astrix@zodiacwin.com

Gracias de antemano, y no se bien porque no pones un link a ellos, ayudaria mucho, perdona por el comentario...

Un saludo sincero...

Javier Reinoso dijo...

He hecho un Archivo rar con los codigos fuente, por si alguien le viene bien:

ArduinoUNOR3_VB2010_Controlar_4_Reles_CodeForInternet:
http://dfiles.eu/files/xe3mhbgyi

ArduinoUNOR3_VB2010_Controlar_4_Reles_CodeForInternet:
http://www.astrology7.com/downloads/ArduinoUNOR3_VB2010_Controlar_4_Reles_CodeForInternet.rar

Saludos sinceros!!!

Javier Reinoso dijo...

Un error en el archivo de depositfiles, es este:

http://depositfiles.com/files/si0jhqmt8

Saludos...

Javier Reinoso dijo...

Unas mejoras, para una placa con 8 reles y con reset del arduino:

http://depositfiles.com/files/ndip135pb
o
www.astrology7.com/downloads/ArduinoUNOR3_VB2010_Controlar_8_Reles_CodeForInternet.rar

Saludos...

Unknown dijo...

Hola ami tambien me.podrias enviar el archivo de los 8 relay, te lo agradeceria muchísimo, tomy1941@hotmail
Com