Vous êtes sur la page 1sur 26

Sesin 3 (Prctica)

Sensores
Actuadores

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

ndice
1. Sensores
a. Infrarrojos
b. Ultrasonidos

2. Actuadores
a. Servomotor
b. Motores

3. Comunicacin
a. Infrarrojos (mando a distancia)
a. Control de actuadores

b. Bluetooth (AppInventor)
a. Sensores adicionales
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Referencia
Para dudas referentes a cmo usar una
funcin o a qu funciones hay disponibles
http://arduino.cc/en/Reference/HomePage

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Infrarrojos
Tres mdulos KY-033
Emisor-Receptor de infrarrojos
Potencimetro para sensibilidad del sensor
Resistencia variable de Puente de Wheatstone

Pines
Tierra (G)
Alimentacin (V+)
Seal (S)

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Infrarrojos (Instalacin y conexin)
No hay hoja de caractersticas en internet
Suelen ser sensores analgicos
Conectamos los pines de seal del sensor a los
pines A3, A4 y A5 de la Sensor Shield

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Infrarrojos
Cdigo Lecturas Analgicas
#include <SoftwareSerial.h>

#define IR_LEFT
3
#define IR_CENTER 4
#define IR_RIGHT 5

void loop() {
//read the input
L = analogRead(IR_LEFT);
C = analogRead(IR_CENTER);
R = analogRead(IR_RIGHT);

int L,C,R;

//print the values


Serial.print (L);
Serial.print(",");
Serial.print (C);
Serial.print(",");
Serial.println (R);

void setup() {
Serial.begin (57600);
}
}

Qu lecturas tenemos en el terminal Serie?


Qu ocurre si ajustamos el potencimetro?
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Infrarrojos
Cdigo Lecturas Digitales (cambiar pines a D9, D10 y D11)
#include <SoftwareSerial.h>

#define IR_LEFT
11
#define IR_CENTER 10
#define IR_RIGHT
9

void loop() {
//read the input
L = digitalRead(IR_LEFT);
C = digitalRead(IR_CENTER);
R = digitalRead(IR_RIGHT);

int L,C,R;
void setup() {
Serial.begin (57600);
pinMode (IR_LEFT,INPUT);
pinMode (IR_CENTER,INPUT);
pinMode (IR_RIGHT,INPUT);
}

//print the values


Serial.print (L);
Serial.print(",");
Serial.print (C);
Serial.print(",");
Serial.println (R);
}

Qu tenemos que hacer para seguir una lnea?


ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Ultrasonidos
Sensor HC-SR04
Cuatro pines

Tierra (GND)
Alimentacin (VCC)
Disparador o trigger (Trig)
Receptor (Echo)

Especificaciones

ETSII UCLM

ngulo efectivo: 15
Rango distancia: 2-500 cm
Resolucin: 1 cm
Frecuencia del
ultrasonido: 40 kHz
Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Ultrasonidos (Instalacin y conexin)
ftp://imall.iteadstudio.com/Modules/IM120628012_
HC_SR04/DS_IM120628012_HC_SR04.pdf

Necesita dos pines digitales: trigger enva un


pulso, mientras que echo lo lee
Conectamos el pin de trigger a D9 y el echo a D10

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Librera Ultrasonic
Fichero de cabecera
http://imall.iteadstudio.com/electroniccomponents/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
ETSII UCLM
Curso de Robtica Mvil con Arduino, 3 Edicin
Febrero 2014

Sensores
Ultrasonidos
Cdigo comprobacin 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);
}

Vale para algo el retardo del final? Qutalo a ver qu pasa


Une este cdigo al de IR para mostrar ambas medidas
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Sensores
Por si se os queda corto
http://dx.com/p/arduno-37-in-1-sensormodule-kit-black-142834 (36,28)

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Servomotor
Tower Pro SG90

Peso: 9g
Dimensiones: 23x12.2x29mm
Torque: 1.8kg/cm(4.8V)
Velocidad de operacin: 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

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Servomotor
Librera standard Servo.h. Atencin:
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.

Slo necesita una salida digital


Conectar en pin D8 (naranja)

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Control de posicin
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);
}
}

Aade un retardo que tenga en cuenta cunto tiempo


tardar el servo en llegar a la posicin indicada. Pista:
debers hacer uso de la funcin myservo.read()
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Barrido
Ejemplo sweep modificado para no bloquear tareas mientras barre
#include <Servo.h>
#include <SoftwareSerial.h>
void loop()
#define SERVO_US 8 // Pin servo {
myservo.write(val);
Servo myservo; // servo object
delay(5);
// Vemos si hay que cambiar
int val = 0;
la direccion
int inc = 1;
if (val==180) {inc = -1;}
if (val==0)
{inc = 1;}
void setup()
// Actualizamos la posicion
{
val += inc;
myservo.attach(SERVO_US);
}
}

Monitoriza la posicin del servo por puerto serie


Aade el sensor de rango para encontrar el ngulo en que
se encuentra el objeto ms cercano (Difcil)
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Motores DC
Polaridad de los motores
No provoca daos en el motor, pero cambia el
sentido de giro

Indicar movimiento continuo hacia delante


Si alguno de los motores gira hacia atrs, tiene la
polaridad al revs

Sin colocar an las ruedas!!!

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Motores (conexin)
Cuidado con
los colores:
Marrn D5
Amarillo D3

Sensor
Motor
Shield Controller
D2
IN4
D5 (PWM)
ENB
D4
IN3
D3
IN2
D6 (PWM)
ENA
D7
IN1
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Comprobacin 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();
}
ETSII UCLM

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);
}

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Motores DC
Ejecuta el cdigo y comprueba la polaridad
Coloca las ruedas y asegrate de que no rozan
con la estructura
Antes de poner el robot en el suelo (se
estrellara), cambia el programa anterior para
1. Mover el robot alternativamente hacia delante y
hacia atrs cada segundo
2. Mover el robot describiendo un cuadrado
1.
2.

ETSII UCLM

Aadir dos funciones para girar a izquierda y a


derecha
Calcular el tiempo que tarda en girar 90 en cada
sentido

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
Motores DC
Control de velocidad mediante modulacin de
ancho de pulso (PWM)
Arduino no tiene salidas
analgicas (caras)
ENA controla la velocidad
del motor A
ENB controla la velocidad
del motor B
Duty Cycle (porcentaje de
ciclo en nivel alto)
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
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);
}
ETSII UCLM

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);
}

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Actuadores
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);
}
ETSII UCLM

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;}
}

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Comunicacin
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);

ETSII UCLM

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) { ... }

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Proyecto
Navegacin autnoma
El robot debe moverse hacia delante,
buscando obstculos con el sensor de
ultrasonidos
Si encuentra un obstculo, retrocede
ligeramente y gira 90
El robot sigue movindose hacia delante

ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

FIN
Fin de la
tercera
sesin de
prctica
ETSII UCLM

Curso de Robtica Mvil con Arduino, 3 Edicin

Febrero 2014

Vous aimerez peut-être aussi