Calificador de servicios con arduino y visual basic

Publicado el: 15 de marzo de 2015
Principiante
Acerca de este proyecto
Dispositivo que permite evaluar el servicio prestado a los usuarios por parte del personal de atencion al cliente.
arduino visual basic
Publicidad
DETALLES

Este proyecto consiste en un dispositivo que es muy usado en las empresas y entidades que prestan atención al público. Se trata de un calificador de servicios, también llamado calificador de atención, el cual permite a los usuarios evaluar el servicio recibido por parte de la persona que lo atendió, de igual manera le sirve a la organización de la empresa para detectar como perciben los usuarios la manera en la cual fueron atendidos.

La imagen siguiente muestra el dispositivo ensamblado, el cual generalmente consta de 4 botones que representan cada una de las calificaciones: Excelente, Bueno, Regular y Malo.

Comercialmente es como se muestra en la siguiente imagen:


El dispositivo se conecta a través del puerto usb (comunicaciòn serial) y a través de un programa realizado en visual basic net  se procesan los datos recibidos y  se muestran en pantalla.

Los materiales utilizados en este proyecto son:

(1) tarjeta mircrocontroladora Arduino uno.

(4) Interruptores push buttons.

(1) Diodo led de cualquier color.

(4) Resistencias de 10KΩ (resistencias de pull-up para los interruptores)

(1) Resistencia de 220Ω ( de limitación para el diodo led)


MONTAJE EN LA PROTOBOARD



Sólo utilizaremos 5 pines del arduino, 4 como entradas y 1 como salida.

Los pines 4,5,6 y 7 del arduino se configuraran como entradas para cada interruptor y el pin 8 se configura como salida para conectar el diodo led, que se iluminará por medio segundo (500ms) cada vez que se presiona un botón.

Las entradas se encuentran normalmente en un ivel lógico cero (0), debido a las resistencias de 10KΩ y cada vez que es presionado el botón, esta pasa a estado ALTO (1). En el código, al detectarse este cambio de estado se envía a través del puerto serial un caracter dependiendo de cual botòn fue presionado, asi, si se presiona el inerruptor conectado al pin 4 que representa la calificación EXCELENTE, se envìa el caracter 'E'

 Serial.println('E');

Si se presiona el interruptor conectado al pin 5 que representa la calificación BUENO, se envía el caracter 'B'

 Serial.println('B');

Si se presiona el interruptor conectado al pin 6 que representa la calificación REGULAR, se envía el caracter 'R'

 Serial.println('R');

Si se presiona el interruptor conectado al pin 7 que representa la calificación MALO, se envía el caracter 'M'

 Serial.println('M');

El código cuenta con una función antirebote para evitar las falsas lecturas que se presentan al trabajar con interruptores, y también para que cuando se deje el botón presionado por mucho tiempo sólo se envìe el caracter una sola vez.

El código en visual basic es el encargado de recibir el dato envíado por el arduino y procesarlo. Posee un control tipo grid o grilla que muestra la fecha, la hora y la calificación obtenida.

El programa utiliza los siguientes controles:

- SerialPort (para la conexión serial), en el programa lo denomino puertoSerial.

- DataGridView ( para mostrar los datos ), en el programa lo denomino dg.

- (4) pictureBox (uno para cada calificación), en el programa los denomino pctExcelente, pctBueno, pctRegular y pctMalo.

Tiene una función que se ejecuta automaticamente al iniciar el programa y es la encargada de realizar la conexión al puerto serie, la función la denomino CONECTAR()


La codificacion se encuentra en la seccion de codigos, pero si desea descargalos directamente les dejo los enlaces:


Descargar codigo de arduino

Descargar codigo de visual basic.

 

CODIFICACIÓN
Codigo del programa de arduino-

/* Constantes para los botones */
const int botonE= 4;            // boton conectado al pin 4 Excelente
const int botonB= 5;            // boton conectado al pin 4 Bueno
const int botonR= 6;            // boton conectado al pin 4 Regular
const int botonM= 7;            // boton conectado al pin 4 Malo

const int led = 8;

const int tiempoAntirebote =10;

// Definimos las variables
int estadoBotonE;
int estadoBotonB;
int estadoBotonR;
int estadoBotonM;

int estadoBotonAnteriorE;
int estadoBotonAnteriorB;
int estadoBotonAnteriorM;
int estadoBotonAnteriorR;

int valorE;
int valorB;
int valorR;
int valorM;


//*******RUTINA ANTIREBOTE *********************************************************
boolean antiRebote  (int pin ) {
  int  contadorE =0;
  boolean estadoE;            // guarda el estado del boton 
  boolean estadoAnteriorE;    // guarda el ultimo estado del boton 

  do {
    estadoE = digitalRead (pin);
    if (estadoE != estadoAnteriorE ){  // comparamos el estado actual 
      contadorE = 0;
      estadoAnteriorE = estadoE;
    }
    else{
      contadorE = contadorE + 1;       // aumentamos el contador en 1
    }
    delay (1);
  }
  while (contadorE < tiempoAntirebote);
  return estadoE;
}

//************************************************************************
void setup (){                      
  Serial.begin(9600);   //Iniciamos la comunicacion serial
  pinMode(botonE,INPUT); //declaramos el boton como entrada
  pinMode(botonB,INPUT); //declaramos el boton como entrada
  pinMode(botonR,INPUT); //declaramos el boton como entrada
  pinMode(botonM,INPUT); //declaramos el boton como entrada
  pinMode(led,OUTPUT);  // declaramos el pin donde se conecta el led como salida
}

void encenderLed()
{
  digitalWrite(led,HIGH);  
  delay(500);
  digitalWrite(led,LOW);
}  

void loop () {
  valorE =digitalRead (botonE);              //leemos el estado del boton conectado al pin 4 (Excelente)
  valorB =digitalRead (botonB);              //leemos el estado del boton conectado al pin 5 (Bueno)
  valorR =digitalRead (botonR);              //leemos el estado del boton conectado al pin 6 (Regular)
  valorM =digitalRead (botonM);              //leemos el estado del boton conectado al pin 7 (Malo)
 //***************************************************************************************************** 
  if (valorE  != estadoBotonAnteriorE) {     //si hay cambio con respeto al estado 
    if (antiRebote (botonE)){                    //checamos  si esta presionado y si lo esta
        
        Serial.println('E');     // envío el caracter a través del puerto serial
        encenderLed();   // y enciendo el led

    }
    
  }
  estadoBotonAnteriorE = valorE;      // guardamos el estado del boton
  //************************************************************************************************
  
  if (valorB  != estadoBotonAnteriorB) {     //si hay cambio con respeto al estado 
    if (antiRebote (botonB)){                    //checamos  si esta presionado y si lo esta

      Serial.println('B');
      encenderLed();
    }
    
  }
  estadoBotonAnteriorB = valorB;      // guardamos el estado del boton
  //************************************************************************************************
  
  if (valorR  != estadoBotonAnteriorR) {     //si hay cambio con respeto al estado 
    if (antiRebote (botonR)){                    //checamos  si esta presionado y si lo esta

      Serial.println('R');
      encenderLed();
    }
    
  }
  estadoBotonAnteriorR = valorR;      // guardamos el estado del boton
  
 //*************************************************************************************************

  if (valorM  != estadoBotonAnteriorM) {     //si hay cambio con respeto al estado 
    if (antiRebote (botonM)){                    //checamos  si esta presionado y si lo esta

      Serial.println('M');
      encenderLed();
    }
    
  }
  estadoBotonAnteriorM = valorM;      // guardamos el estado del boton
   
  
  
  

  
  
  
  
  
  
}

Codigo del programa en visual basic-
Programa que se comunica por el puerto serial con el codigo de arduino
Public Class frmMain
    'Código para mostrar los datos recibidos a través de un circuito conectado al puerto USB
    'para verificar la calificación evaluada por el usuario atendido 
    'Realizado por José Luis Bejarano Vásquez 
    'www.tecnimakers.com
    'Enero 15 de 2015
    Dim id As Integer
    Dim i As Byte
    Private Sub FormatearDg()

        id = 0     'Variable para las filas del control datagridview

        With dg

            For i = 1 To 50
                .Rows.Add() 'Agrego inicialmente 50 filas
            Next

            .RowsDefaultCellStyle.BackColor = Color.White       'Alterno el color de las celdas

            .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue

        End With
    End Sub
    Private Sub Conectar()
        With puertoSerial
            Try

                .PortName = 'COM3'  'Le asigno el mismo nombre del puerto al que está conectado el circuito

                .Open() 'abro el puerto

            Catch ex As Exception

                If ex.Message.Contains('no existe') Then

                    MsgBox('Dispositivo no conectado, favor conectarlo')


                End If

            End Try


            If .IsOpen Then
                lblEstado.Text = 'CONECTADO'
                lblEstado.ForeColor = Color.Green
            Else
                lblEstado.Text = 'DESCONECTADO'
                lblEstado.ForeColor = Color.Red

            End If

        End With
    End Sub
    Private Sub SalirToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalirToolStripMenuItem1.Click


        Dim frmAcercaDe As New AcercaDe
        frmAcercaDe.Close()
        End 'Salgo de la aplicación

    End Sub

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Conectar()  'Conecto el puerto serial
        FormatearDg()   'Le doy formato al datagridview

    End Sub

    Private Sub puertoSerial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles puertoSerial.DataReceived
        Dim texto As String
        Dim fecha As Date
        Dim hora As Date


        texto = puertoSerial.ReadLine   'Recibo el dato por el puerto serial

        texto = Microsoft.VisualBasic.Left(texto, 1)    'Capturo el primer caracter

        fecha = Date.Today

        hora = Date.Now

        Select Case texto

            Case 'E'
                pctExcelente.BackColor = Color.Green
                pctBueno.BackColor = Color.White
                pctRegular.BackColor = Color.White
                pctMalo.BackColor = Color.White
            Case 'B'
                pctExcelente.BackColor = Color.White
                pctBueno.BackColor = Color.Green
                pctRegular.BackColor = Color.White
                pctMalo.BackColor = Color.White
            Case 'R'
                pctExcelente.BackColor = Color.White
                pctBueno.BackColor = Color.White
                pctRegular.BackColor = Color.Green
                pctMalo.BackColor = Color.White
            Case 'M'
                pctExcelente.BackColor = Color.White
                pctBueno.BackColor = Color.White
                pctRegular.BackColor = Color.White
                pctMalo.BackColor = Color.Green

        End Select

        'Agrego los datos al datagridview
        dg.Item(0, id).Value = id + 1
        dg.Item(1, id).Value = 'José Luis Bejarano Vásquez'
        dg.Item(2, id).Value = fecha
        dg.Item(3, id).Value = hora
        dg.Item(4, id).Value = texto

        id = id + 1


    End Sub

    Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
        Conectar()
    End Sub


  
    Private Sub AcercaDeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AcercaDeToolStripMenuItem.Click
        Dim frmAcercaDe As New AcercaDe

        frmAcercaDe.Show()

    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