lunes, 24 de noviembre de 2014

PROGRAMANDO EN ARDUINO



ARDUINO


Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares

El
hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida.4 Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa.4

Arduino se inició en el año 2005 como un proyecto para estudiantes en el Instituto IVREA, en Ivrea (Italia).

Por aquella época, uno de los fundadores de Arduino, Massimo Banzi, daba clases en Ivrea.

El nombre del proyecto viene del nombre del Bar di Re
Arduino (Bar del Rey Arduino) donde Massimo Banzi pasaba algunas horas.En su creación, contribuyó el estudiante colombiano Hernando Barragán, quien desarrolló la tarjeta electrónica Wiring, el lenguaje de programación y la plataforma de desarrollo. Banzi afirmaría años más tarde, que el proyecto nunca surgió como una idea de negocio, sino como una necesidad de subsistir ante el inminente cierre del Instituto de diseño Interactivo IVREA. Es decir, que al crear un producto de hardware abierto, éste no podría ser embargado.

Posteriormente, Google colaboró en el desarrollo del Kit Android ADK, una placa Arduino capaz de comunicarse directamente con teléfonos móviles inteligentes bajo el sistema operativo
Android para que el teléfono controle luces, motores y sensores conectados de Arduino.

En el año 2005, se incorporó al equipo el profesor Tom Igoe. Él ofreció su apoyo para desarrollar el proyecto a gran escala y hacer los contactos para distribuir las tarjetas en territorio estadounidense.

Constantes



HIGH/LOW: representan los niveles alto y bajo de las señales de entrada y salida. Los niveles altos son aquellos de 3 voltios o más.
INPUT/OUTPUT: entrada o salida.
false (falso): Señal que representa al cero lógico. A diferencia de las señales HIGH/LOW, su nombre se escribe en letra minúscula.
true (verdadero): Señal cuya definición es más amplia que la de false. Cualquier número entero diferente de cero es "verdadero", según el
álgebra de Boole, como en el caso de -200, -1 o 1. Si es cero, es "falso".

Sintaxis Básica

· Delimitadores:;, {}

· Comentarios: //, /* */

· Cabeceras: #define, #include

· Operadores aritméticos: +, -, *, /, %

· Asignación: =

· Operadores de comparación: ==, !=, <, >, <=, >=

· Operadores Booleanos: &&, ||, !

· Operadores de acceso a punteros: *, &

· Operadores de bits: &, |, ^, ~, <<, >>

· Operadores compuestos:

· Incremento y decremento de variables: ++, --

· Asignación y operación: +=, -=, *=, /=, &=, |=

Funciones Básicas 


 (1) E/S Digital
· pinMode(pin, modo)
· digitalWrite(pin, valor)
· int digitalRead(pin)
(2) E/S Analógica
· analogReference(tipo)
· int analogRead(pin)
. analogWrite(pin, valor)
(3) E/S Avanzada
· shiftOut(dataPin, clockPin, bitOrder, valor)
· unsigned long pulseIn(pin, valor)
(4) Tiempo
· unsigned long millis()
· unsigned long micros()
· delay(ms)
· delayMicroseconds(microsegundos)
(5) Matemáticas
· min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh), pow(base, exponente), sqrt(x)


Ejemplo sencillo de programación en Arduino


El primer paso antes de comprobar que la instalación es correcta y empezar a trabajar con Arduino, es usar ejemplos prácticos que vienen disponibles con el dispositivo. Se recomienda abrir el ejemplo “led_blink” el cual crea una intermitencia por segundo en un led conectado en el pin 13. El código necesario es el siguiente:

# define LED_PIN 13
void setup () {
// Activado del contacto 13 para salida digital
pinMode (LED_PIN, OUTPUT);
}
// Bucle infinito
void loop () {
// Encendido del diodo LED enviando una señal alta
digitalWrite (LED_PIN, HIGH);
// Tiempo de espera de 1 segundo (1000 ms)
delay (1000);
// Apagado del diodo LED enviando una señal baja.
digitalWrite (LED_PIN, LOW);
// Tiempo de espera de 1 segundo
delay (1000);
}

Vídeos tutoriales
http://www.youtube.com/watch?v=qhy5UtIzZfo

http://www.youtube.com/watch?v=-KXBZZO6IgQ




Ejemplo sencillo de programación en Arduino

El primer paso antes de comprobar que la instalación es correcta y empezar a trabajar con Arduino, es usar ejemplos prácticos que vienen disponibles con el dispositivo.

Ejemplo:

# define LED_PIN 13

void setup () {

 // Activado del contacto 13 para salida digital

 pinMode (LED_PIN, OUTPUT);

}

// Bucle infinito

void loop () {

 // Encendido del diodo LED enviando una señal alta

digitalWrite (LED_PIN, HIGH);

// Tiempo de espera de 1 segundo (1000 ms)

delay (1000);

// Apagado del diodo LED enviando una señal baja.

digitalWrite (LED_PIN, LOW);

// Tiempo de espera de 1 segundo

delay (1000);
}

Aquí dejamos dos videos muy explicativos sobre el Arduino:
https://www.youtube.com/watch?v=qhy5UtIzZfo


https://www.youtube.com/watch?v=-KXBZZO6IgQ


PROYECTOS QUE SE PUEDEN REALIZAR CON ARDUINO

SEMÁFORO CON ARDUINO UNO

Programa y circuito para la creación de cruce de semáforos con Arduino Uno. El estado verde tiene una duración de 6 segundos, más el tiempo de parpadeo, el estado amarillo es de 3 segundos y el estado rojo se encuentra activo mientras el otro semáforo pasa por el estado verde y amarillo. El botón sirve para terminar el tiempo del semáforo con luz verde activo en el momento y así pasar la actividad al otro semáforo. Material usado

· Arduino Uno y cable para conexión USB
· 1 push button
· 1 resistencia de 10K ohms
· 6 resistencias de 330 ohms
· 2 leds de 10 mm, color verde difuso
· 2 leds de 10 mm, color ámbar difuso
· 2 leds de 10 mm, color rojo difuso
· 1 protoboard
· Cables para conexiones
Circuito

El circuito es sencillo y fácil de elaborar.






el circuito ya montado en el protoboard.




https://www.youtube.com/watch?v=LYYdpw3h4Bk



La programación del mismo es la más sencilla, únicamente reproduce el el funcionamiento del semáforo que dirige a los coches.

El segundo semáforo, a tamaño natural, y de imagen muy similar a los que podemos encontrar en la calle, funcina a través de reles, a corriente de 230V, el programa es más complejo, ya que están coordinados tanto el semáforo de coches como el de peatones, reporduciendo exactamente el funcionamiento de los reales.

Código

Este es el programa creado para hacer funcionar los dos semáforos. Cada semáforo es una función, y al termino de cada función se manda a llamar a la otra función. La función loop inicializa el semáforo con uno en luz verde y el otro en luz roja.

/*
Programa para un par de semaforos que cambian de uno
a otro, y la implementacin de un boton para terminar
el tiempo de la luz verde y pasar al otro.
*/
// Declaramos la variable para el pin del boton
const int button = 8;

void setup() {
// Con un ciclo activamos los pines del 2 al 7 como salidas
for (int pin = 2; pin <= 7; pin++) {
pinMode(pin, OUTPUT);
}
// El pin del boton lo ponemos como entrada
pinMode(button, INPUT);
}

// Funcion para el primer semaforo y sus cambios de estado
void semaphoreOne() {
digitalWrite(2, HIGH);
int count = 0;
while (count < 30) {
// El ciclo esta en espera mientras el boton no es presionado
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
// Mandamos a llamar al otro semaforo
semaphoreTwo();
}

// Funcion para el segundo semaforo y sus cambios de estado
void semaphoreTwo() {
digitalWrite(5, HIGH);
int count = 0;
while (count < 30) {
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
// Mandamos a llamar al otro semaforo
semaphoreOne();
}
// Iniciamos nuestro semaforo
void loop() {
// Cambiamos el estado de todos los leds para
// que esten apagados todos al inicio
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
// Prendemos el verde de un semaforo y el
// rojo del otro semaforo
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
// Iniciamos el primer semaforo
semaphoreOne();
}


 
 

Se trata de los robots realizados con placas Arduino, que junto con los sensores de infrarrojos, llevan también detectrores de lumninosidad, los CNY-70, que les permiten moverse dentro del tatami negro y evitar salir de el , ya que pueden detectar el color blanco del borde.


Estas entradas al robots, junto con la distancia que tengan con respecto al otro robot de sumo condicionan la programación de los dos servomotores.