Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero...

26
ETSII UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Sesión 3 (Práctica) Sensores Actuadores

Transcript of Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero...

Page 1: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Sesión 3 (Práctica)

• Sensores

• Actuadores

Page 2: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Índice

1. Sensores a. Infrarrojos b. Ultrasonidos

2. Actuadores a. Servomotor b. Motores

3. Comunicación a. Infrarrojos (mando a distancia)

a. Control de actuadores

b. Bluetooth (AppInventor) a. Sensores adicionales

Page 3: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Referencia

• Para dudas referentes a cómo usar una función o a qué funciones hay disponibles – http://arduino.cc/en/Reference/HomePage

Page 4: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Sensores

• Infrarrojos – Tres módulos KY-033 – Emisor-Receptor de infrarrojos – Potenciómetro para sensibilidad del sensor

• Resistencia variable de Puente de Wheatstone

– Pines • Tierra (G) • Alimentación (V+) • Señal (S)

Page 5: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Sensores

• Infrarrojos (Instalación y conexión) – No hay hoja de características en internet – Suelen ser sensores analógicos

• Conectamos los pines de señal del sensor a los pines A3, A4 y A5 de la Sensor Shield

Page 6: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Infrarrojos Código Lecturas Analógicas

#include <SoftwareSerial.h>

#define IR_LEFT 3

#define IR_CENTER 4

#define IR_RIGHT 5

int L,C,R;

void setup() {

Serial.begin (57600);

}

void loop() {

//read the input

L = analogRead(IR_LEFT);

C = analogRead(IR_CENTER);

R = analogRead(IR_RIGHT);

//print the values

Serial.print (L);

Serial.print(",");

Serial.print (C);

Serial.print(",");

Serial.println (R);

}

Sensores

• ¿Qué lecturas tenemos en el terminal Serie?

• ¿Qué ocurre si ajustamos el potenciómetro?

Page 7: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Infrarrojos Código Lecturas Digitales (cambiar pines a D9, D10 y D11)

#include <SoftwareSerial.h>

#define IR_LEFT 11

#define IR_CENTER 10

#define IR_RIGHT 9

int L,C,R;

void setup() {

Serial.begin (57600);

pinMode (IR_LEFT,INPUT);

pinMode (IR_CENTER,INPUT);

pinMode (IR_RIGHT,INPUT);

}

void loop() {

//read the input

L = digitalRead(IR_LEFT);

C = digitalRead(IR_CENTER);

R = digitalRead(IR_RIGHT);

//print the values

Serial.print (L);

Serial.print(",");

Serial.print (C);

Serial.print(",");

Serial.println (R);

}

Sensores

• ¿Qué tenemos que hacer para seguir una línea?

Page 8: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Sensores

• Ultrasonidos – Sensor HC-SR04 – Cuatro pines

• Tierra (GND) • Alimentación (VCC) • Disparador o trigger (Trig) • Receptor (Echo)

– Especificaciones • Ángulo efectivo: 15º • Rango distancia: 2-500 cm • Resolución: 1 cm • Frecuencia del

ultrasonido: 40 kHz

Page 9: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Sensores

• Ultrasonidos (Instalación y conexión) – ftp://imall.iteadstudio.com/Modules/IM120628012_

HC_SR04/DS_IM120628012_HC_SR04.pdf

– Necesita dos pines digitales: trigger envía un pulso, mientras que echo lo lee • Conectamos el pin de trigger a D9 y el echo a D10

Page 10: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Librería Ultrasonic

• Fichero de cabecera – http://imall.iteadstudio.com/electronic-

components/sensor/distance-sensors/im120628012.html /* Ultrasonic.h - Library for HR-SC04 Ultrasonic Ranging Module.

Created by ITead studio. Alex, Apr 20, 2010.

iteadstudio.com */

#ifndef Ultrasonic_h

#define Ultrasonic_h

#define CM 1

#define INC 0

class Ultrasonic

{

public:

Ultrasonic(int TP, int EP);

long Timing();

long Ranging(int sys);

private:

int Trig_pin;

int Echo_pin;

long duration,distance_cm,distance_inc;

};

#endif

Page 11: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

• Ultrasonidos • Código comprobación de funcionamiento

#include <Ultrasonic.h>

#define US_TRIG 9

#define US_ECHO 10

Ultrasonic ultrasonic(US_TRIG, US_ECHO);

void setup() {

Serial.begin(57600);

}

void loop() {

Serial.print(ultrasonic.Ranging(CM));

Serial.println(" cm");

delay(100);

}

Sensores

• ¿Vale para algo el retardo del final? Quítalo a ver qué pasa

• Une este código al de IR para mostrar ambas medidas

Page 13: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Actuadores

• Servomotor – Tower Pro SG90

• Peso: 9g • Dimensiones: 23x12.2x29mm • Torque: 1.8kg/cm(4.8V) • Velocidad de operación: 0.1sec/60degree(4.8v) • Voltaje de funcionamiento: 4.8V • Rango de temperaturas: 0℃ – 55℃ • Rango de giro: 180º

– Giro de barrido del sensor de ultrasonidos

Page 14: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Actuadores

• Servomotor – Librería standard Servo.h. Atención:

• “The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins.”

– Sólo necesita una salida digital • Conectar en pin D8 (naranja)

Page 15: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Control de posición Ejemplo knob modificado para usar puerto serie

#include <Servo.h>

#include <SoftwareSerial.h>

#define SERVO_US 8

Servo myservo; // servo object

int val; // value from serial

void setup()

{

// Indica el pin del servo

myservo.attach(SERVO_US);

Serial.begin(57600);

Serial.println("Ang(0-180)");

}

void loop()

{

if (Serial.available())

{

val = Serial.parseInt();

Serial.print("Recibido: ");

Serial.println(val, DEC);

myservo.write(val);

}

}

Actuadores

• Añade un retardo que tenga en cuenta cuánto tiempo tardará el servo en llegar a la posición indicada. Pista: deberás hacer uso de la función myservo.read()

Page 16: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Barrido Ejemplo sweep modificado para no bloquear tareas mientras barre

#include <Servo.h>

#include <SoftwareSerial.h>

#define SERVO_US 8 // Pin servo

Servo myservo; // servo object

int val = 0;

int inc = 1;

void setup()

{

myservo.attach(SERVO_US);

}

void loop()

{

myservo.write(val);

delay(5);

// Vemos si hay que cambiar

la direccion

if (val==180) {inc = -1;}

if (val==0) {inc = 1;}

// Actualizamos la posicion

val += inc;

}

Actuadores

• Monitoriza la posición del servo por puerto serie • Añade el sensor de rango para encontrar el ángulo en que

se encuentra el objeto más cercano (Difícil)

Page 17: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Actuadores

• Motores DC – Polaridad de los motores

• No provoca daños en el motor, pero cambia el sentido de giro

– Indicar movimiento continuo hacia delante • Si alguno de los motores gira hacia atrás, tiene la

polaridad al revés

– ¡¡¡Sin colocar aún las ruedas!!!

Page 18: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Motores (conexión)

Sensor Shield

Motor Controller

D2 IN4 D5 (PWM) ENB

D4 IN3 D3 IN2

D6 (PWM) ENA D7 IN1

Cuidado con los colores: Marrón D5 Amarillo D3

Page 19: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Comprobación de polaridad Movimiento de los cuatro motores en el mismo sentido

// Motor A

#define DIR1MA 7

#define DIR2MA 3

#define ENABLEA 6

// Motor B

#define DIR1MB 4

#define DIR2MB 2

#define ENABLEB 5

void setup ()

{

pinMode (DIR1MA, OUTPUT);

... // Todos en modo OUTPUT

pinMode (ENABLEB, OUTPUT);

}

void loop ()

{

avanza();

}

void avanza()

{

digitalWrite(DIR1MA,LOW);

digitalWrite(DIR2MA,HIGH);

digitalWrite(DIR1MB,LOW);

digitalWrite(DIR2MB,HIGH);

digitalWrite(ENABLEA,HIGH);

digitalWrite(ENABLEB,HIGH);

}

void retrocede()

{

digitalWrite(DIR1MA,HIGH);

digitalWrite(DIR2MA,LOW);

digitalWrite(DIR1MB,HIGH);

digitalWrite(DIR2MB,LOW);

digitalWrite(ENABLEA,HIGH);

digitalWrite(ENABLEB,HIGH);

}

Actuadores

Page 20: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Actuadores

• Motores DC – Ejecuta el código y comprueba la polaridad – Coloca las ruedas y asegúrate de que no rozan

con la estructura – Antes de poner el robot en el suelo (se

estrellaría), cambia el programa anterior para 1. Mover el robot alternativamente hacia delante y

hacia atrás cada segundo 2. Mover el robot describiendo un cuadrado

1. Añadir dos funciones para girar a izquierda y a derecha

2. Calcular el tiempo que tarda en girar 90º en cada sentido

Page 21: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Actuadores

• Motores DC – Control de velocidad mediante modulación de

ancho de pulso (PWM) – Arduino no tiene salidas

analógicas (caras) – ENA controla la velocidad

del motor A – ENB controla la velocidad

del motor B – Duty Cycle (porcentaje de

ciclo en nivel alto)

Page 22: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Motores DC Ejemplo usando salidas PWM

// Motor A

#define DIR1MA 7

#define DIR2MA 3

#define ENABLEA 6

// Motor B

#define DIR1MB 4

#define DIR2MB 2

#define ENABLEB 5

void setup ()

{

pinMode (DIR1MA, OUTPUT);

... // Todos en modo OUTPUT

}

void loop ()

{

avanza(180); delay(1000);

retrocede(180); delay(1000);

}

void avanza(int speed)

{

digitalWrite(DIR1MA,LOW);

digitalWrite(DIR2MA,HIGH);

digitalWrite(DIR1MB,LOW);

digitalWrite(DIR2MB,HIGH);

analogWrite(ENABLEA,speed);

analogWrite(ENABLEB,speed);

}

void retrocede(int speed)

{

digitalWrite(DIR1MA,HIGH);

digitalWrite(DIR2MA,LOW);

digitalWrite(DIR1MB,HIGH);

digitalWrite(DIR2MB,LOW);

analogWrite(ENABLEA,speed);

analogWrite(ENABLEB,speed);

}

Actuadores

Page 23: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Motores DC Ejemplo con velocidades variables: ¿Qué hace el programa?

// Motor A

...

unsigned long time;

int speed;

int dir;

void setup ()

{

pinMode (DIR1MA, OUTPUT);

...

time = millis ();

speed = 0;

dir = 1;

}

void loop ()

{

analogWrite (ENABLEA, speed);

analogWrite (ENABLEB, 255-speed);

// set direction

if (1 == dir) {

digitalWrite (DIR1MA, LOW);

digitalWrite (DIR2MA, HIGH);

digitalWrite (DIR1MB, HIGH);

digitalWrite (DIR2MB, LOW);

}

else {

digitalWrite (DIR1MA, HIGH);

digitalWrite (DIR2MA, LOW);

digitalWrite (DIR1MB, LOW);

digitalWrite (DIR2MB, HIGH);

}

if (millis () - time> 3000) {

time = millis ();

speed += 20;

if (speed> 255)

{speed = 0;}

if (1 == dir)

{dir = 0;}

else

{dir = 1;}

}

}

Actuadores

Page 24: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Infrarrojos (Mando a distancia): Control de movimiento // Librerias

#include <IRremote.h>

#include <Servo.h>

// Motor A

#define DIR1MA 7

#define DIR2MA 3

#define ENABLEA 6

// Motor B

#define DIR1MB 4

#define DIR2MB 2

#define ENABLEB 5

// Ultrasonidos

#define US_SERVO 8

// Infrarrojos (PINES ANALOGICOS)

#define IR_L 3

#define IR_C 4

#define IR_R 5

// Otros pines

#define LED 13

#define RECV_PIN 11

// Variables IR

IRrecv irrecv(RECV_PIN);

decode_results results;

long lectura=0;

// Variables US

Servo myservo;

void setup()

{

pinMode(LED, OUTPUT);

... //Todos los pines digitales a OUTPUT

myservo.attach(US_SERVO);

Serial.begin(57600);

Serial.println("Aceptamos barco:");

irrecv.enableIRIn(); // Start receiver

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX);

if (results.value!=0xFFFFFFFF) {

lectura = results.value;

}

switch(lectura) {

case 0xFF6897:

digitalWrite(LED, HIGH);

break;

case 0xFF9867:

digitalWrite(LED, LOW);

break;

case 0xFF629D:

avanza(200);

delay(200);

break;

default:

detente();

diqueno(3);

}

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

}

}

void avanza(int vel) { ... }

void detente() { ... }

void diqueno(int veces) { ... }

Comunicación

Page 25: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Proyecto

• Navegación autónoma – El robot debe moverse hacia delante,

buscando obstáculos con el sensor de ultrasonidos

– Si encuentra un obstáculo, retrocede ligeramente y gira 90º

– El robot sigue moviéndose hacia delante

Page 26: Sesión 3 (Teoría) · ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014 Índice 1. Sensores a. Infrarrojos b. Ultrasonidos 2. Actuadores a. Servomotor

ETSII – UCLM Curso de Robótica Móvil con Arduino, 3ª Edición Febrero 2014

Fin de la tercera

sesión de práctica

FIN