curso de robótica móvil con arduino y android · croma 2010 por francisco ramos y andrés s....

76
CRoMA 2010 por Francisco Ramos y Andrés S. Vázquez CRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM Curso de Robótica Móvil con Arduino y Android Andrés S. Vázquez Raúl Fernández Francisco Ramos

Upload: lenga

Post on 29-Oct-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Curso de Robótica Móvil

con Arduino y Android

• Andrés S. Vázquez

• Raúl Fernández

• Francisco Ramos

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

- Programación de Microcontroladores .

- ENTRADAS/SALIDAS DIGITALES

- COMUNICACIÓN

Sesión 2 -Taller.

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Taller

Parte A. Programación de

microcontroladores

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

ALTO NIVEL (C,

PROCESSING, Python…)

Ensamblador (assembler)

• Requiere compilador • Traducción directa a

lenguaje de máquina.

• Código portable • Específico del Hardware

• Comprensible. Facilidad para

trabajar programas grandes,

operaciones aritméticas y de

formateo de datos.

• Difícil seguimiento y

concepción de programas

grandes

• Los compiladores incluyen

funciones para manejo de

periféricos.

• Debe manipularse los

registros que controlan cada

periférico.

• Menos eficiente en velocidad y

en tamaño del código.

• Puede optimizarse en

velocidad y tamaño.

Se suele utilizar lenguaje de alto nivel,

con rutinas críticas en assembler

Lenguajes de Programación

de µC

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Lenguaje Máquina

Ej01.HEX

Lenguaje Assembler

Ej01.ASM

Lenguaje C

Ej01.C

compilar ensamblar

grabar leer

desensamblar

PC

Grabador

ó ISP

Programación μC

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Processing• El lenguaje de programación de Arduino está

basado en C, pero influenciado por el lenguaje

Processing (http://processing.org/)

• Una guía completa de programación con Arduino

puede encontrarse en:

– http://www.arduino.cc/playground/uploads/Main/arduino_no

tebook_v1-1.pdf

– http://www.uco.es/aulasoftwarelibre/wp-

content/uploads/2010/05/Arduino_user_manual_es.pdf

• Se pueden usar otros lenguajes como C, Phython,

Java o Scratch muy extendido en docencia por su

sencillez.

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

CONFIGURACIÓN

Elegir los pines E/S de acuerdo a un esquema y

los periféricos a utilizar en la aplicación

(timers, puerto serie etc).

Escribir los registros de activación y

configuración de E/S y periféricos

INICIALIZACIÓN

Poner los periféricos y las E/S en un estado

inicial adecuado (ej. las salidas en ‘0’)

CICLO DE SCAN

El programa principal, que por lo general se

ejecuta cíclicamente.

Inicializa

periféricos

Fin

Inicializa E/S

y activa

periféricos

Ciclo principal

Configuración

Inicialización

Ciclo de scan

Reset

Terminar?

Estructura general de un

programa

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

• Declaración de

variables

• Función setup

– Inicializar variables

– PinModes

– Configurar/inicializar

comunicación serie

• Función loop

– Instrucciones a repetir

continuamente por el

micro

Estructura de un programa

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Elementos de un

programa• Sentencias: Siempre finalizadas por ;

– int x=13;

• Comentarios

– // comenta una línea

– /* comenta un

parrafo */

• Llaves {} delimitan bloques (funciones, if, for, etc…)

• Funcionestipo nombreFuncion(parametros)

{

instrucciones;

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Elementos de un

programa• Variables

– Todas las variables necesitan ser declaradas. Se

puede asignar un valor al mismo tiempo que se

declaran.

int inputVariable=0; //declaro y asigno valor

inputVariable=2; //asigno valor (declarada antes)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Elementos de un

programa• Ámbito de una variable

– global: Necesita ser declarada antes del setup

– local: Declarada en un bloque solo puede ser vista por el

bloque y sus sub-bloques (si se declara en un sub-bloque

no será vista en resto del bloque)

int value; // visible por cualquier funcion

void setup() { int i;

for (i=0; i<20; i++){

value=i;

}

}

void loop() { int i=value; }

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Tipos de datos

básicos• boolean:

– TRUE (1) o FALSE (0)

• byte

– Valor numerico de 8 bits sin puntos decimales.Rango: [0, 255]: byte variable = 34;

• int

– Valores enteros de 16 bits. Rango: [-32768, 32767]

• long

– Valores enteros de 32 bits. Rango: [-2146483648,

2146483647]

• char: un solo carácter

– char miinicial =‘F’;

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Tipos de datos

básicos• float

– Valores en punto flotante (con decimales). 32

bits. Rango: [-3.4028235E+38 a 3.4028235E+38float pi = 3.1415;

• Arrays

– Vector de valoresint miarray[] = {valor0,valor2,valor3..};

int miarrayb[2];

miarray[1]=10;

miarray[0]=miarray[1];

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Operadores

• Operadores aritméticos: + - * /– x = y+ 3*z/2;

• Asignaciones compuestas– x++; // lo mismo que x = x +1;

– x*=y // lo mismo que x = x*y;

• Comparación– x==y; // es x igual que y?

– x!=y; // es x distinto que y?

– x>y; // es x mayor que y?

– x<=y; // es x menor o igual que y?

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Operadores y

constantes• Operadores lógicos

– && (AND), || (OR) y ! (NOT)

• if ((x>0 && x<6) || (!(x<9)))

• Constantes

– TRUE valor distinto de 0 / FALSE valor igual a 0

– HIGH / LOW. Niveles de tensión de un pin. Usados en L/E

de pines. HIGH nivel logico 1, ON o 5 V. LOW es nivel

logico 0, OFF o 0 V.

• digitalWrite(13,HIGH)

– INPUT / OUTPUT constantes usadas con pinMode() para

definir un pin digital como entrada o salida

• pinMode(13, OUTPUT)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Control de flujo

• if .. elseif (value == 10) {

hazAlgo;

}

else {

hazOtraCosa;

}

• for (iniciación; condición; expresión) {

sentencias;

}for(int i=0; i<20; i++)

{

f = f*i;

}

• while (condición) {

sentencias;

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Control de flujo

• do ... while

– Como while, excepto que el código se ejecuta justo antes

que la condición sea evaluada. Se usa cuando se quiera

correr el código del bloque al menos una vez antes de

comprobar las condiciones.

Ejemplo:

do {

digitalWrite(13,HIGH);

delay(100);

digitalWrite(13,HIGH);

delay(100);

sensorValue = analogRead(1);

} while (sensorValue < 512);

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Control de tiempo

• delay(ms)

– Pausa el programa un tiempo especificado en

milisegundos

• millis()

– Devuelve en milisegundos el tiempo que se lleva

ejecutando el programa actual. La variable de

salida es un long. Este reloj se desborda (y

vuelve a inicializarse) cada 9 horas

value = millis();

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

E/S digital

PINES: Lineas de entrada/salida de los puertos. Ejemplo AT328

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

- Lectura/escritura de puertos clásica (ensamblador):configurar el

puerto (escribir sobre un registro de configuracion) y acceder a una

dirección de memoria donde se mapea el contenido del puerto

- Ejemplo programación ensamblador con PIC

Pero en Arduino todo es mucho más sencillo….el compilador ya tiene

mapeada las direcciones de los pines y facilita su configuración:

E/S digital

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

E/S digital

• Los pines (0-13) se pueden utilizar como entradas y

salidas digitales

– INPUT. Estado de alta impedancia

– OUTPUT. Estado de baja impedancia

• Primero se configuran los pines en el setup por

medio de:

– pinMode: configura un pin de entrada (INPUT) o salida

(OUTPUT)

pinMode(numero_pin, OUTPUT);

• digitalRead(pin). Lee un pin digital devolviendo

como resultado un HIGH o un LOW

value = digitalRead(pin)

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Ejemplo Salida digital

• Ejemplo de encender el led 13

• Ejemplo de que parpadee

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Ejemplo E/S Digital

• digitalWrite(pin, value). Activa o desactiva una salida digital.

int led = 13; //conecta ‘led’ al pin 13

int pin = 7; // conecta ‘pushbutton’ al pin 7

int value = 0; // variable para almacenar el valor leido

void setup()

{

pinMode(led, OUTPUT); //ajusta el pin 13 como salida

pinMode(pin, INPUT); // ajusta el pin 7 como entrada

}

void loop()

{

value = digitalRead(pin);

digitalWrite (led, value);

}

Nota: Los pines digitales 0 y 1 pueden

ser utilizados como salidas o entradas

siempre que NO se estén utilizando

para la comunicación serial

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

• Coger un cablecito y probar el código

anterior

– 1º Conectar pin7 a 5v

– 2º Se enciende?

– 3º Desconectar

– 4º Se apaga?

– Funciona bien??

– DIOS! ESTA ROTO

E/S digital

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

NO TA ROTO!!

• Los pines de entrada por defecto están

en estado de alta impedancia

• Es decir, demandan poca corriente del

circuito que muestrean.

• Esto los hace bueno para utilizarlos

con señales procedentes de sensores

• AH! Pero esto implica que son muy

susceptibles al ruido eléctrico!!

COMPORTAMIENTO ERRÁTICO!

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

En alto cuando se

presiona el botón

En bajo cuando se

presiona el botón

Y eso como yo lo arreglo??

1. E/S Digitales

2. Comunicación

Serie y Memorias

• FORZAR EL ESTADO DE UNA ENTRADA: Es decir, en vez de

dejar el cable suelto, lo que implica indeterminación,

tenerlo conectado siempre a masa (0) o a +5v (1)

• Eso se denomina resistencia pull-down o pull-up

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Profe, no tengo resistencias

• A) Pues cómprate una de 100ohm y

otra de 10K

• B) No te compres ninguna! Utiliza las

PULL-UP que integra el chip de Atmel.

1. E/S Digitales

2. Comunicación

Serie y Memorias

pinMode(pin, INPUT); // pone el pin como entrada

digitalWrite(pin, HIGH); // activa la resistencia pullup

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

• Coger un cablecito y probar el código anterior

– 1º Conectar pin7 a masa

– 2º Se apaga?

– 3º Desconectar

– 4º Se enciende?

– Funciona bien??

– DIOSSS! Que alivio!

– Nota: el 13 mejor no activar la pull-up, mejor aun,

no utilizarlo como entrada digital

E/S digital

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Ejemplo E/S digitales

/*

EJEMPLO ENTRADAS SALIDAS DIGITALES

2 EJEMPLO DEL TALLER

PARPADEA SI ACTIVA EL PIN, O FIJO CON EL PIN X

*/

boolean encendido=false;

void setup() {

pinMode(13, OUTPUT);

pinMode(7,INPUT);// switch izquierda como entrada

digitalWrite(7,HIGH);

pinMode(6, INPUT); // switch derecha como entrada

digitalWrite(6,HIGH);

}

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

void loop() {

if(digitalRead(7)==0){

encendido=true;

}

if(digitalRead(6)==0){

encendido=false;

}

parpadeo();

}

void parpadeo(){

if(encendido){

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(1000);

}else{

digitalWrite(13, HIGH);

}

}

Ejemplo con entrada digital y

funciones

1. E/S Digitales

2. Comunicación

Serie y Memorias

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicacion serie

1. E/S Digitales

2. Comunicación

Serie y Memorias

El ATMEL trae un UART, que

es capaz de controlar una

comunicación serie.

Los pines 0 y 1

corresponden a las líneas de

entrada y salida del puerto

serie a la UART.

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Conversor USB-Serial

• El arduino UNO incorpora un conversor

de puerto serie a USB basado en un

Microcontrolador ATMEGAU28

OTRO MICRO!!

Flash (Kbytes): 8 Kbytes

Pin Count: 32

Max. Operating Freq. (MHz):16 MHz

CPU: 8-bit AVR

Max I/O Pins: 22

Ext Interrupts: 20

USB Transceiver:1

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Conversor USB-Serial

• La ZUM-BT lleva un integrado

específico (no es un micro) para la

conversión

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Y por qué?

• Porque el protocolo USB y el Serie son

muy diferentes

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Interfaz Serie de Arduino

1. Existe una libreria de arduino SoftwareSerial.h que

implementa todas las operaciones (lectura, escritura) sobre el

puerto serie.

2. En el siguiente ejemplo se lee del puerto serie (que a su vez

llega del conversor usb) y se reenvía lo leido (se escribe en

el puerto) que a su vez pasa al usb

1. E/S Digitales

2. Comunicación

Serie y Memorias

#include <SoftwareSerial.h>

void setup()

{

// Open serial communications and wait for port to open:

Serial.begin(19200);

Serial.println("Hola, soy tu robot loro!");

}

void loop() // run over and over

{

if (Serial.available())

Serial.write(Serial.read());

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Nos comunicamos con el PC

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación entre robots

• Comunicación por Infrarrojos

HOLA!

HOLA!

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación Infrarrojos

• Vamos a utilizar el sensor de

infrarrojos como emisor

• Conectamos al pin 3, con 2 cables, el

módulo de infrarrojos

g

vs

gnd

3

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación por Infrarrojos

• Algunos conceptos para

entender mejor como funciona

una comunicación por

infrarrojos

– El emisor transmite la señal

modulada en una frecuencia

determinada para evitar

interferencias naturales

– Normalmente se usa 38khz

ya que no hay señales

naturales a esa frecuencia

– Cada sistema tiene su

protocolo de comunicación y

sus posibles mensajes que

deben ser decodificados por

un controlador

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Cómo le digo hola al robot?

• Envía un 0x2F5C por el infrarrojo

• Traducido en tiempos entre escalones en el

protocolo del robot es:

– 3050, 1900, 600, 400, 550, 450, 550, 900, 550,

950, 500, 450, 550, 450, 550, 450, 500, 500, 500,

950, 500, 500, 500, 500, 500, 450, 500, 500, 500,

500, 500, 950, 500, 500, 500, 500, 500, 450, 550,

450, 500, 500, 500, 500, 500, 450, 500, 500, 500,

500, 500, 450, 500, 500, 500, 1000, 500, 950,

500, 500, 500, 500, 500, 450, 550, 450, 500};

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación Infrarrojos

• Descargamos la librería de

Infrarrojos:

• http://github.com/shirriff/Arduino-

IRremote)

• (pulsamos a download ZIP)

• Creamos la carpeta IRremote en el

directorio library de arduino

• Descomprimimos el archivo y su

contenido lo copiamos en una

carpeta IRremote

• En el ID de arduino añadimos la

librería

• MÁS EN: http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Código hola infrarrojos

#include <IRremote.h> // Librería https://github.com/shirriff/Arduino-IRremote

// El pin definido por defecto en la librería para enviar códigos IR es el 3

unsigned int hola[68]={3050, 1900, 600, 850, 650, 850, 600, 350, 650, 850, 600, 850, 650, 350,

600, 400, 600, 350, 650, 850, 600, 850, 650, 850, 600, 850, 650, 850, 600, 850, 650, 350,

600, 400, 600, 350, 600, 400, 600, 400, 550, 450, 500, 450, 500, 500, 500, 500, 450, 550,

450, 500, 450, 550, 400, 1050, 450, 1050, 400, 600, 400, 550, 400, 600, 400, 600, 350};

IRsend irsend;

void setup()

{

}

void loop() {

irsend.sendRaw(hola,68,38);

delay(1500);

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Más Infrarrojos

• Quieres controlar toda tu casa

(TV,DVD,ECT..) desde tu robot??

http://robotstyles.blogspot.com.es/2014/12/usa-tu-sensor-ir-

siguelineas-como-un.html

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación Infrarrojos

(recepción)

• Se debe utilizar un receptor a 38khz

• Conectamos al pin 11, con 3 cables, el

módulo de infrarrojos

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Ejemplo: Muestra por el puerto serie lo

que recibe por el infrarrojo#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()

{

Serial.begin(9600);

irrecv.enableIRIn(); // Start the receiver

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX);

irrecv.resume(); // Receive the next value

}

}

Comunicación Infrarrojos

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

• Enciende

o apaga

un led

pulsando

el botón 1

y 2

Comunicación Infrarrojos

#include <IRremote.h>

int led = 13;

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()

{

pinMode(led, OUTPUT);

Serial.begin(9600);

irrecv.enableIRIn(); // Start the receiver

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX);

if(results.value==16738455)

digitalWrite(led, HIGH);

if(results.value==16750695)

digitalWrite(led, LOW);

irrecv.resume(); // Receive the next value

}

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Comunicación BLUETOOTH

• Nuestro Robot trae un módulo

BC417 que convierte la señal

serie en bluetooth

• Esto nos va a permitir

conectarlo a un PC o a un

dispositivo móvil, como por

ejemplo ANDROID

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Configuración Bluetooth

• La placa ZUM BT-328 está provista de módulo Bluetooth y conexión

puerto serie mediante USB (multiplexada) directamente al módulo

UART del microcontrolador ATmega. El módulo Bluetooth viene con

una configuración de fábrica, pero su reconfiguración esta disponible

para el usuario a través de tres conmutadores.

•Conmutador 1: marcado con una P de

“Power”, apaga y enciende el módulo

Bluetooth.

•Conmutador 2 y 3: Marcados como AT.

Cuando están conectados, crean una

derivación entre el puerto serie del USB y el

puerto serie del módulo Bluetooth,

permitiendo el acceso directo a la

configuración del Bluetooth desde el USB. -Para su uso normal, :

Conmutador 1: ON

Conmutador 2: OFF

Conmutador 3: OFF-Ver más en: http://diwo.bq.com/zum-bt-

328-configuracion-del-bluetooth-mediante-

comandos-at/#sthash.V59NI6yF.dpuf

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Configuración Bluetooth

• Todas las placas vienen con el mismo nombre… debemos cambiarles

el nombre para poder saber cual es el nuestro. Esto se hace

programando el módulo mediante comandos AT– Pon todos los conmutadores en ON y conecta la placa al ordenador mediante el

cable USB.

– Dentro de la IDE de Arduino, abre un Monitor Serial a una velocidad de

comunicación de 19200 baudios y en el modo Ambos NL & CR (nueva línea y

retorno de carro).

(actualización para la nueva zumbt): 19200 baudios y en el modo retorno de carro.

– Comprueba la comunicación con el módulo Bluetooth enviando por la línea de

comandos, el texto AT. El módulo Bluetooth debería responder con un OK.

(actualización para la nueva zumbt): devolverá: Hello! I'm the ZUM Bluetooth

module!.

– Si quieres cambiar el nombre de tu módulo Bluetooth, el que muestra a otros

dispositivos, envía comando AT+NAME#### donde #### es el nombre que quieras.

(actualización para la nueva zumbt) AT+NAME=#### donde #### es el nombre que

quieras.

• - Mas en: http://diwo.bq.com/zum-bt-328-configuracion-del-bluetooth-

mediante-comandos-at/#sthash.V59NI6yF.dpuf

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

BLUETOOTH- Configuración (si

tenemos el módulo externo)

• Primero debemos

configurar nuestro

modulo. Pasos

1º Abrimos el programa

“configuración_bluetooth_

croma2014”

2º Cambiamos el nombre de

nuestro bluetooth (por

ejemplo robot_paquito) y

el pin number.

3º Subimos el programa a

nuestro arduino con el

bluetooth desconectado

const int LED_PIN = 13;

int randomValue = 0;

// 1000 ms of no data transmission required before and after the escape

sequence

int cmdDelay = 1000;

// Change these two paramaters to anything you want

int pin = 4444;

char* name = "Robot_ASVAZQUEZ";

void setup()

{

pinMode(LED_PIN, OUTPUT);

// Turn on LED to signal programming start

digitalWrite(LED_PIN, HIGH);

Serial.begin(9600);

delay(cmdDelay);

Serial.print("AT");

delay(cmdDelay);

Serial.print("AT+PIN");

Serial.print(pin);

delay(cmdDelay);

Serial.print("AT+NAME");

Serial.print(name);

delay(cmdDelay);

// Turn off LED to signal programming end

digitalWrite(LED_PIN, LOW);

}

// This part is not doing anything useful

void loop() {

if (Serial.available()) {

Serial.read();

randomValue = random(10,20);

Serial.println(randomValue);

}

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

3º Desconectamos el cable

usb del arduino

4º Conectamos el USB

5º Alimentamos el Arduino

con las pilas

6º Le damos al reset

6º Esperamos a que el led

del arduino se apague

7º Buscamos el dispositivo

bluetooth con nuestro

dispositivo ANDROID y lo

vinculamos (habrá que

ponerle el número pin)

8º Listo para ser usado!

BLUETOOTH- Configuración (si

tenemos el módulo externo)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Parte 2. Amplicación

del Micro(cerebro) del

Robot

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Solución:

• Arduino + Android=

– Potencia de los procesadores móviles de

última generación

– Sensores de las tablets y smartphones

(acelerometros, giroscopos, GPS,

camaras)

– Conexión a internet

+ =

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Programación de

dispositivos móviles• Apple

– iOS SDK

• Windows

– Visual Studio

• Android

– App Inventor Para niños (bloques)

– Protocoder No tan para niños (jscript)

– Developer’s Toolkit

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Robban AnderssonApp Inve

nto

rO

tros

lengu

ajes

APP INVENTOR

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

APPINVENTOR• Programación sencilla de dispositivos móviles...

Hasta un niño sabría!

• Gratis. Basado en 3 componentes:

– Un progama web bajo servicio google en el lado del

computador para realizar la programación(HACE FALTA

UNA CUENTA GOOGLE)

– Una aplicación en el dispositivo android para la

comunicación con el PC

– Un simulador en el caso de no disponer de dispositivo

android

• Multitud de tutoriales:

– http://appinventor.mit.edu/explore/ai2/tutorials.html

– https://sites.google.com/site/appinventormegusta/presentac

iones-google-docs

– Y muchos más!

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

(NO)Instalación

(LADO PC)• Accede a la página de appinventor

http://appinventor.mit.edu/

Pulsar

(pedirá

entrar

con una

cuenta

google)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

(NO)Instalación

(LADO PC)Explica

como

configurar

el

dispositivo

android

Explica

como

configurar

un

simulador

(en el caso

de no tener

dispositivo

android)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

(NO) Instalación

(lado PC)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Instalación

(lado Android)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Instalación

(lado Android)

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Mis Proyectos (My Projects)

En esta herramienta podemos realizar un

seguimiento de nuestros proyectos.

Accedemos a Mis

Proyectos cuando

iniciamos el servicio

por primera vez o

desde el botón My

Projects

Para crear un

nuevo proyecto

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

Selecciona los

componentes en la

paleta y

arrástralos al

visor para

incluirlos en tu

App

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

Dispón los

componentes en el

visor para

establecer el

aspecto de tu App

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

A medida que

incorpores

componentes a la

App se irán

añadiendo a la

lista de

componentes

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

En el panel media

añadimos imágenes,

sonidos o vídeos a

nuestra App

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

Selecciona un

componente en la lista

de componentes para

cambiar sus propiedades

en el panel de

propiedades

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Diseñador (Designer)

La herramienta de diseño nos permite

seleccionar los componentes de la App y

definir el entorno de usuario de la misma.

Para pasar al

editor de

bloques

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Editor de Bloques (Blocks)

El comportamiento de la App se programa mediante

bloques o piezas en el editor de bloques.

Encaja las piezas

como en un puzle para

establecer el

comportamiento de la

app

Arrastra los

bloques para

utilizarlos en el

programa

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Editor de Bloques (Blocks)

El comportamiento de la App se programa mediante

bloques o piezas en el editor de bloques.

Aquí se encuentran los

bloques de uso general

Aquí están los bloques

correspondientes a los

componentes incluidos

en la app

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

Hola gatito …. En clase

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

BLUETOOTH- AppInventor

Crearemos una APP con los

siguientes componentes:

- 3 botones

- 1 cliente blutooth

El botón 1 activará el cliente

bluetooth

El botón 2 mandará un

mesaje al robot para

encender el led

El botón 2 mandará un

mesaje al robot para

apagar el led

LED_CROMA_2015.aia

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

BLUETOOTH- AppInventor

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

BLUETOOTH- AppInventor_Arduino

/*

conexion con appinventor. LED_CROMA_2016.aia

*/

#include <SoftwareSerial.h>

char comando;

int led = 13;

void setup()

{

// Open serial communications and wait for port to open:

Serial.begin(19200);

pinMode(led, OUTPUT);

}

void loop() // run over and over

{

if (Serial.available())

{

comando=Serial.read();

//Según el dato recibido

switch (comando){

case '1':

digitalWrite(led, HIGH);

break;

case '0':

digitalWrite(led, LOW);

break;

}

}

}

Hacemos un

programita en

Arduino que esté

a la escucha del

puerto serie.

Si recibe un “1”

enciende el led

Si recibe un “0” lo

apaga

CRoMA 2010 por Francisco Ramos y Andrés S. VázquezCRoMA 3D 2016 E.T.S.I.I Ciudad Real UCLM

TAREA

• (Si da tiempo en clase) Dile al robot

que diga hola al humanoide

• En casa: Une el programa de enviar

por IR con el programa de recibir por

bluetooth para cambiar de canal de la

tele con el móvil