Buscar este blog

lunes, 30 de diciembre de 2013

Como programar arduino parte 4

0 comentarios

Que tal blogueros que nos siguen en este curso sobre programar nuestro arduino en capitulos anteriores solo dimos una pequeña introduccion que nos sera de gran ayuda para seguir en nuestro curso que todavia le hacen falta unos 20 capitulos mas para tener el mayor conocimiento posible sobre arduino.

Asi que sin mas seguiremos con nuestro curso.

En este capitulo desarrollaremos una alarma intermitente de auxilio S.O.S de codigo morse por lo que primero demos una pequeña introduccion de lo que trata.

El codigo morse es un metodo de comunicacion. Su codificacion se basa en una serie de puntos y rayas. Las letras S.O.S (Save Our Souls, salvar nuestras almas) siguen siendo reconocidas como una señal internacional de socorro. En nuestro siguiente sketch haremos que nuestro led parpadee la secuencia  S.O.S  una y otra vez.

De material solo necesitara: Arduino, un led de 5mm y una resistencia de 270 ohms.

int led = 13; 
 
void setup() {                

  pinMode(led, OUTPUT);     
}
 
void loop()
 
{
digitalWrite(led, HIGH);// S(...) primer punto
delay (200); 

digitalWrite(led, LOW); 
delay (200); 
digitalWrite(led, HIGH);// S(...) segundo punto
delay (200); 
digitalWrite(led, LOW); delay (200); 
digitalWrite(led, HIGH);// S(...) tercer punto
delay (200);   
 
digitalWrite(led, LOW); delay (500); 
 
digitalWrite(led, HIGH);// o (-) primer raya
delay (500);  

digitalWrite(led, LOW); delay (500);  
 
digitalWrite(led, HIGH);// o (-) segunda raya 
delay (500);  
 
digitalWrite(led, LOW); delay (500);  
 
digitalWrite(led, HIGH);// o (-) tercer raya 
delay (500);   
 
digitalWrite(led, HIGH);// S(...) primer punto
delay (200); 
 
digitalWrite(led, LOW); delay (200); 
 
digitalWrite(led, HIGH);// S(...) segundo punto 
delay (200); 
 
digitalWrite(led, LOW); delay (200); 
 
digitalWrite(led, HIGH);// S(...) tercer punto
delay (200); 
 
digitalWrite(led, LOW); delay (1000); // Esperar 1 segundo     
 
 
 


En el proximo capitulo mostraremos como reducir el codigo considerablemente, si bien el
sketch anterior es completamente funcional el codigo resultante no es practico por lo
que tendremos que utilizar funciones para reducir el codigo para que sea mas practico.



<< Como programar arduino parte 3              Como programar arduino parte 5 >>                             

domingo, 8 de diciembre de 2013

Como programar arduino parte 3

0 comentarios
Aritmetica en arduino


Es raro que sea necesario ocupar mucha aritmetica en nuestros sketches. En ocaciones puede que tenga
que escalar una entrada analogica para convertirla en una temperatura o con mas frecuencia, agregar 1 a
una variable de recuento. Cuando se esta realizando calculos necesitara poder asignar el resultado a dicho
calculo a una variable.

Ejemplo

Las siguientes dos lineas de codigo tiene como mision proporcionar a la variable y el valor de 50 y a la
variable x  el valor de y+100

y=50;


strings (cadenas)

Cuando los programadores hablan de strings, se estan refiriendo a una cadena de caracteres, como por
ejemplo el mensaje "Hola mundo". Cuando usamos arduino hay algunas situaciones en las que puede que
tenga que utilizar strings, por ejemplo al escribir un mensaje en una pantalla LCD 16X2 o cuando se devuelven datos de texto serie a traves de la conexion USB.

Las strings se crean usando la siguiente sintaxis:

char* message= "Hola mundo";

La palabra char* indica que la variable message es un puntero a un caracter.

Instrucciones condicionales

Las instrucciones condicionales son una forma de tomar decisiones en un sketch. Por ejemplo se puede
encender un led si el valor de una variable de temperatura cae por debajo de un determinado umbral.

El codigo para el ejemplo anterior seria:

 if (temperatura < 15 )
{
 digitalwrite(led, HIGH);
}

La linea de codigo dentro de las llaves solo se ejecutaran si fuera cierta la condicion tras la clave.

La condicion tiene que ir entre parentesis.

Entonces la siguiente linea devuelve "true" si el valor de la variable temperatura es inferior a 15.

if (temperatura < 15 ) 

Al igual que <, tenemos : >, <= y >=.

Para ver si dos numeros son iguales, se puede usar ==, y para probar que no son iguales, se usa !=.

Por tanto la siguiente expresion devolvera "true" si la variable de temperatura tuviera cualquier valor 
que no fuera 15.

Tambien se puede crear condiciones complejas mediante los denominados operados logicos. Los pricipales
operadores  son && (y), y ||  (o).

Por tanto un ejemplo que enciende el LED si la temperatura es inferior a 15  o superior a 20 podria ser el
siguiente:

if ( (temperatura < 15 ) ll (temperatura > 20) )
{
   digitalwrite (led, HIGH);


A menudo, cuando se utiliza una instruccion con el condicional if (si ...) se desea hacer una cosa si la condicion es verdadera y otra cosa si es falsa. Esto se puede hacer utilizando la palabra clave else como 
se muestra en el siguiente ejemplo:

if ( (temperatura < 15 ) ll (temperatura > 20) )
{
   digitalwrite (led, HIGH);


else

{
digitalwrite(led, LOW);
}

 Conclusiones

En lo que llevamos del curso hemos explorado solo un poco del lenguaje en C y de aspectos basicos de arduino, hay mucho todavia que tenemos que aprender si no se esta familiarizado con la programacion  y la 
electronica pero en capitulos futuro puliremos todos esos detalles y haremos proyecto cada vez mas serios para tener un conocimiento profundo sobre arduino.  


<< Como programar arduino parte 2                                          Como programar arduino parte 4 >>      

sábado, 9 de noviembre de 2013

Como programar arduino parte 2

0 comentarios

En esta parte hablare sobre el hardware de arduino y del microcontrolador  que tiene como corazon. La placa basicamente solo presta apoyo al microcontrolador extendiendo los pines de los conectores para que pueda conectar hardware en ellos y proporcionar un enlace USB para descargar los sketch.

Tambien hablare brevemente del lenguaje C para programar arduino, algo que se profundizara cuando se vaya poniendo proyectos mas complejos.


Microcontroladores

El corazon de arduino es un microcontrolador el resto de la placa se ocupa para facilitar la alimentacion y permitir que se comunique con la computadora . Lo que se nos da cuando compramos un arduino es un pequeño ordenador en un chip. Este tiene todo y mas de lo que contenia las primeras computadoras caseras. Dispone de un procesador, un Kilobyte de RAM para contener datos, unos cuantos kilobytes de memoria EPROM o de memoria Flash para contener nuestros programas y puertos de entrada/salida.

Las entradas pueden leer señales digitales y señales analogicas  estas nos permite conectar innumerables tipos de sensores de luz, temperatura, sonido, etc. Las salidas tambien pueden ser digitales o analogicas

¿Que hay en una placa arduino?

Fuente de alimentacion

Debajo del conector de USB se encuentra el regulador  de tension de 5v estabilizando cualquier voltaje en un rango de 7 a 12 volts

Conexiones electricas

Cada patilla esta identificada con su nombre impreso junto a cada uno de sus pines. El primero es el Reset (reiniciar), este hace que el programa del microcontrolador comience desde el principio. El pin Reset permite reiniciar el microcontrolador momentaneamente estableciendo este pin alto ( conectandolo a +5v ). Aunque no esta especificado concretamente en las especificaciones de arduino la corriente que puede proporcionar no deben de pasar  de 250 mA por seguridad para que la tarjeta no sufra algun daño.

Entradas analogicas

Especificado como ANALOG IN esta marcado con los numeros 0 a 5. Estos seis pines se pueden utilizar para medir el voltaje que se les a conectado de forma que el valor se pueda utilizar en los sketches. Si bien aparecen etiquetadas como entradas analogicas, estas conexiones pueden utilizarse tambien como entradas/salidas digitales.

Conexiones digitales

Cambiando al conector superior y comenzando por el lado derecho. Tenemos pines denominados Digital 0 a 13. Estos se pueden utilizar como entradas/salidas digitales, si se utilizan como salida proporcionan 5 volts cuando estan en "1" y 0 volts cuando estan en "0". La corriente maxima que pueden suministrar son 40 mA. Mas que suficiente para encender un led estandar, pero no para manejar directamente un motor electrico por pequeño que sea.

Cuando estan como entradas cuyo voltaje que se le debe proporcionar para indicar que esta recibiendo un bit es 5 volts.

Algunas de las conexiones digitales (3, 5, 6, 9, 10 y 11) estan rotuladas con PWM. Estas se pueden utilizar para proporcionar un voltaje de salida variable.

Otras conexiones son AREF.AREF utilizadas para escalar las lecturas de las entradas analogicas.

Microcontrolador

Volviendo a nuestra placa arduino, el chip microcontrolador es el dispositivo rectangular negro con 28 pines. Esta insertado en un zocalo DIL (Dual in-line) con lo que se puede reemplazar facilmente, este microcontrolador es el ATmega 328.En la siguiente figura podemos ver un diagrama a bloques que muestra las principales caracteristicas de este dispositivo.

                                                                    


El cerebro de este dispositivo es la CPU (Unidad de Procesamiento Central) controla todo lo que  ocurre dentro del dispositivo. Este obtiene instrucciones de la memoria flash  y las ejecuta , tambien tenemos la memoria EEPROM que se utiliza para almacenar  datos que no queremos perder en caso de un fallo en el suministro de energia, la uart utilizada para comunicarse de micro a micro, micro a pc o micro a cualquier dispositivo externo.

 ¿ LENGUAJE C en arduino ?

Arduino utiliza el lenguaje de programacion en C, aunque eliminandon parte de su complejidad.

Ahora vamos a ver en forma mas detallada nuestro primer programa  que hemos escrito para arduino en primer lugar las lineas

//    y    /*  */

Nos indican comentarios y no tienen efecto alguno en nuestro programa, la primera linea indica que todo lo escrito delante de esas dos  // no tendra efecto alguno en esa linea

Ejemplo

// Todo lo escrito en esta linea no tiene efecto en mi programa
Aqui el compilador de arduino lo tomaria como error

La segunda linea /*  */  dentro de esas lineas y asteriscos  lo que se escriba no tendra efecto en el codigo

Ejemplo

/*  Lo escrito dentro de estas lineas y asterisco no tendra efecto en mi codigo
     Aunque exista un salto de linea.
*/
Ahora si empezando a explicar el programa  
 int led = 13;
Esta linea de codigo da un nombre al pin digital de salida que vamos a conectar el led hay que aclarar que en nuestro sketch si definimos el nombre como :
int Led = 13;
Nos arrojaria un error ya que el compilador no acepta mayusculas en la primera letra . Bueno entendido esto la palabra led es lo que se denomina una variable. Cuando se quiera utilizar una variable por primera vez en nuestro sketch hay que indicarle al compilador que tipo de variable es . Puede ser de tipo "int"  como en este caso, puede ser "float", o cualquiera que describire mas adelante.

Un "int" es un entero, es decir un numero entero, ya que no existe un pin 12.5 verdad si no en nuestro caso el pin 13 .

La sintaxis parra declarar una variable es:

 tipo_de_dato  nombre_variable = valor;  

Asi es como, primero tenemos el tipo "int", luego un espacio , luego un nombre de variable despues un signo de "=" , despues un valor y por ultimo un punto y coma para indicar fin de linea, tenga en cuenta no olvidar el punto y coma ya que eso puede traer errores de compilacion que pueden ser confusos.

Las siguientes lineas de nuestro sketch son :

void setup() {                

  pinMode(led, OUTPUT);     
 
Lo anterior es una funcion, en este caso se llama setup(), todos los sketches 
deben de tener una funcion setup(), y las lineas que contenga se ejecutaran en 
el orden que este escrita. En este caso es pinMode(led, OUTPUT);, con lo anterior
estamos configurando el pin digital como salida, si quisieramos ocuparlo como
entrada solo tendriamos que cambiarlo por pinMode(led, INPUT);, lo anterior seria
mas conveniente llamarlo como para evitar pinMode(switch, INPUT); confusiones.
 
Tanto  OUTPUT como  INPUT son constantes reservadas.  
  
void loop()
{
    digitalWrite(led, HIGH);
 
     delay (1000);
 
    digitalWrite(led,LOW);
 
    delay(1000);
 }  
 
La funcion anterior loop() tambien debe estar contenida en todos los sketches de 
arduino  esta funcion loop()(bucle), se ejecuta dentro de arduino de forma continua
hasta que se apague el arduino, por lo que el codigo que esta en el interior de
dicha funcion se ejecutara de manera continua hasta que se apague arduino. 
La funcion digitalWrite( parametro1,parametro2 ); toma dos parametros, el pin de arduino en el 
que escribe y el valor a escribir, en el codigo pasamos los parametros led y HIGH
para activar el led y led y LOW para apagarlo de nuevo.

 Tipos de Datos y Variables.

   
 En las lineas anteriores hablamos de la variable led y la declaramos como tipo int (entero). La mayoria de
las variables utilizadas en nuestros sketches seran tambien del tipo int.

Un int contiene un numero entero entre -32 768 y +32  767  esto utiliza 2 bytes de datos para cada uno
de los 1024 bytes disponibles para almacenamiento en nuestro arduino. Si ese numero no fuera suficiente
 se puede utilizar un numero "long" (largo) que utiliza 4 bytes por cada numero y le proporciona un 
intervalo de numeros entre -2 147 483 648 y +2 147 483 647. En la siguiente tabla se muestra los diferentes tipos de datos que hay.











 << Como programar el arduino                                                      Como programar arduino parte 3 >>

Electronica facilita