View
212
Download
0
Category
Preview:
Citation preview
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
(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
Recommended