Manual de Practicas Arduino v2
Manual de Practicas Arduino v2
Manual de Practicas Arduino v2
MANUAL DE PRCTICAS
OPTATIVA I
M.C. Florencio Lpez Cruz
RESUMEN DE MATERIALES
10 LEDS $30.00
URGENTE
$5.05 URGENTE
5 RESISTENCIAS DE 10 KOHM
$5.05 URGENTE
$5.05
$5.05 URGENTE
$5.05
$12.01URGENTE
$18.00 URGENTE
$18.00 URGENTE
1 POTENCIOMETRO DE 5KOHM
$8.00 URGENTE
$11.99 URGENTE
$26.01
$17.01
NOTA: Los materiales que dicen URGENTE, son materiales para las prcticas del martes
14, y los precios son de acuerdo a la STEREN. Los materiales que dicen ELECTRON O
MADRIGAL, son materiales que no encontrara en la STEREN, dado que no maneja
sensores, motores dc, servomotores, y motores paso a paso, estos materiales los
usaremos en las prcticas posteriores.
Protoboard
1 LED
1 Resistencia 270 ohms (rojo, morado, cafe)
2 Botones de push, interruptores
Arduino Uno
Cable USB para el Arduino
Cable
INSTRUCCIONES
Como ves hemos conectado 2 botones y 1 LED en el protoboard.
La terminal positiva del LED se conecta a la resistencia y la
Arduino
Display de 7 segmentos catodo comn modelo DC05
1 Resistencia de 220 Ohms
Cables
INSTRUCCIONES
Un Display de este tipo no es ms que un conjunto de LEDs
como los que hemos estado utilizando, solo que estos estn
conectados en un circuito. Nosotros usaremos el display
modelo DC05, el cual es de catodo comn, es decir,
internamente todos los LEDs comparten la misma tierra (GND).
Como puedes
manera:
apreciar
las
conexiones
quedaron
de
la
siguiente
Cdigo
Versin 1: en esta versin utilizamos un delay(1000), lo que significa
que se detiene el programa por 1000 milisegundos = 1 segundo, esto con el
fin de dejar prendido el estado del display por 1 segundo. Despus
podemos ver cmo es que vamos prendiendo cada uno de los nmeros en el
Display.
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
delay(1000);
//Tres
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
delay(1000);
//Cuatro
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
//Cinco
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
//Seis
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
//Siete
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(1000);
//Ocho
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
//Nueve
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
}
Versin 2: La verdad es que esta versin del programa es igual al
anterior
solo
que
aqu
hacemos
uso
de
una
funcin
(escribirEnElDisplay()). La funcin recibe como parmetros los valores de
cada uno de los segmentos del display, un 1 equivale a encendido y 0
equivale a apagado.
//Declaramos los pines de salida,
//en el el proyecto asi lo tenemos cableado
int a = 2;
int b = 3;
int c = 6;
int d = 5;
int e = 4;
int f = 1;
int g = 0;
void setup(){
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);}
void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf,
int vg){
digitalWrite(a,va);
digitalWrite(b,vb);
digitalWrite(c,vc);
digitalWrite(d,vd);
digitalWrite(e,ve);
digitalWrite(f,vf);
digitalWrite(g,vg);
}
void loop(){
//Cero
escribirEnElDisplay(1,1,1,1,1,1,0);
delay(1000);
//Uno
escribirEnElDisplay(0,1,1,0,0,0,0);
delay(1000);
//Dos
escribirEnElDisplay(1,1,0,1,1,0,1);
delay(1000);
//Tres
escribirEnElDisplay(1,1,1,1,0,0,1);
delay(1000);
//Cuatro
escribirEnElDisplay(0,1,1,0,0,1,1);
delay(1000);
//Cinco
escribirEnElDisplay(1,0,1,1,0,1,1);
delay(1000);
//Seis
escribirEnElDisplay(1,0,1,1,1,1,1);
delay(1000);
//Siete
escribirEnElDisplay(1,1,1,0,0,0,0);
delay(1000);
//Ocho
escribirEnElDisplay(1,1,1,1,1,1,1);
delay(1000);
//Nueve
escribirEnElDisplay(1,1,1,1,0,1,1);
delay(1000);
}
Arduino
Potenciometro (en el ejemplo usamos uno de 5KOhms pero
puedes usar uno de 1KOhm u otro)
LED
Resistencia de 220 Ohms
Cables
Protoboard
INSTRUCCIONES
En el circuito, la resistencia se conecta a tierra y al pin
11 del Arduino. Mientras que el potencimetro tiene 3
Lecturas anlogas
En en esta practicas vamos a trabajar con lecturas analogas
es decir, vamos a leer la cantidad de voltaje que entra por
uno de los pines del Arduino. El voltaje que se lea tiene que
estar entre 0 y 5 volts, por eso vamos a usar el voltaje que
nos proporciona el Arduino en uno de sus pines. Despus de
que se lee el voltaje, este se convierte en un valor numerico
que cabe en 10 bits, es decir entre 0 y 1023. Qu significa
esto?, bueno, significa que 0 volts equivaldrn a un 0 para
el Arduino y 5 volts equivaldr a 1023 y podemos hacer reglas
de 3 para encontrar los dems valores, por ejemplo 2.5 volts
equivalen a 511.
Para hacer lecturas anlogas vamos a usar la funcin
analogRead(A0) y guardarlo en una variable entera. Por
ejemplo:
1 Computadora
1 Arduino
INSTRUCCIN
Vamos a hacer un primer ejercicio para poder utilizar la
comunicacin serial. Para este primer ejercicio solo vamos a
necesitar nuestra placa de Arduino y nuestro cable USB. As
que procederemos a conectarlo a nuestra computadora y
ejecutar el siguiente cdigo:
CODIGO
//Hacemos nuestro setup, solo se hace una vez al inicar el programa
void setup()
{
//Establecemos la velocidad de comunicacion serial
Serial.begin(9600);//Imprimimos nuestro "Hello World!" en monitor
serial
Serial.println("Hello world!");
}//El loop se corre siempre
void loop()
{
//No hacemos nada al entrar al loop o ciclo infinito
}
MARCO TEORICO
En esta nueva practica vamos a ver comunicacin serial entre
el Arduino y nuestra computadora. El objetivo es poder
imprimir valores, resultados, etc., de lo que sucede con
nuestra placa Arduino en una ventana de nuestra computadora.
Por ejemplo, si estamos trabajando con un LED podemos
imprimir en pantalla el valor de la intensidad de ese LED, o
si estamos haciendo lecturas anlogas nos ayudar a saber el
valor de la lectura e imprimirlo en una ventana de nuestra
computadora. Primero que nada vamos a hablar un poco acerca
de que trata la comunicacin serial.
COMUNICACIN SERIAL
1 Computadora
1 Arduino
Potenciometro de 5K
CODIGO
//Hacemos nuestro setup, solo se hace una vez al inicar el programa
void setup()
{
//Establecemos la velocidad de comunicacion serial
Serial.begin(9600);//Imprimimos nuestro "Hello World!" en monitor
serial
Serial.println("Hello world!");
}//El loop se corre siempre
void loop()
{
int valorPotenciometro = analogRead(A0);
Serial.println("El valor del potenciometro es:");
Serial.println(valorPotenciometro);
delay(1000);
}
INSTRUCCIONES
Primero que nada armamos el circuito con el potencimetro de
la siguiente manera, es muy similar a la leccin de entradas
y salidas anlogas y teclee el siguiente cdigo:
Como podemos ver en el cdigo hacemos lo mismo que en el
anterior, solo que en el loop() hacemos una lectura a la
entrada
analoga
A0
y
guardamos
el
valor
en
valorPotenciometro despus imprimimos este valor en el
monitor serial, y hacemos un delay de 1000 ms. Con este
cdigo podemos monitorear el cambio en una entrada anloga y
desplegar el valor obtenido.
1 Computadora
1 Arduino
1 Micro Switch
Practica V:
1023.
tanto
MATERIALES
Arduino
Protoboard
6 Resistencias de 100 Ohms
Potenciometro 1KOhm o 5 KOhms
6 LEDs
Cables
CIRCUITO
CODIGO
En el cdigo lo que hacemos es leer el valor del potencimetro como
entrada anloga en A0. Dependiendo de este valor vamos a ir encendiendo
los LEDs.
//Declaramos los leds y los pines en los cuales hay que conectar
int led1 = 12;
int led2 = 11;
int led3 = 10;
int led4 = 9;
int led5 = 8;
int led6 = 7;
void setup(){
//configuramos todos los pines como salidas
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);}
void loop(){//Hacemos la lectura analoga del potenciometro
int valorPotenciometro = analogRead(A0);//Apagamos todos los LED's
digitalWrite(led1,
digitalWrite(led2,
digitalWrite(led3,
digitalWrite(led4,
digitalWrite(led5,
digitalWrite(led6,
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
PRACTICA INTEGRADORA
Practica VI: Lectura y Entrada Anloga (Potencimetro)
En esta prctica el objetivo es controlar la velocidad con la
que va transcurriendo la secuencia, es decir, que acelere o
disminuya la velocidad con la que cambian los leds.
MATERIALES
Potencimetro de 10Khoms.
8 Leds
9 Resistencias 220homs
Boton
CODIGO
int
int
int
int
int
void setup() { //Se configuran los puertos, todos los leds como salida y
el pin del boton como entrada
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(botonPin, INPUT);
}
//Metodo para prender 8 leds incluyendo el tiempo de espera
void PrenderLeds(int ld1, int ld2, int ld3, int ld4, int ld5, int ld6,
int ld7, int ld8, int tiempo){
digitalWrite(ld1, HIGH);
delay(tiempo);
digitalWrite(ld2, HIGH);
delay(tiempo);
digitalWrite(ld3, HIGH);
delay(tiempo);
digitalWrite(ld4, HIGH);
delay(tiempo);
digitalWrite(ld5, HIGH);
delay(tiempo);
digitalWrite(ld6, HIGH);
delay(tiempo);
digitalWrite(ld7, HIGH);
delay(tiempo);
digitalWrite(ld8, HIGH);
delay(tiempo);
}
//Metodo para apagar 8 leds incluyendo el tiempo de espera
void ApagarLeds(int ld1, int ld2, int ld3, int ld4, int ld5, int ld6, int
ld7, int ld8, int tiempo){
digitalWrite(ld1, LOW);
delay(tiempo);
digitalWrite(ld2, LOW);
delay(tiempo);
digitalWrite(ld3, LOW);
delay(tiempo);
digitalWrite(ld4, LOW);
delay(tiempo);
digitalWrite(ld5, LOW);
delay(tiempo);
digitalWrite(ld6, LOW);
delay(tiempo);
digitalWrite(ld7, LOW);
delay(tiempo);
digitalWrite(ld8, LOW);
delay(tiempo);
}
void loop(){
PotVal = analogRead(PotPin);
botonEstado = digitalRead(botonPin); //Lee si el boton se presiona o no
if (botonEstado == HIGH) { //Si el boton se presiono entrada a la
condicion
Cont += 1; //Aumenta contador cada vez que se presiona
if(Cont > 4) //Resetea el contador cuando es mayor a 4 y vuelve a la
primera opcion
{
Cont = 0;
}
}
Potenciometro de 10Khoms.
8 Leds
9 Resistencias 220homs
CIRCUITO
CODIGO
int pinPot = 2; //Puerto analogo donde esta conectado el potenciometro
int valPot = 0; //Variable que guardara el valor del potenciometro
void setup()
{
pinMode(pinPot, INPUT); //Se pone como input el pin analogo del
potenciometro
for (int i = 5; i <= 12; i++){ //Ciclo para poner los pines de los leds
como output
pinMode(i, OUTPUT);
}
Serial.begin(9600);
}
//Metodo para controlar los leds, se envia un 0 para apagarlo y un 1 para
prenderlo
void Leds(boolean A,boolean B,boolean C,boolean D,boolean E,boolean
F,boolean G,boolean H)
{
digitalWrite(5, A);
digitalWrite(6, B);
digitalWrite(7, C);
digitalWrite(8, D);
digitalWrite(9, E);
digitalWrite(10, F);
digitalWrite(11, G);
digitalWrite(12, H);
}
//Metodo que hace parpadear los leds, se usara cuando el valor sea mayor
a 800
void Blink(){
Leds(1,1,1,1,1,1,1,1);
delay(50);
Leds(0,0,0,0,0,0,0,0);
delay(50);
}
void loop()
{
valPot = analogRead(pinPot); //Lee el valor del potenciometro
Serial.println(valPot, DEC); //Lo muestra en el "monitor serial"
delay(100);
if (valPot == 0){ //Apaga los leds
Leds(0,0,0,0,0,0,0,0);
}
if (valPot >= 1 && valPot < 100){ //Prende el primer led
Leds(1,0,0,0,0,0,0,0);
}
if (valPot >= 100 && valPot < 200){ //Prende el segundo led
Leds(1,1,0,0,0,0,0,0);
}
if (valPot >= 200 && valPot < 300){
Leds(1,1,1,0,0,0,0,0);
}
if (valPot >= 300 && valPot < 400){
Leds(1,1,1,1,0,0,0,0);
}
if (valPot >= 400 && valPot < 500){
Leds(1,1,1,1,1,0,0,0);
}
if (valPot >= 500 && valPot < 600){
Leds(1,1,1,1,1,1,0,0);
}
if (valPot >= 600 && valPot < 700){
Leds(1,1,1,1,1,1,1,0);
}
if (valPot >= 700 && valPot < 800){
Leds(1,1,1,1,1,1,1,1);
}
if (valPot >= 800){ //Parpadea todos los leds
Blink();
}
}
.
Arduino
Protoboard
Fotorresistencia
LED
1 resistencia de 220 ohms
1 resistencia de 10 kohms
cables
CODIGO
int led = 11;
void setup(){
Serial.begin(9600); //Crea la velocidad de comunicacin seria
pinMode( led, OUTPUT ); //configura como salida el led
}
void loop(){
int valorFotorresistencia;
//Declaramos la variable de la
fotorresistencia
valorFotorresistencia = analogRead(A0); //leemos el valor de la
fotorresistencia
Serial.println(valorFotorresistencia); //Imprimimos en la consola
serial el valor de la fotorresistencia
analogWrite(led, valorFotorresistencia/4); //prendemos el valor del LED
dependiendo del valor de la fotorresistencia
delay(500);
//Esperamos 500ms
}
CIRCUITO
Practica 1X:
Arduino
Display Anodo Comun DA05.
Resistencias de 220 homs.
CODIGO
//Se declaran los pines de acuerdo a las letras del diagrama del display
int a = 2;
int b = 3;
int c = 6;
int d = 5;
int e = 4;
int f = 1;
int g = 0;
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(tiempo);
//Cinco
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(tiempo);
//Seis
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(tiempo);
//Siete
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(tiempo);
//Ocho
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(tiempo);
//Nueve
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
delay(tiempo);
}
4 Leds
4 Resistencias
CODIGO
int Numero = 0; //variable donde se guardara el nmero que se escriba
void setup() {
Serial.begin(9600);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
//Metodo para prender los leds segun su numero
void PrenderLeds(boolean a, boolean b, boolean c, boolean d){
}
if (Numero == 12){
Serial.println("Numero
PrenderLeds(0,0,1,1);
}
if (Numero == 13){
Serial.println("Numero
PrenderLeds(1,0,1,1);
}
if (Numero == 14){
Serial.println("Numero
PrenderLeds(0,1,1,1);
}
if (Numero == 15){
Serial.println("Numero
PrenderLeds(1,1,1,1);
}
if (Numero > 15){
Serial.println("Numero
PrenderLeds(0,0,0,0);
}
doce 0011");
trece 1011");
catorce 0111");
quince 1111");
fuera de rango");
}
}
MATERIALES
CIRCUITO
CODIGO
int
int
int
int
void setup() { //Se configuran los puertos, todos los leds como salida y
el pin del boton como entrada
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(botonPin, INPUT);
}
//Metodo para prender 8 leds incluyendo el tiempo de espera
void PrenderLeds(int ld1, int ld2, int ld3, int ld4, int ld5, int ld6,
int ld7, int ld8, int tiempo){
digitalWrite(ld1, HIGH);
delay(tiempo);
digitalWrite(ld2, HIGH);
delay(tiempo);
digitalWrite(ld3,
delay(tiempo);
digitalWrite(ld4,
delay(tiempo);
digitalWrite(ld5,
delay(tiempo);
digitalWrite(ld6,
delay(tiempo);
digitalWrite(ld7,
delay(tiempo);
digitalWrite(ld8,
delay(tiempo);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
}
//Metodo para apagar 8 leds incluyendo el tiempo de espera
void ApagarLeds(int ld1, int ld2, int ld3, int ld4, int ld5, int ld6, int
ld7, int ld8, int tiempo){
digitalWrite(ld1, LOW);
delay(tiempo);
digitalWrite(ld2, LOW);
delay(tiempo);
digitalWrite(ld3, LOW);
delay(tiempo);
digitalWrite(ld4, LOW);
delay(tiempo);
digitalWrite(ld5, LOW);
delay(tiempo);
digitalWrite(ld6, LOW);
delay(tiempo);
digitalWrite(ld7, LOW);
delay(tiempo);
digitalWrite(ld8, LOW);
delay(tiempo);
}
void loop(){
botonEstado = digitalRead(botonPin); //Lee si el boton se presiona o no
if (botonEstado == HIGH) { //Si el boton se presiono entrada a la
condicion
Cont += 1; //Aumenta contador cada vez que se presiona
if(Cont > 4) //Resetea el contador cuando es mayor a 4 y vuelve a la
primera opcion
{
Cont = 0;
}
}
if (Cont == 0){ //Opcion por default, todos los leds prendidos
PrenderLeds(5,6,7,8,9,10,11,12,0);
delay(150);
}
if (Cont==1){ //Primera opcion, prende los leds empezando del 1 hasta
el 9 uno por uno
PrenderLeds(5,6,7,8,9,10,11,12,150);
delay(Pausa);
ApagarLeds(5,6,7,8,9,10,11,12,0);
delay(Pausa);
}
if (Cont==2){ //Segunda opcion, prende los leds empezando del 9 hasta
el 1 uno por uno
ApagarLeds(12,11,10,9,8,7,6,5,0);
delay(Pausa);
PrenderLeds(12,11,10,9,8,7,6,5,150);
delay(Pausa);
}
if (Cont==3){ //Tercera opcion, apaga los leds del 1 al 9 uno por uno
PrenderLeds(5,6,7,8,9,10,11,12,0);
delay(Pausa);
ApagarLeds(5,6,7,8,9,10,11,12,150);
delay(Pausa);
}
if (Cont==4){ //Cuarta opcion, apaga los leds del 9 al 1 uno por uno
PrenderLeds(5,6,7,8,9,10,11,12,0);
delay(Pausa);
ApagarLeds(12,11,10,9,8,7,6,5,150);
delay(Pausa);
}
}
INSTRUCCIONES
Como vemos en el diagrama, la conexin de los componentes es
muy sencilla, y el trabajo pesado recae solo en el
Transistor, quien hace la funcin de Switch, dejando pasar la
corriente necesaria para poner en marcha nuestro motor.
Dependiendo
de
las
caractersticas
por
fabricante
un
Transistor puede llegar a manejar corrientes bastante altas,
a
partir
de
una
mucho
mas
baja
como
la
de
un
microcontrolador, Arduino en nuestro caso.
Cdigo
// Declaramos la variable d3 para referenciar el pin digital 3
int d3 = 3;</code></code>void setup(){
// Iniciamos el pin digital como salida.
pinMode(d3, OUTPUT);
}
void loop(){
digitalWrite(d3, HIGH); // escribimos en el pin un valor de salida
Alto (Digital 1)
delay(1500); // esperamos 1.5 segundos