Ebook Arduino Desde Cero
Ebook Arduino Desde Cero
Ebook Arduino Desde Cero
no te
saltees ningún paso
Esta guía se trata de como descargar, instalar y cargar nuestro primer
programa a la placa Arduino. Si recién comienzan con Arduino, no se salteen
ninguno de estos pasos. Además leer todas las instrucciones!
3) Terminada la
instalación, nos
debería aparecer
un icono de
Arduino en el
escritorio o en la
barra de
herramientas, lo
abrimos y
procedemos a la
configuración del
mismo.
7) Ahora vamos analicemos las 2 funciones que nos aparecen por defecto
en al pantalla del IDE de arduino.
https://www.geekfactory.mx/tutoriales/tutoriales-arduino/driver-ch340-
para-arduino-chinos-o-genericos/
Y por último vamos a necesitar una función que maneje el tiempo, donde el
parámetro que admite esta función es un número que será el equivalente al
tiempo en milisegundos.
delay(1000);
Tip extra: este mismo ejemplo lo podemos encontrar bajo los ejemplos
que ya trae el arduino, y esta ubicado en
void setup()
{
pinMode(13, OUTPUT); //le decimos que el pin 13 es de salida
} //fin de la función loop
1) Hacer que dicho led titile más rápido, cada 500 mili segundos.
2) Buscar el tiempo mínimo en el cual todavía podemos ver que la luz está
titilando.
3) Hacer una secuencia donde la luz vaya titilando cada vez más rápido.
Para ello esta “forma de escribir” las funciones tiene que tener un
estándar a modo de que todos los programadores entiendan que es lo que
nuestra función hace.
La función CUADRADO
Case Sensitive
Nos damos cuenta de que lo que escribimos está bien porque el IDE de
Arduino generalmente nos pinta de algún color cuando está bien escrito.
a) Para que cuando uno mismo retome un código hecho hace varios meses
o años y quiera entender de qué se trata CIERTO bloque de código o
para que creamos CIERTA variable.
b) Para que otros compañeros que vayan a utilizar dicho código también lo
puedan comprender.
c) También nos sirve para separar partes de un mismo bloque, con el fin de
que quede todo más ordenado.
La regla básica es…cada vez que abrimos una llave, todo lo que va
adentro de la misma debe quedar tabulado con respecto a la anterior.
Las Líneas de colores nos indican que internamente todas esas barras
están interconectadas. Lo cual significa que, si en un agujero de la protoboard
conectamos un cable conductor, significa que este también estará conectado a
otros agujeros de la placa, según corresponda. Es como unir 2 cables!!!
1) Utilizar para prender le mismo led el Pin 12. Para lo cual habrá que
modificar el código y la conexión del cable que va del led al Arduino.
2) Hacer que dicho led titile más rápido, cada 500 mili segundos.
Código de Programación
/*
El Objetivo de este código es prender la mayor cantidad de leds
Que tengamos a disposicion
*/
Solución: para ello se utiliza una asociación de palabra con los números
de los pines. Y esto se puede lograr con la siguiente función:
}
Desafíos para entretenerse un rato ;)
1) Agregar un factor más al semáforo, de que cuando este volviendo del
verde al rojo, antes de apagarse el verde, me muestro verde con
amarillo y por ultimo comience de nuevo en ROJO.
Por lo general tienen cuatro patillas que están conectadas a pares como
se ve en el siguiente esquema.
Una cosa a destacar de este código, es que utiliza algo que se llama
Resistencia de Pull-Up INTERNO, ya lo explicaremos mas adelante que
significa y para que sirve.
void setup()
{
pinMode(2, INPUT_PULLUP); //define la entrada con la resistencia interna
pinMode(13, OUTPUT); //defino el led interno como salida
}
void loop()
{
int sensorVal = digitalRead(2); //leo el pin 2 donde esta conectado el pulsador
Código de Programación
Ejemplo: if(pepe==HIGH)
{ prender led;
}
else
{ apagar led;
}
/*
El objetivo de este ejercicio es hacer que con un pulsador se
prenda el led y con otro apagarlo.
*/
const int led = 12; //defino pin del led
const int pulsador_on=7; //defino pin pulsador
const int pulsador_off=2; //defino el pin del pulsador
Solución: para ello vamos a utilizar un pulsador para cada led como ya
lo vimos con los ejemplos anteriores. Ósea, lo que vamos a hacer es, prender
led1 cuando pulsador 1 sea pulsado , si no esta pulsado que led1 este
apagado. Y lo mismos con el led2 con el pulsador2.
/*
En este ejemplo vamos a leer dos pulsador y que cada uno de ellos
prenda un led cuando sea pulsado
*/
const int led_verde = 11; //define pin para el led
const int led_rojo = 12;
/*
En este ejemplo vamos a leer dos pulsador y que
Se active led1 cuando cualquier pulsador sea pulsado
Y que se prenda led2 solo cuando se pulsan los
Dos a la vez*/
const int led_verde = 11; //define pin para el led
const int led_rojo = 12;
//chequeo si fueron pulsados los dos, pero entra solo si los 2 son pulsados
if((digitalRead(pulsador1)==HIGH)&& (digitalRead(pulsador2)==HIGH))
{
digitalWrite(led_rojo, HIGH); //activo led rojo
}
else //detecto si no fue pulsado
{
digitalWrite(led_rojo, LOW); //desactivo led rojo
}
Solución: para lograr esto lo que vamos a hacer es utilizar una variable,
entonces cada vez que pulso el pulsador cambio el estado de esa variable.
Con lo cual, hay que tener cuidado de que el led se prenda de acuerdo al
estado de esa variable y no cuando el pulsador es pulsado.
Solución: para ello que vamos a hacer nosotros es utilizar 6 leds para
simular volumen y con un led vamos a incrementar el valor de un contador y
con otro lo decrementamos.
La diferencia entre
analógico y digital es abismal,
incluso infinito. Veamos la
gráfica.
¿Como hace
Arduino para leer una
señal analógica?
analogRead(Pin Analogico)
Que nos devuelve un valor entre 0 a 1023. Cero si la señal analógica esta en 0
voltios
Y 1023 cuando la entrada esta en 5V. Todos los demás son valores
intermedios.
Código de Programación
/*
El objetivo de este código es leer el potenciómetro
y cuando llegue a un valor prender el led. A su vez
cuando este por debajo de un valor lo apague
*/
const int led = 2; //define el led a utilizar
void setup()
{
pinMode(led, OUTPUT); //define dicho led como salida
}
void loop()
{
if(analogRead(A0)>500) //comparo y chequeo si es mayor a 500
{
digitalWrite(led, HIGH); //prendo led
}
else //caso contrario, osea que es menor a 500
{
digitalWrite(led, LOW); //que apague led
}
}
int analogico=0;
void setup()
{
Serial.begin(9600); //inicializamos el puerto serial
//9600 es la velocidad de comunicación con la PC
}
void loop()
{
analogico=analogRead(A0); //leemos el pin Analogico 0
Serial.print(“Dato=”); //imprimimos “Dato ” por el puerto
Serial.print(analogico); //enviamos el valor leído de analógico
Serial.print(“\n”); //esta \n es para que haga un enter
}
Los datos los podemos ver desde Herramientas > Monitor Serial o Plotter Serial
Con esto lo que vamos a lograr es que a la salida vamos a tener entre 0-5v
acorde a los valores que le entreguemos de 0-255.
/*
El objetivo es leer el potenciómetro y usarlo de referencia
para ajustar el brillo del led con la función analogWrite.
Recordar que solo se pueden usar pines que sean PWM para
Salida analógica.
*/
void setup()
{
//solo los pines digitales se definen como In/out
//en este caso el pin 3 también es analógico
}
void loop()
{
//la función lectura me devuelve un valor entre 0-1023
lectura=analogRead(A0);
analogWrite(3,lectura/4);
//el problema es que la función Write solo acepta valores
//entre 0 y 255, por eso dividimos pro 4
¿También recordaran que cada led tiene que llevar una resistencia,
como será en este caso? ¿Una pregunta más…la resistencia va en el positivo y
negativo? ¿Importa donde lo colocamos?
analogWrite(pin_salida,valor);
Código de Programación
//como vamos a usar las salidas analógicas
//todos los leds tienen que ir en las salidas
//de PWM o salidas analógicas
case 3:
digitalWrite(led3,HIGH);
break;
case 4:
digitalWrite(led4,HIGH);
break;
case 5:
digitalWrite(led5,HIGH);
break;
case 6:
digitalWrite(led6,HIGH);
break;
}
}
Solución: debemos utilizar la librería “Serial” para dicho fin, para lo cual
debemos de utilizar la función:
If(Serial.available>0)
Gracias al cual podemos saber si están entrando datos pro puerto serie.
Después los datos serán leidos con:
Serial.read();
Y el paos final es comparar lo leído con Serial.read con el valor que esperamos
que llegue desde la PC, esto se hace con el if() que ya conocemos
void setup()
{
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
void loop()
{
//utilizo la función Serial.available() para ver si llegaron datos
If(Serial.available()>0) //significa que llegaron datos
{
//aca leo puerto serie y guardo en lectura
lectura=Serial.read();
/*
El objetivo de este ejercicio es leer el valor analógico
del sensor de luz, mostrarlo por el puerto serie
y activar led cuando llegue a un cierto valor
*/
void setup()
{
Serial.begin(9600); //activo el puerto serie + velocidad
pinMode(ledpin, OUTPUT); //defino el led como salida
}
void loop()
{
analogico=analogRead(A0); //lectura del puerto analogico
Serial.print("Luz=");
Serial.print(analogico); //envio el dato por puerto serie
Serial.print("\n");
1) Hacer que prenda el led cuando este por debajo del nivel y apague en
caso contrario.
2) Hacer que en pantalla muestre 100% cuando llegue a máxima
luminosidad y 0% en luminosidad minima.
3) Que por puerto serie también muestre el estado del led, “Led = Activo” ,
“Led = Apagado”
Los ceros después de la coma son intensionales, son para que Arduino
los tome como valores flotantes para hacer el calculo y no redondee a valores
Enteros.
void setup()
{
Serial.begin(9600); //activo el puerto serie + velocidad
pinMode(ledpin, OUTPUT); //defino el led como salida
}
void loop()
{
temperatura =(analogRead(A0)/1024.0)*500.0; //lectura del puerto analogico
Serial.print("Temp=");
Serial.print(temperatura); //envio el dato por puerto serie
Serial.print("\n");
https://github.com/adafruit/DHT-sensor-library
1) Hacer que se prenda una luz y una alarma sonora cuando el sensor
llegue a 80% de humedad.
2) Que nos grafique solo la temperatura en el PLOTTER Serial de Arduino.
Código de Programación
Arduino trae pro defecto un código ejemplo para poder programar y
medir la distancia de este sensor, para ellos vamos a….
Así como cuando vimos el led RGB, estos también pueden venir de
Ánodo común (todos comparten el mismo positivo) o de Cátodo común( todos
comparten el negativo)
Existe otra pantalla con mas dígitos, pero que no tiene mucho mas pines
que el 7 Segmento, cómo lo hacen?
https://github.com/DeanIsMe/SevSeg
¡Pasemos a la Practica!
A ver si te animas!!! :P
/*
El objetivo de este ejercicio Imprimir por pantalla
el Clásico "Hola Mundo"
*/
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16, 2); //inicializamos LCD como una de 16x2
}
void loop()
{
lcd.setCursor(0,0); //nos posicionamos en la pantalla
//eso significa que lo que sigue lo va a imprimir desde esa posición
https://github.com/Konredus/LiquidCrystal_I2C
Código de Programación
//lo primero es incluir la libreria del LCD
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16, 2); //inicializamos LCD como una de 16x2
pinMode(pulsador1,INPUT);
pinMode(pulsador2,INPUT);
}
void loop()
{
lcd.setCursor(0,0); //nos posicionamos en la pantalla
lcd.print("Analogico="); //imprimimos el texto deseado
lcd.print(analogRead(A0)); //imprimimos el valor del Analogico
lcd.print(" "); //imprimimo 2 espacios para borrar
Código de Programación
//lo primero es incluir la librería del LCD
#include <LiquidCrystal.h>
//Indicamos cuales serán los pines del LCD a utilizar
//LiquidCrystal lcd(RS,E,D4,D5,D6,D7);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
https://github.com/Stan-Reifel/TinyStepper_28BYJ_48
Una vez descargado e instalado la librería, abrimos el primer ejemplo que trae!
Y por último, hay que estudiar un poco que hacen las diversas funciones que
vienen predefinidas en el código.
Como primer código recomiendo que prueben como gira el motor para
un lado y para el otro. Con un intervalo de 5 segundos entre giro y giro.
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), funcion_blink, CHANGE);
}
1) Hacer que un led este titilando todo el tiempo en el pin 13, y que
cuando se presione un pulsador INMEDIATAMENTE se prenda o
apague una luz que estará conectado en el pin 12 (este pin va a
estar inicialmente apagado)
Para ellos hay que comenzar a utilizar los llamados “timers” o contadores
internos de la placa Arduino.
Cada vez que se utiliza este código o se lo llama, nos devuelve el tiempo
en milisegundos, a partir del cual nuestro código comenzó a funcionar.
void setup()
{
pinMode(Led, OUTPUT);
}
void loop()
{
unsigned long tiempo=millis();
if((tiempo-tiempoAnterior)>1000)
{
tiempoAnterior = millis();
if ( EstadoLed == LOW)
{
EstadoLed = HIGH;
}
else
{
EstadoLed = LOW;
}
digitalWrite(13, EstadoLed);
}
}
Ahora bien, muy probable que las revoluciones que queramos medir
sean relativamente elevadas, pro ende vamos a tener que utilizar
INTERRUPCIONES ya que con un simple IF puede que se nos pase de largo
el programa. Especialmente si después este dato lo vamos a mostrar por una
pantalla LCD o por puerto Serial.
void loop()
{
//Ejecuto el calculo de RPM cada 1 segundo
delay(500);
pinMode(2,INPUT);
//desabilito la interrupcion mientras estoy haciendo el calculo
detachInterrupt(0);
Serial.print("RPM = ");
Serial.println(rpm);
rpmcount = 0;
Desde ya muchísimas gracias pro llegar hasta el final de esta mini guía
en el cual intentamos de que aprendas, te diviertas y te desafíes más allá de
los ejercicios planteados.
¡Sin duda Arduino es un mundo muy amplio y abierto que no tiene fin! Todos
los días salen nuevas librerías, nuevos sensores, nuevos Shields y esto es un
camino de IDA.
Espero de corazón que esta mini guía te haya sido de gran utilidad y
cualquier duda o consulta no dudes en escribirme que me podes encontrar en
la Tribumaker:
https://tribumaker.com/
Por Instagram:
https://www.instagram.com/tribu.maker
https://tribumaker.com/curso-arduino-1/
https://tribumaker.com/curso-arduino-2/
¡Sin más, eso es todo de mi parte y nos vemos en una próxima ocasión!