Curso Arduino PDF
Curso Arduino PDF
Programación
ARDUINO
(Publico en general)
Nombre:
Calle sucre Nº 749 entre 16 de Julio y Antezana, 1er piso Cochabamba – Bolivia, teléfono 4258813, celulares 65486014 - 68450386
PRESENTACION
1
CONTENIDO ANALÍTICO
CURSO ARDUINO:
(Básico - Intermedio)
INTRODUCCIÓN
Instalación y descripción del Arduino IDE.
BÁSICO
1) Diodo Led.
2) Pulsador.
3) Potenciómetro.
4) LDR.
INTERMEDIO
5) Ultrasónico (Sensor).
6) Infrarojo (Sensor).
7) Motores DC.
8) Servomotores
9) LCD (Display).
10) Keypad (Teclado).
AVANZADO
11) Ultrasónico + Motores DC.
12) Servomotor + Ultrasónico + Motores DC.
13) Módulo de Bluetooth + Android.
14) Relé + Android + Bluetooth + Luces.
2
Introducción
3
INSTALACIÓN Y DESCRIPCIÓN DEL ARDUINO IDE
4
Una vez cargada la pestaña de descargas, a la derecha,
podemos observar los enlaces de descarga en función de tu
equipo. Lo más común para el usuario de Windows es el enlace
de Windows Installer. Además Arduino nos ofrece un instalador
que no necesita de permisos de administrador (Windows ZIP file
for non admin install) capaz de instalarse en ordenadores de
centros públicos por cualquier usuario.
5
Cuando hayamos seleccionado dónde lo queremos instalar el
asistente comenzará su instalación. Habitualmente, los
programas por defecto suelen instalarse en el directorio
“Archivos de programa” o “Program Files” que es dónde estarán
instaladas el resto de aplicaciones de tu ordenador.
6
Cuando éste termine tendremos instalado de manera
satisfactoria nuestro IDE de Arduino.
7
apartados Proyectos y Ejemplos. El primero nos dará acceso a
proyectos completos desarrollados con el IDE. Creados por
nosotros dónde no sólo tendremos un programa si no que
podemos tener unos programas asociados a otros. La pestaña
de Ejemplos es bastante útil ya que disponemos de un montón
de micro proyectos con anotaciones que nos ayudará a
avanzar por nuestra cuenta.
8
evitar que compilemos un programa que falla y podamos dañar
nuestro controlador.
9
En la pestaña Herramientas tenemos otros dos apartados a
tener en cuenta. El tipo de placa con el que vamos a trabajar y
el puerto (COM) con el que vamos a conectar. Para evitar
errores siempre que empecemos un nuevo proyecto debemos
seleccionar el controlador con el que vamos a trabajar de la
lista. El apartado Puerto lo visitaremos bajo unas condiciones
específicas. Si tu Sketch no muestra ningún error de conexión, no
tendremos por que pasarnos por aquí pero si nos aparece un
error y tiene más puertos USB ocupados puede que nuestro IDE
no haya reconocido bien dónde se encuentra nuestro
controlador. Entraremos en la pestaña y cambiaremos el puerto
COM al que nos ofrezca el IDE.
10
Programación
11
¿QUÉ ES LA PROGRAMACIÓN?
12
ESTRUCTURAS Y LENGUAJE DE PROGRAMACIÓN EN IDE ARDUINO
void setup() {
declaraciones;
}
void loop() {
declaraciones;
}
13
imprescindibles como las dos anteriores, pero si convenientes
para obtener una programación estructurada y clara.
En primer lugar se declara el tipo de la función, que será el valor
retornado por la función (int, byte, long, flota, void). A
continuación del tipo, se declara el nombre de la función y,
entre paréntesis, los parámetros que se pasan a la función. Si la
función no devuelve ningún valor entonces se colocara delante
la palabra “void”.
tipo nombreDeLaFuncion(parametro) {
código;}
código // Comentario
14
Con estos conceptos básicos que más adelante seguiremos
ampliando, ya podemos realizar nuestro primer programa.
Arduino MEGA
Arduino UNO
15
Arduino NANO
LABORATORIO 1
DIODO LED
16
Primero de todo, vamos a ver cómo funciona la
placa breadboard o protoboard.
Vemos que arriba y abajo posee dos líneas (azul y roja,
respectivamente). Estas líneas con agujeritos, se llaman buses.
La línea roja indica el bus sometido al voltaje de entrada, y la
línea azul será la conectada a tierra. Todos los puntos marcados
con la línea roja serán equivalentes porque están conectados
entre sí, y lo mismo ocurre con los puntos marcados con la línea
azul. Además, buses están aislados eléctricamente uno del otro.
EJEMPLO
Conectar un LED y ponerlo en funcionamiento de forma
intermitente.
17
Materiales:
Placa protoboard
1 Resistencia 220
LED
Cables
Microcontrolador ARDUINO UNO
18
Código:
Práctica 1
Solución:
19
Realice la secuencia de luces, un led se enciende seguido
de otro led cada 1/5 de segundos.
Solución:
Solución:
20
LABORATORIO 2
PULSADOR
Ejemplos
Caso 1
Unimos el terminal de entrada y el de salida de la parte de la
izquierda (o de la derecha), de forma que se queda unido
21
mediante la lámina conductora.
Con esto conseguimos que el circuito esté siempre cerrado
(encendiéndose el LED), comportándose el pulsador como un
cable, es decir, sin poder actuar de ninguna forma.
Caso 2
Cuando unimos el terminal de la izquierda con el de la derecha
(o al revés), independientemente de si sea el de "arriba" o
"abajo" (se verá más claramente en el vídeo), entonces el
pulsador sí que actúa como un interruptor. Mientras no esté
pulsado, el circuito estará abierto y por tanto el LED
permanecerá apagado. El momento en el que pulsemos,
entonces se cerrará el circuito encendiéndose finalmente el LED.
22
Una vez tenemos el montaje, bastará con introducir un sencillo
sketch para hacer que funcione correctamente.
Código:
void setup () {
pinMode (LED, OUTPUT);
pinMode (pulsador1,INPUT);
pinMode (pulsador2, INPUT);
}
23
void loop () {
if (digitalRead(pulsador1) == HIGH)
{
digitalWrite (LED, HIGH);
}
else if (digitalRead(pulsador2) == HIGH)
{
digitalWrite (LED, LOW);
}
}
Práctica 3
Realice:
24
Realice:
Realice:
25
LABORATORIO 3
POTENCIÓMETRO
Ejemplo
Potenciómetro para encender 5 LEDs
En este ejemplo observaremos que a medida que variamos la
resistencia interna del potenciómetro, se irán encendiendo más
o menos LEDs.
Materiales:
5 LEDs (el color no es significativo)
5 resistencias de 220Ω (una para cada LED)
1 potenciómetro 50kΩ
26
Una vez tenemos esta parte hecha, procedemos a conectar los
LEDs. Hay que tener en cuenta, como se ha explicado en una
entrada anterior (Diodo LED. Introducción y ejemplo), que para
cada diodo LED, es necesario conectar una resistencia de
220Ω para evitar que éste pueda ser dañado.
Así, como tenemso 5 LEDs, utilizaremos 5 pines distintos (2, 3, 4, 5
y 6). Seguidamente irá conectada una resistencia (cables
azules) y a continuacion el LED. Para terminar, la salida del LED
debemos conectarla a masa, para así garantizar que el circuito
esté cerrado (cable naranja).
El resultado final sería el siguiente:
27
Una vez realizado el montaje, pasamos a escribir el código para
poder mandarle la información a nuestro arduino.
Código:
int leds[]={2,3,4,5,6};
int pot;
int n=0;
void setup()
{
for(n=0;n<5;n++)
{
pinMode(leds[n],OUTPUT);
}
Serial.begin(9600);
}
void loop()
{
pot = analogRead(0);
Serial.print("Valor del potenciometro: ");
Serial.print(pot);
Serial.print("\n");
delay(2000);
28
if(pot >= 150 && pot <= 300)
{
for(n=0;n<2;n++)
digitalWrite(leds[n],HIGH);
for(n=2;n<5;n++)
digitalWrite(leds[n],LOW);
}
if(pot >= 300 && pot <= 450)
{
for(n=0;n<3;n++)
digitalWrite(leds[n],HIGH);
for(n=3;n<5;n++)
digitalWrite(leds[n],LOW);
}
if(pot >= 450 && pot <= 600)
{
for(n=0;n<4;n++)
digitalWrite(leds[n],HIGH);
for(n=4;n<5;n++)
digitalWrite(leds[n],LOW);
}
if(pot >= 600)
{
for(n=0;n<5;n++)
digitalWrite(leds[n],HIGH);
}
}
Práctica 2
Realice:
29
Realice:
Realice:
30
LABORATORIO 4
SENSOR LDR
Antes de empezar con el tutorial, es necesario saber que un
sensor LDR es un componente electrónico pasivo cuyo valor de
la resistencia varía en función de la luz que recibe. Cuanta más
luz reciba, el valor de su resistencia será menor.
Materiales:
Placa breadboard.
5 Diodos LED.
5 resistencias de 220 Ω.
Cables.
Procedimiento a realizar:
31
Vayamos por partes.
Primero concretamos los pines que vamos a utilizar para los LED.
Por orden, utilizaremos el 12, 11, 10, 9 y 8. Unidos mediante un
cable a la breadboard, colocamos las resistencias de 220 Ω
puesto que podríamos quemar los diodos por un exceso de
calor.
El potenciómetro, por otro lado, es una resistencia variable que
dispone de tres patillas: entre las dos de sus extremos existe
siempre un valor fijo de resistencia, y entre cualquiera de esos
extremos y la patilla central tenemos una parte de ese valor
máximo. Es decir, la resistencia máxima que ofrece el
potenciómetro entre sus dos extremos no es más que la suma de
las resistencias entre un extremo y la patilla central, y entre la
patilla central y el otro extremo.
Lo utilizamos para determinar el valor mínimo de la luz que es
capaz de detectar el sensor LDR, de forma que cuando
vayamos a ponerlo en marcha debemos regularlo para un
correcto funcionamiento. Si ponemos el valor de la referencia
muy baja, empezarán a funcionar los LED con menos luz
ambiente que si ponemos una referencia elevada.
De forma práctica, conectaremos la patilla central al pin
AREF (ofrece un voltaje de referencia externo para poder
aumentar la precisión de las entradas analógicas) que luego le
diremos al programa que lo vamos a usar como referencia
externa (moverlo manualmente según el valor mínimo de luz
que queramos detectar). Mientras que cada patilla la
conectaremos al ánodo y al cátodo (la patilla de la izquierda al
cátodo, y la de la derecha al ánodo) de la breadboard para
unirlo con el sensor y los LED.
Para el sensor, la señal que recibe es una señal analógica que
obtenemos del exterior para transformarla en digital, por lo que
colocaremos el cable de entrada en un pin analógico, A0 en
nuestro caso. Al colocar la resistencia de 1kΩ en la parte de
arriba del sensor, estamos creando un divisor de tensiones, de
manera que cuanta más luz haya, más tensión tendremos a la
entrada de nuestra entrada analógica.
Quedando finalmente el montaje de la siguiente manera:
32
Nos queda escribir el código que le pasaremos al Arduino.
Código:
int valorLDR = 0;
int pinLDR = 0;
33
void setup()
{
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
analogReference(EXTERNAL);
}
void loop()
{
valorLDR = analogRead(pinLDR);
34
else if((valorLDR >= 423) & (valorLDR < 623))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 223) & (valorLDR < 423))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, LOW);
}
else
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, HIGH);
}
}
Práctica 4
Realice:
35
Realice :
Realice:
36
LABORATORIO 5
SENSOR ULTRASONIDOS HC-SR04
¿Qué recibimos en el
sensor?
El tiempo que transcurre
entre el envío y la
recepción del
ultrasonido.
¿Cómo vamos a traducir
dicho tiempo en
distancia?
Aprovechando que la
velocidad de dicho
ultrasonido en el aire es
de valor 340 m/s, o 0,034
cm/microseg (ya que
trabajaremos con
centímetros y
microsegundos). Para
calcular la distancia,
recordaremos que v=d/t
(definición de velocidad:
distancia recorrida en un
37
determinado tiempo).
De la fórmula anterior despejamos d, obteniendo d=v·t, siendo v
la constante anteriormente citada y t el valor devuelto por el
sensor a la placa Arduino.
También habrá que dividir el resultado entre 2 dado que el
tiempo recibido es el tiempo de ida y vuelta.
Material:
Conexiones:
El sensor consta de 4 pines: "VCC" conectado a la salida de 5V
de la placa, "Trig" conectado al pin digital de la placa
encargado
de enviar el pulso ultrasónico, "Echo" al pin de entrada digital
que
recibirá el eco de dicho pulso y "GND" a tierra.
Código:
long distancia;
long tiempo;
void setup(){
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(6, INPUT);
}
void loop(){
digitalWrite(7,LOW);
delayMicroseconds(5);
digitalWrite(7, HIGH);
delayMicroseconds(10);
tiempo=pulseIn(6, HIGH);
distancia= int(0.017*tiempo);
38
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
delay(1000);
}
Práctica 5
Realice:
Realice:
Realice:
39
LABORATORIO 6
INFRAROJO
Código:
int infrarojo = 7;
void setup ()
{
Serial.begin(9600);
pinMode (infrarojo, INPUT);
}
void loop ()
{
if (digitalRead(infrarojo) == HIGH)
{
Serial.println(”Color NEGRO“);
40
delay(1000);
}
else
{
Serial.println(”Color BLANCO“);
delay(1000);
}
}
Practica 6
Realice:
Realice:
41
LABORATORIO 7
MOTORES DC
Motores
Módulo de potencia
Se necesitará un módulo de
potencia, es decir, electrónica extra
para hacer funcionar estos motores.
¿Por qué? Porque estos motores
tienen un consumo de 250 mA y la
42
placa Arduino UNO (con la que vamos a trabajar), sólo puede
sacar por los pines digitales 40 mA como intensidad máxima.
43
Explicación inputs/outputs del módulo
Material:
Placa Arduino UNO
2x motores DC
Cables
Modulo puente H L298N
Soldador y alambre de estaño (en caso de no venir
soldados los cables a las bornas de los motores)
44
Conexión:
Código:
int IN3 = 4;
int IN4 = 3;
void setup()
{
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
45
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
delay(5000);
Práctica 7
Realice:
Realice:
Realice:
46
LABORATORIO 8
SERVOMOTOR MINI
Un servomotor (también conocido como servo), es un motor de
corriente continua compuesto por engranajes que limitan la
velocidad. Está limitado, teniendo un
rango de movimiento de 0 a 180 grados.
Código:
#include <Servo.h> //Incluimos la librería para
servos
Servo servol;
void setup() {
servol.attach(6);
}
void loop() {
servol.write(0);
delay(1000);
servol.write(45);
delay(1000);
servol.write(90);
delay(1000);
servol.write(135);
delay(1000);
servol.write(180);
delay(1000);
}
47
A partir del montaje que
hemos hecho en el
ejemplo anterior y,
utilizando una placa
breadboard, nos
disponemos a realizar un
nuevo montaje utilizando
un potenciómetro.
Recordamos que la
patilla central de este
componente es la que va
conectada al pin que le
asignemos. De las otras
dos patillas, una será la
que se conecta a tierra, y
la otra a la alimentación
(compartiendo los mismos valores que el servo).
Actuando de esta forma, obtenemos el siguiente montaje:
Código:
#include <Servo.h>
Servo servo;
int pot=3;
void setup() {
Serial.begin(9600);
servo.attach(6);
}
void loop() {
int valorpot=analogRead(pot);
int val=map (valorpot,0,1023,0,180);
Serial.println(val);
servo.write(val);
delay(100);
48
Práctica 8
Realice:
Realice:
Realice:
49
LABORATORIO 9
PANTALLA LCD
50
D0~D3 no los vamos a utilizar. Como pueden ver la pantalla
tiene un bus de datos de 8 bits, de D0 a D7. Nosotros solamente
utilizaremos 4 bits, de D4 a D7, que nos servirán para establecer
las líneas de comunicación por donde se transfieren los datos.
A y K son los pines del led de la luz de fondo de la pantalla. A se
conectará a 4 o 5 volts y K a gnd.
Circuito:
51
Primero que todo, la pantalla necesitará ser alimentada.
Conectaremos dos cables, uno al pin de la placa Arduino UNO
+5V y otro al GND para conectarlos a las filas "+" y "-" de la
breadboard.
52
Conexión: pin 5 de la LCD (RW) --> GND de la breadboard (fila -)
Conexión: pin 6 de la LCD (E)--> pin 8 de la placa Arduino UNO (PWM)
Conexión: pin 11 de la LCD (D4)--> pin 9 de la placa Arduino UNO (PWM)
Conexión: pin 12 de la LCD (D5)--> pin 10 de la placa Arduino UNO (PWM)
Conexión: pin 13 de la LCD (D6)--> pin 11 de la placa Arduino UNO (PWM)
Conexión: pin 14 de la LCD (D7)--> pin 12 de la placa Arduino UNO (PWM)
Código:
#include <LiquidCrystal.h>
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.write("El cajon de Ardu ");
}
void loop()
{
Practica 9
Realice:
53
LABORATORIO 10
TECLADO MATRICIAL
54
void setup() {
servomotor.attach(10);
Serial.begin(9600);
}
void loop() {
tecla = teclado.getKey();
if (tecla == '1'){
servomotor.write(90);
Serial.print(tecla);
}
}
55
MAS EJEMPLOS
56
LED
(Diodo emisor de luz)
57
MOTORES DC
(Corriente continua)
int motor = 9;
void setup() { Materiales:
pinMode(motor, OUTPUT); Placa Arduino.
}
Transistor Tip122.
void loop() {
Resistencia de 220 Ω.
digitalWrite(motor, HIGH);
delay(1000); Cables de conexión.
digitalWrite(motor, LOW);
delay(1000);
58
SERVOMOTOR
#include <Servo.h>
Servo servol;
void setup() {
servol.attach(4);
}
void loop() { Materiales:
servol.write(0);
delay(1000); Placa Arduino.
servol.write(45); Servomotor.
delay(1000); Cables de conexión.
servol.write(90);
delay(1000);
servol.write(135);
delay(1000);
servol.write(180);
delay(1000);
}
59
SERVOMOTOR Y POTENCIOMETRO
60
VELOCIDAD DE UN MOTOR DC CON UN LDR
int valorLDR = 0;
int pinLDR = 0; Materiales:
int motor = 9; Placa Arduino.
int vel=0;
Transistor Tip122.
void setup() Cables de conexión.
{ Motor DC.
pinMode(motor, OUTPUT); 2 Resistencias
Serial.begin(9600); (220 Ω y 3,3KΩ).
} Sensor LDR.
void loop()
{
valorLDR = analogRead(pinLDR);
Serial.println(valorLDR);
}
else if((valorLDR >= 623)&(valorLDR < 823))
{
vel=100;
analogWrite(motor, vel);
}
else if((valorLDR >= 423)&(valorLDR < 623))
61
{
vel=150;
analogWrite(motor, vel);
}
else if((valorLDR >= 223)&(valorLDR < 423))
{
vel=200;
analogWrite(motor, vel);
}
else
{
vel=250;
analogWrite(motor, vel);
}
}
62
MEDIDA DISTANCIA CON ULTRASONIDOS Y LEDS
Material:
ESQUEMA:
63
Código:
int ledrojo=6;
int lednaranja=7;
int ledverde=8;
long distancia;
long tiempo;
int led;
void setup(){
Serial.begin(9600);
pinMode(12, OUTPUT);
pinMode(11, INPUT);
pinMode(ledrojo, OUTPUT);
pinMode(lednaranja, OUTPUT);
pinMode(ledverde, OUTPUT);
}
void loop(){
digitalWrite(12 ,LOW);
delayMicroseconds(10);
digitalWrite(12, HIGH);
delayMicroseconds(10);
tiempo=pulseIn(11, HIGH);
distancia= int(0.017*tiempo);
if (distancia>40){
led=1;
digitalWrite(lednaranja,LOW);
digitalWrite(ledrojo,LOW);
}
if (distancia<=40&&distancia>20){
led=2;
digitalWrite(ledverde,LOW);
digitalWrite(ledrojo,LOW);
}
if (distancia<=20){
led=3;
digitalWrite(ledverde,LOW);
digitalWrite(lednaranja,LOW);
}
switch(led){
case 1:
64
digitalWrite(ledverde,HIGH);
break;
case 2:
digitalWrite(lednaranja,HIGH);
break;
case 3:
digitalWrite(ledrojo,HIGH);
break;
}
delay(50);
}
APUNTES
65
66
67
68
69