Está en la página 1de 11

CAPÍTULO 12:

SIGUE LA LUZ
Sigue la luz
En la introducción del capítulo anterior te hablé de la
potencialidad que tiene la fotorresistencia. Ahora vamos
a poner un poco en práctica este sensor con una diverti-
da actividad. Nuestro robot va a girar en círculos en un
espacio oscuro, y cuando reciba la luz de nuestra linter-
na saldrá hacia ella a toda velocidad.

Este mecanismo es similar al de un girasol, quien de


noche se agacha y de día siempre mira hacia el gran
astro luminoso.

Consejo:
Calibrá las fotorresistencias, a través de la
programación, tomando los valores de la
habitación a oscuras, para tener un buen
umbral de trabajo.
Ensamble
A continuación veremos la estructura y componentes. Las fotorresistencias irán midiendo
valores en forma permanente, mientras que los motores realizan diferentes movimientos
dependiendo la luz que reciba cada sensor.

Materiales:
-Estructura de seguidor de línea
-2 fotorresistencias
-Conjunto D-E

Pasos:
El conjunto D-E lo abulonamos al
chasis A, y colocamos en las ranuras
de D las fotorresistencia, separadas por
la pieza E.

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
Circuito electrónico
Finalmente observamos las conexiones de nuestro circuito electrónico.

RESET
ICSP2
AREF

TX
RX
Componentes electrónicos:

L
GND
13 -2 motores
IOREF
12 -Puente H
RESET Arduino
11 -2 resistencias de 10kΩ
3V3
10 -2 fotorresistencias
5V

GND
9 -4 cables M-M
8
-14 cables M-H
POWER

GND
TM

DIGITAL (PWM=

VIN 7
6
A0 5
A1 4
A2 3
ANALOG IN

A3 2
)

A4 TX0 1
ICSP
ON
1

A5 RX0 0
30

25

20

15

10

1
A B C D E

A B C D E
F G H

F G H

Motor A Motor B
I

I
J

J
30

25

20

15

10

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
Código de programación
Desarrollaremos el código de programación, según los datos obtenidos en el experimento
anterior, vamos a diseñar nuestro seguidor de luz aplicaremos un principio similar al del segui-
dor de línea.

La información la vamos a leer con analogRead en las entradas A0 y A1. Dependiendo de la cantidad de luz va a ser
el valor leído. Según nuestras mediciones los valores de los sensores cuando hay poca luz o no hay luz los valores
son 800. Si están bien iluminada menores a 500. Entonces si los dos valores son menores a 600 andarán los dos
motores. (-II-). Si el sensor derecho detecta un valor superior a 600 y el doblaremos a la izquierda (-IX-). Si el sensor
izquierdo detecta un valor superior a 600 doblaremos a la derecha (-XI-). Si ambos sensores detectan valores supe-
riores a 600 giramos para buscar el haz de luz.

1 const int ledTest = 13; //Variables de salida, entradas, motores y datos


2 const int ldrIzq = 0; de fotoresistencias.
3 const int ldrDer = 1;
4
5 const int AIA = 3;
6 const int AIB = 11;
7 const int BIA = 9;
8 const int BIB = 10;
9
10 int ldrValDer = 0;
11 int ldrValIzq = 0;
12
13 void setup() {
14
15 Serial.begin(9600);
16 pinMode(ledTest, OUTPUT);
17 digitalWrite(ledTest, LOW); //Inicio de setup de entradas y salidas.
18
19 saludoInicial(); //Saludo inicial a definir abajo.
20 }
21
22 void loop() {
23
24 ldrValIzq = analogRead(ldrIzq); //Leemos los valores de ambas fotorresisten-
25 ldrValDer = analogRead(ldrDer); cias, para definir los condicionantes..
26
27 if (refDer < 600 && refIzq < 600) { * (-II-) Ambos sensores tienen luz vamos hacia
28 adelante(); “adelante”
29 }
30 else if (refDer < 600 && refIzq > 600) { * (-XI-) Sensor izquierdo no recibe luz doblamos a
31 derecha(); la “derecha”
32 delay(20);
33 }
34 else if (refDer > 600 && refIzq < 600) { * (-IX-) Sensor izquierdo no recibe luz doblamos a
35 izquierda(); la “izquierda”
36 delay(20);
37 }
38 else (ldrValIzq > 600 || ldrValDer > 600) * (-XX-) Si ambos valores son superiores a 600
39 derecha(); no hay luz y vamos a buscar doblando a la “dere-
40 delay(20); cha”
41 }
42
43 void saludoInicial() { //Definimos “Saludo inicial”
44
45 digitalWrite(ledTest, HIGH);
46 delay(500);
47 digitalWrite(ledTest, LOW);
48 delay(500);
Cap. 12 - Sigue la luz
Curso de electrónica y programación Arduino
49 digitalWrite(ledTest, HIGH);
50 delay(500);
51 digitalWrite(ledTest, LOW);
52 delay(500);
53 digitalWrite(ledTest, HIGH);
54 delay(500);
55 digitalWrite(ledTest, LOW);
56 delay(500);
57 }
58
59 void adelante() //Definimos “adelante”
60 {
61 digitalWrite(AIA, HIGH);
62 digitalWrite(AIB, LOW);
63 digitalWrite(BIA, HIGH);
64 digitalWrite(BIB, LOW);
65 }
66
67 void derecha() //Definimos “derecha”
68 {
69 digitalWrite(AIA, HIGH);
70 digitalWrite(AIB, HIGH);
71 digitalWrite(BIA, HIGH);
72 digitalWrite(BIB, LOW);
73 }
74
75 void izquierda() //Definimos “izquierda”
76 {
77 digitalWrite(AIA, HIGH);
78 digitalWrite(AIB, LOW);
79 digitalWrite(BIA, HIGH);
80 digitalWrite(BIB, HIGH);
81 } V

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
ACTIVIDADES
Y EJERCITACIÓN
Cap. 12: Actividades complementarias
En base a los contenidos vistos en el “Capítulo 12: Sigue la luz” realiza las siguientes
actividades complementarias.

Actividad 1
Desafío práctico:
Tomando como base el ensamble y circuito desarrollados en el capítulo 12, orienta las
fotorresistencias hacia arriba y agrega los leds blancos al robot. El desafío consiste en que, al
llegar a pasar por un túnel, el robot continúe su camino, pero encienda las luces al 100%.

Nota: Para llevar a cabo esta actividad necesitarás poder recrear la sensación de un túnel. Puedes
armarlo con una caja de cartón cortada en los extremos, con una fila de sillas, una mesa, la cama, etc.

Observa los valores del monitor serie para poder configurar cuánto registran las
fotorresistencias a la luz y cuánto a la sombra y así realizar la programación adecuada.

* Las ilustraciones son esquemáticas.

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
Cap. 12: Respuestas
Actividad 1
const int AIA = 3;
const int AIB = 11;
const int BIA = 9;
const int BIB = 10;

const int ledBlancoIzquierda = 4;


const int ledBlancoDerecha = 6;

const int ldrIzquierda = A0;


const int ldrDerecha = A1;

int ldrValDerecha = 0;
int ldrValIzquierda = 0;

void setup() {
pinMode(AIA, OUTPUT);
pinMode(AIB, OUTPUT);
pinMode(BIA, OUTPUT);
pinMode(BIB, OUTPUT);
pinMode(ledBlancoIzquierda, OUTPUT);
pinMode(ledBlancoDerecha, OUTPUT);
pinMode(ldrIzquierda, INPUT);
pinMode(ldrDerecha, INPUT);

analogWrite(AIA, 0);
analogWrite(AIB, 0);
analogWrite(BIA, 0);
analogWrite(BIB, 0);

Serial.begin(9600);
}

void loop() {
ldrValIzquierda = analogRead(ldrIzquierda);
delay(100);
ldrValDerecha = analogRead(ldrDerecha);
delay(100);

adelante();
Serial.print(ldrValIzquierda);
Serial.print(";");
Serial.println(ldrValDerecha);

if (ldrValIzquierda > 600 && ldrValDerecha > 600 ) {


digitalWrite(ledBlancoIzquierda, HIGH);
digitalWrite(ledBlancoDerecha, HIGH);
}

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
else {
digitalWrite(ledBlancoIzquierda, LOW);
digitalWrite(ledBlancoDerecha, LOW);
}

delay(200);
}

void adelante() {
analogWrite(AIA, 255);
analogWrite(AIB, 0);
analogWrite(BIA, 255);
analogWrite(BIB, 0);
}

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino
Circuito electrónico en símbolos

3v 5V Vin D13

RST D12

AREF D11
D10 10KΩ
IO REF
N/C D9
D8
Pines digitales

ARDUINO D7

UNO D6
D5
A0 D4 10KΩ
Pines analógicos

A1 D3
A2 D2
A3 D1
A4 D0
A5 SCL
SDA
GND

MOTOR
DC
B-A B-B GND 5V A-A A-B

B-A
B-B

PUENTE H
A-A
A-B

MOTOR
DC

Cap. 12 - Sigue la luz


Curso de electrónica y programación Arduino

También podría gustarte