Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Divide y vencerás la técnica para poner a punto un sketch

Por Félix Maocho
19/4/2013


Objetivo de este post:
Enseñar a poner a punto tanto el hardware como el software a base de dividir el sketch en funciones independientes. Explicar la sintaxis de la función y como se prueban las funciones por separado .

_________________

Es imposible poner a punto un sketch complejo, son tantos los pequeños errores que podemos cometer en su redacción, que es prácticamente imposible escribirlo sin error, y con solo cuatro o cinco errores dispersos en todo el sketch, será imposible, pese a la ayuda que nos proporciona el sistema compilador, el poderlos localizar y corregir.

Por tanto la solución pasa por dividir el sketch  en “cajas negras” que proporcionando unos parámetros de entrada, efectúe una acción prevista y previsible, y den un resultado recogido en unos parámetros de salida, que a su vez, pueden ser parámetros de entrada otras “cajas negras” que entrarán en funcionamiento a continuación.

Las primeras cajas negras ya viene de finidas de fábrica son void setup ()  y void loop ()  que tiene unas características que no son esclusivas ni raras pero tampoco son del todo normales, ni dan ninguna respuesta, lo que se indica anteponiendo la palabra “void”, ni necesitan ningún parámetro en su funcionamiento, los que se indica con el paréntesis en cerrado en vacío ”( )” .

Supongamos que queremos hacer una función muy sencilla, que da como resultado en una variable “c” el producto de dos valores cuales quiera  “a” y “b”. Escribiríamos lo siguiente:

int fucionmultiplica (int a, int b)  {
// La funcion será lo que haya entre los dos corchetes
int c ;             // definimos una variable local  c
c = a * b ;      // definimos lo que hará la función en nuestro caso multiplicar a y b
return c ;       // “return” devuelve el cálculo  efectuado como salida de la función


}

Un sketech completo que usara esta función será algo con este aspecto:

void setup(){
//  Lo que tenga que hacer por primera y única vez;
}

void loop() {
int a = 2;
int b = 3;
int c;
c = fucionmultiplica (a , b);      // c ahora vale 6
}

int fucionmultiplica (int a, in00t b)  {
int c ;
c = a * b ;
return c ;
}

Veamos ahora como seria nuestro sketch “Semáforos” dividido en funciones.  La expplicacion de lo que hace este esktc en detalle se presentó en el el post de Arduino, Arduino – Repaso general de todo lo que aprendimos hasta la fecha.

Inicialmente seria solo una pareja de funciones obligadas en cada sketch

/*
Semáforo
Al oprimir el pulsador el semáforo espera a sincronizar con un decalaje
con semáforo lejano y cambia el estado del semáforo del paso de
vehículos al de personas.
Al cabo de un tiempo avisa del fin del semáforo para pesonas y
vuelve a la situación inicial
Félix Maocho
Es de dominio público
https://felixmaocho.wordpress.com/?s=arduino
*/

void setup(){
//  Hace lo que corresponda por primera y única vez;
}

// Las vueltas pares ejecuta la funciòn “funcionpar”
// y las impares la función “funcionimpar”
void loop{
if (vuelta == 0;) {
vuelta = 1;      // La siguiente vuelta será “impar”
void funcionpar ()
}
else {
vuelta = 0;      // La siguiente vuelta será “par”
void funcionimpar ()
}

// funcionpar  se ocupará del semaforo lejano
void funcionpar () {
// De nomento no hace nada
}

// funcionimpar  se ocupará del semaforo pajo de manda
void funcionpar () {
// De nomento no hace nada
}

Por supuesto este sketch de no hace absolutamente nada, solo es el esqueleto vacío de lo que al final será el sketch real, pero permite que centremos nuestra atención en solo una de las funciones, teniendo claro que las otras no hacen de momento absolutamente nada, Cuando esa función actué sin problemas, ya nos ocuparemos de las demás sabiendo que unas ya están apunto y otras siguen sin hacer nada.

Poner a punto el hardware

Tal como esta ya nos vale para poner a punto el hadware pues si mandamos encender un PIN en la función “Setup” deberá encenderse el LED o bombilla correspondiente. De esta forma podemos al menos comprobar que el hardware que hemos montado no tiene el errores de conexión. Preparemos,. al menos parcialmente, la funcion “setup” para ir probando el hardware.

Arduino10-1

Probemos si va hasta aquí deben encenderse la luz verde, de momento no hemos montado en la protoboard más que las luces del semáforo lejano.

El esquema es el siguiente

arudino10-1_bb

Se observa que desde el lado inferior se alimentan los buses de “5V” y “tierra” de ambos lados de la tarjeta protoboard y que hay el típico montaje de una resistencia de  210 Ω puesta en serie con el LED del color correspondiente Tal como está el sketch primero probaremos que funciona la luz verde y luego cambiando solo la variable “semver” por “semroj” la luz roja

Veamos el resultado del primer experimento.

arduino primera prueba

De igual forma iremos probando que se han instalado correctamente todos los LED que se ponen sobre la protoboard que son los siguientes:

  • El conjunto de solicitud de paso, formado por dos LEDs blancos y el botón de solicitud, Los LEDs controlados por  los PIN7 (“Espere verde”) y PIN8 (“Peaton pulse”) y en medio el botón de solicitud controlado por el PIN 9 en output que instalaremos como es habitual en un circuito Pull Down con una resistencia de 1000Ω, (este circuito no se podrá comprobar en este momento pues la opción de pulsar el botón se produciráa en la “funciónonimpar” , pospondremos hasta entonces su chequeo).
  • El semáforo de peatones, formado por dos LEDs controlado por los PIN5 para el contol del LED Verde ( en nuetro caso azul por no tener verde) y PIN6 para el control del LED Rojo con las correpondientes  resistencias de 220Ω

Una vez probada el esquema de la placa protoboard completa es como sigue:

arudino10-2_bb

De izquierda a derecha

  • El PIN 11 controla el LED Rojo del semáforo lejano (cable rojo)
  • El PIN 10 controla el LED Verde del semáforo lejano (cable verde)
  • El PIN 9  controla el Boton del conjunto de  demanda de semáforo (cable negro)
  • El PIN 8 controla el LED Blanco “Pulse Botón” (cable amarillo)
  • El PIN 7 controla el LED Blanco “Espere verde” (cable amarillo)
  • EL PIN 6 controla el LED Rojo del semáforo de peatones (cable rojo)
  • EL PIN 5 controla el LED Verde del semáforo de peatones (cable verde)

Físicamente la placa protoboard tiene este enmarañado aspecto, pero como hemos ido probando los circuitos uno a uno , podemos asegurar que funcionan correctamente.

arduino10 protoboard

Falta aun probar los PINs que controlan los relés que encienden y apagan las bombillas que simulan ser el semáforo de automóviles

  • EL PIN 11 controla el Led Rojo del semáforo de peatones (cable rojo)
  • EL PIN 11 controla el Led Rojo del semáforo de peatones (cable rojo)
  • EL PIN 11 controla el Led Rojo del semáforo de peatones (cable rojo)

Para ello hemos prototipado el típico semáforo con tres bombillas de colores a 220 volts, en los que el circuito de cada bombilla está controlado por uno de los relés de la placa de relés, Desde luego no me darán un premio de diseño en inigun lado por este “semáforo” pero para lo que pretendemos es suficiente

semáforo y relés

  • El relé 2 controlará la bombilla verde
  • El relé 3 controlará la bombilla naranja
  • El relé 2 controlará la bombilla roja

Ahora tenemos que conectar la placa arduino con la placa de relés con dos cables que llevan la tensión de 5 voltios, “5V”, (azul) y la “tierra”, (negro) y tres cables que van desde los PINs  2 , 3 y 4 a los relés 2, 3 y 4 (Colores verde, amarillo y rojo) Para ello primero fijamos  tanto el “semáforo”, como la placa protoboard, en una plataforma común, que facilite la conexión de ambas placas.

swmñaforo completo

Probamos el funcionamiento de los tres relés y “casi” podemos asegurar que el montaje que hemos hecho e no contiene errores. Y digo “casi”, porque en Informática nunca podemos decir que algo va a funcionar bien siempre, sino solamente, que ha funcionado correctamente en todas las pruebas que le hemos sometido.

Poner a punto el software

Una vez que hemos probado el hardware, vamos a centrarnos en poner a punto el software. Por lógica comenzaremos con la primera función o sea la función “setup” que controla las cosas que se hacen por primera y única vez. En nuestro caso esta función, aparte de definir como se van a utilizar los PINs de Arduino si de salida (OUTPUT) o de entrada (INPUT), debe encender las luces de los diferentes conjuntos de modo que queden tal como deben al arrancar, Esas luces son;

  • En el “semáforo lejano” luz verde encendida,
  • En el “semáforo de coches” bombilla verde encendida,
  • En el “conjunto de solicitud de paso” luz blanca de “Pulse Botón” encendida,
  • En el semáforo de peatones , luz roja encendida,
  • El resto de las luces permanecerán apagadas.

Escribimos la función “setup” y vemos si realmente enciende estas luces que esta previsto y deja apagadas el resto.

funcion setup arduino10

 

Veamos si realmente enciende las luces que estaba previsto.

arduino10 luces de inixcio

Pasaríamos a continuación a programar la “funcionpar”. Pero eso lo haremos en el siguiente post de Arduino, porque me está saliendo muy largo. Hasta entonces un saludo

Félix Maocho

Todos los post de arduino apareceran en Robótica bajo el subepigrafe Arduino

Anuncios

19 abril 2013 - Posted by | Robotica | ,

2 comentarios »

  1. hola felix donde esta el sketch
    saludos desde palma de mallorca

    Comentario por Guillermo Martinez | 12 septiembre 2014 | Responder

  2. Supongo que te refieres al sketch que viene aquí Saludos https://felixmaocho.wordpress.com/2013/04/07/arduino-repaso-general-de-todo-lo-que-aprendimos-hasta-la-fecha

    Comentario por felixmaocho | 18 septiembre 2014 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: