Detector de colores con arduino y visual basic

Publicado el: 11 de mayo de 2015
Principiante
Acerca de este proyecto
Proyecto con Arduino, conectado a Visual Basic Net para mostrar en pantalla (PC) el color que se acerca al sensor.
arduino visusl basic
Publicidad
DETALLES

En esta oportunidad vamos a realizar un proyecto de un detector de colores con Arduino, conectado a Visual Basic Net para mostrar en pantalla un cuadrado con el color del objeto que se le acerca al sensor.

LISTA DE MATERIALES

- (1) tarjeta Arduino cualquier modelo.

- (1) Sensor CNY70.

- (1) Resistencia de 220Ω.

- (1) Resistencia de 22KΩ.

- Cables de conexión.


 El CNY70 es un sensor óptico reflexivo con salida a transistor de corto alcance, el cual consta de un emisor y receptor ambos en el mismo encapsulado apuntando en la misma dirección, y funciona gracias a la capacidad de reflexión del objeto y la detección del rayo reflejado por el receptor.

Es muy utilizado en los robots seguidores de líneas para detectar las líneas de color negro sobre un fondo blanco, ya que según el circuito cuando el objeto es de color blanco refleja la luz proveniente del emisor y entra en conducción, en cambio, si el objeto es de color negro, este no refleja la luz y el transistor no conduce. Si el objeto es de color blanco, refleja la luz y el transistor pasa a estado de conducción.



El sensor CNY70 puede ser conectado al Arduino como entrada digital o como entrada análoga. En el modo digital solamente se tendrá un nivel lógico bajo o un nivel lógico alto presente en su salida. En este proyecto lo conectaremos a la entrada análoga del Arduino; de esta manera, dependiendo del color del objeto, este reflejara cierta cantidad de luz y se tendrá en la entrada del Arduino valores de 0 a 1023 los cuales variaran sensiblemente en función de la distancia a la que se encuentre el objeto al sensor, y del material del objeto.

Por ejemplo, si se acerca un objeto de color rojo a una distancia de 5mm del sensor, puede tener una lectura análoga de 820, si se modifica la distancia del mismo objeto a 8mm, esta puede variar a 870 por poner un ejemplo. Por lo tanto, es recomendable que se mentenga siempre la misma distancia entre el objeto y el sensor CNY70.

El siguiente es el diagrama esquemático, se observa que es muy sencillo de realizar, solamente usaremos un pin del Arduino, el marcado como A3.

DIAGRAMA ESQUEMÁTICO



El código en Arduino tambièn es muy sencillo, declaramos la constante a utilizar, configuramos el puerto serie y procedemos en el ciclo principal a leer constantemente el valor de la entrada analógica y enviarla por el puerto seria cada 200 milisegundos para ser procesada por el programa en visual basic net.



Descargar programa en visual basic

CODIFICACIÓN
Codigo de arduino-

const int sensor  = A3; // Sensor conectado a la entrada análoga A3.
int estado=0;

void setup()
{
  pinMode(sensor,INPUT);
  Serial.begin(9600);
}

void loop()
{  
  //Leo el estado del sensor
  estado = analogRead(sensor);
  Serial.println(estado);
  delay(200);
     }

El código en Visual Basic Net es el siguiente:
Public Class Form1

    Dim Ndato As String

    Dim numero As Int32

    Private Sub Serial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Serial.DataReceived
        'Leo los 3 primeros caracteres del dato recibido por el puerto serie
        dato = Microsoft.VisualBasic.Left(Serial.ReadLine, 3)

        numero = CInt(dato)

        If numero >= 975 Then

            pct.BackColor = Color.Yellow

        ElseIf numero >= 920 And numero <= 960 <Then

            pct.BackColor = Color.Blue

        ElseIf numero >= 860 And numero <= 880 Then

            pct.BackColor = Color.Red

        ElseIf numero >= 750 And numero <= 860 Then

            pct.BackColor = Color.Red

        ElseIf numero > 510 And numero <= 580 Then

            pct.BackColor = Color.Green

        ElseIf numero >= 240 And numero <= 260 Then

            pct.BackColor = Color.Black
        Else
            pct.BackColor = Color.White

        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Serial.Open()

    End Sub

End Class

Codigo del programa en visual basic-
Este es el codigo de visual basic pero lo recomendable es descargar el proyecto completo que se encuentra en en enlace de este articulo.
Public Class Form1


    Dim dato As String

    Dim numero As Int32

    Private Sub Serial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Serial.DataReceived

        On Error Resume Next

        dato = Microsoft.VisualBasic.Left(Serial.ReadLine, 3)

        numero = CInt(dato)


        If numero >= 975 Then

            pct.BackColor = Color.Yellow

        ElseIf numero >= 920 And numero <= 960 Then

            pct.BackColor = Color.Blue

        ElseIf numero >= 860 And numero <= 880 Then

            pct.BackColor = Color.Red

        ElseIf numero >= 750 And numero <= 860 Then

            pct.BackColor = Color.Red

        ElseIf numero > 510 And numero <= 580 Then

            pct.BackColor = Color.Green

        ElseIf numero >= 240 And numero <= 260 Then

            pct.BackColor = Color.Black
        Else
            pct.BackColor = Color.White

        End If


    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Serial.Open()

    End Sub

End Class

Autor: sistemasymicros
26 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

PROYECTOS RELACIONADOS
COMENTARIOS
Para publicar un comentario debes