Beruflich Dokumente
Kultur Dokumente
SALTA
ARDUINO
AÑO 2017
Expositor:
Bioing. Hugo Aguila.
Herramientas: Se formarán 4 a 6 grupos de alumnos (según disponibilidad), cada uno contará con un kit de
aprendizaje, una guía resumida de Arduino, y una PC.
Bibliografía
1. https://www.arduino.cc/
2. Libro básico de ARDUINO. (digital)
3. Guía resumida de Arduino: Teoría y programas. (en papel y digital)
Muchas veces pensamos que los temas tecnológicos requieren de gran habilidad técnica y de un
gran conocimiento, pero esto no es cierto. Queremos que, con el desarrollo de esta guía, entiendas que
muchos de esos procesos tecnológicos son simples de entender y aquellos que son complejos son la unión
de muchos procesos simples. Esta guía, te va a ayudar a aprender, imaginar y materializar todas tus ideas
de las cuales te puedas sentir orgulloso, ya que fue tu idea y tú la desarrollaste.
Con las capacidades de Arduino solo debemos tener nociones básicas de electrónica y
programación, eso es suficiente para comenzar a desarrollar nuestros proyectos. Arduino cuenta con una
gran comunidad donde se comparte todo lo desarrollado, con un sin fin de SHIELDS diseñados para
aumentar sus capacidades y/o brindarle nuevas funcionalidades.
El proyecto comenzó (2005) en Ivrea, Italia (computadoras Olivetti), donde Massimo Banzi (uno
de los creadores) daba clases, y diseñó una placa controlada por un microprocesador y capaz de recibir y
emitir información a través de conexiones a otros aparatos. Una de las claves del proyecto era su precio,
que desde un principio se estableció en no más de 30 euros. El nombre de ARDUINO, viene del nombre
del Bar di Re Arduino (Bar del Rey Arduino). El rey Arduino fue rey de Italia entre los años 1002 y 1014.
4.1 Descarga e instalación del Entorno de Trabajo IDE de Arduino (Windows y Linux).
Si tu computadora tiene LINUX: Ubuntu y derivados.
Si tu computadora tiene de sistema operativo Windows en versión 7, Vista o XP, debes realizar la
siguiente sucesión de sencillos pasos:
10. Descomprimir la carpeta de Arduino en una ubicación de fácil acceso, dar doble click y
aceptar todas las opciones de instalación, “ahora SI conectar la Placa”, posteriormente
debemos verificar que efectivamente la Placa de Arduino, fue detectada por nuestra PC,
esto se hace ingresando a en Panel de control y luego Administrador de dispositivos,
“Puertos (COM)”. Si no es detectada, seguir con el siguiente paso.
11. Si luego de Conectada la placa Arduino Uno al PC y ven este aviso. No nos debemos
preocupar.
12. Ir a Panel de control y luego Administrador de dispositivos, allí buscar la siguiente opción
y den Click derecho sobre Dispositivo desconocido y luego sobre la opción Actualizar
software del controlador.
5 Primer programa:
5.1 Blink: Prueba de destello del LED que viene incluido en la placa.
Al final de este ejercicio ya vas a tener la capacidad de cargar programas a tu placa Arduino. Para
ello abre el software de Arduino y realiza lo que se indica en la siguiente imagen.
El programa de intermitencia (Blink) que acabas de cargar en electrónica se llama “Hola mundo”,
consiste en prender y apagar un LED en intervalos de un segundo. El LED que prende y apaga es el marcado
con la letra L según la imagen de abajo. Ahora te podemos dar la ¡Bienvenida! al mundo de Arduino.
delay(1000);
Cambia el valor de 1000 por 2000 y vuelve a cargar el programa a tu placa Arduino Uno, ¿qué observas?
5.3 Ley de ohm, cálculo de una resistencia para colocar un led en la placa.
La empresa de automatización NRJ Inc. te contrata para hacer un montaje de un LED Intermitente
en una placa Arduino UNO, con el único requisito de que el LED debe estar ubicado en el Pin 13, ellos
muy amablemente te han facilitado el esquema, tu tarea es:
Antes de conectar el circuito de la figura, primero debemos calcular cual será la corriente
MAXIMA que circulará por el circuito, para ello debemos considerar que la TENSIÓN máxima que entrega
el ARDUINO es de 5 [v], pero la caída de tensión en el DIODO LED es de aproximadamente 2[v], sabiendo
que una corriente tolerable por el diodo LED es de 15 [mA], entonces:
Para crear un programa (SKETCH en ARDUINO), que la computadora interprete y luego ejecute
las instrucciones escritas en él, debe usarse un “LENGUAJE DE PROGRAMACIÓN”. En sus inicios las
computadoras interpretaban sólo instrucciones en un lenguaje específico, llamados de “bajo nivel”
(ensamblador), conocido como código máquina, siendo éste un poco complicado para los programadores
novatos. De hecho, sólo consiste en cadenas de números 1 y 0 (Sistema binario).
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo
necesario disponer de un método más sencillo para programar. Entonces, se crearon los lenguajes de “alto
nivel”. Mientras que una tarea tan trivial como sumar o multiplicar dos números puede necesitar un conjunto
de instrucciones en lenguaje “ensamblador”, en un lenguaje de “alto nivel”, bastará con el uso de una sola
instrucción: “+” o “*” (el asterisco se usa regularmente como símbolo de multiplicación).
Un lenguaje de programación es un idioma artificial diseñado para expresar operaciones que pueden
ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que
controlen el comportamiento físico y lógico de una máquina, para expresar “algoritmos” con precisión, o
como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y
semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual
se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático, a
eso se le llama programación.
Arduino se programa en el lenguaje de alto nivel C/C++ y generalmente tiene los siguientes
componentes para elaborar el algoritmo:
➢ Estructuras.
➢ Tipos de variables, ejemplos.
➢ Operadores matemáticos, lógicos y booleanos.
Los programas en Arduino, tienen siempre dos funciones principales. La palabra “void”, indica
que se trata de funciones, y los paréntesis están vacíos porque no envían ni reciben ningún parámetro en
especial. Todo lo encerrado entre corchetes se realizará en la función.
También podemos dejar la variable sin inicializar (es decir, sin asignarle un valor de partida):
int comienzo;
int comienzo = 0;
Les aconsejo, inicializar siempre vuestras variables en el momento de declararlas. Esto les puede
ayudar a depurar vuestros sketches y al mismo tiempo ahorrar código. Asimismo, al declarar una nueva
variable tratar siempre de anticipar el uso que el sketch va a darle a esa variable y el rango de valores que
va a tomar durante la ejecución (por ejemplo si va a sobrepasar el valor 32.000 interesa hacerla long en vez
de int, o si va a tomar valores decimales entonces necesitaremos una float). De no hacerlo así podríamos
encontrarnos con situaciones inesperadas durante la ejecución del sketch.
Veamos el típico sketch que hace parpadear un LED activado a través de un pin:
int LEDpin = 6; //la variable LEDpin se inicializa a 6,es decir vamos a activar
// el pin 6
void setup(){
pinMode(LEDpin,OUTPUT);
}
void loop(){
digitalWrite(LEDpin,HIGH);
delay (1000);
digitalWrite(pinLED,LOW);
delay (1000);
}
No te asustes si no entiendes todo en este código. De momento basta con que comprendas el uso
de las variables. Todo lo demás lo iremos viendo en detalle más adelante. Notá que cada instrucción debe
de terminarse con un punto y coma (;) de lo contrario el compilador no entendería que la instrucción ha
acabado y nos daría un error.
Los operadores aritméticos que se incluyen en el entorno de programación son: suma, resta,
multiplicación y división. Estos devuelven la suma, diferencia, producto o cociente (respectivamente) de
dos operandos.
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
Las asignaciones compuestas combinan una operación aritmética con una variable asignada. Estas
son comúnmente utilizadas en los bucles tal como se describe más adelante. Estas asignaciones compuestas
pueden ser:
x++ // igual que x = x +1, o incremento de x en +1
Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las estructuras
condicionales o de control (del tipo if.. for, etc) para testear si una condición es verdadera. En los ejemplos
que siguen en las próximas páginas se verá su utilización práctica usando los siguientes tipos de
condicionales:
x == y // x es igual a y
x != y // x no es igual a y
Las estructuras de control en Arduino según el reference (ayuda online de ARDUINO) son:
Estructuras de decisión
if: http://arduino.cc/en/Reference/If
else: http://arduino.cc/en/Reference/Else
switch case: http://arduino.cc/en/Reference/SwitchCase
Estructuras de repetición
for: http://arduino.cc/en/Reference/For
while: http://arduino.cc/en/Reference/While
do .. while: http://arduino.cc/en/Reference/DoWhile
“if” (SI en español) es un estamento (declaraciones o instrucciones) que se utiliza para probar si una
determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima
de un cierto número y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si
es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están
dentro de las llaves. El formato para if es el siguiente:
if (unaVariable == valor)
{
Ejecuta esta Instrucciones;
}
Con respecto a las consideraciones a tener, respecto de las cargas a conectar, esto
significa, los componentes que conectaremos a nuestro Arduino, y que corriente consumen, y
cuanta corriente nuestro Arduino es capaz de suministrarles.
Ya vimos un ejemplo en el inciso 5.3 (Conectar un LED a la placa), siguiendo esa línea
recordemos que una señal eléctrica analógica es aquella en la que los valores de la tensión o
voltaje varían constantemente y pueden tomar cualquier valor.
Un sistema de control (como un microcontrolador) no tiene capacidad alguna para trabajar
con señales analógicas, de modo que necesita convertir las señales analógicas en señales
digitales para poder trabajar con ellas.
Cada uno de los 14 pines digitales (numerados del 0 al 13) pueden utilizarse como
entradas o como salidas usando las funciones pinMode(), digitalWrite() y digitalRead()(ver
Anexos 4.4 y 4.5, pp. 25). Las E/S operan a 5[V]. Cada pin puede proporcionar o recibir una
corriente máxima de 40[mA].
Los pines 3, 5, 6, 9, 10, y 11 proporcionan una salida PWM (modulación por ancho de
pulsos) de 8 bits de resolución (valores de 0 a 255) mediante la función analogWrite().
El pin digital 13 lleva conectado un LED integrado en la propia placa. Se encenderá cuando
dicho pin se configura como salida y adopte un valor HIGH; con valor LOW se apaga.
La placa tiene 6 entradas analógicas, y cada una de ellas proporciona una resolución de
10 bits (1024 valores enteros sin signo).
En este segundo programa, se va a mostrar cómo conectar una pantalla LCD 1602A a
una placa Arduino UNO para mostrar texto por pantalla.
Material usado
1xPantalla LCD 1602A
1xPlaca Arduino UNO
1xCable USB
Cables
1xProtoboard = Breadboard
1xpotenciómetro 50k
16x pines macho 2.54 mm
1xbobina de estaño
1x soldador
Antes que nada, observaremos la serigrafía escrita en los pines de nuestra pantalla, siendo la
siguiente:
La pantalla LCD viene sin conectores por defecto. Hay dos soluciones para este
problema: soldar cables o soldar pines machos de 2,54mm. He optado por la segunda opción
por la comodidad que representa (menos cable y acoplan perfectamente con la breadboard).
Circuito
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.
Conexión: Arduino 5V --> fila +
Conexión: Arduino GND --> fila -
Para probar la correcta conexión, encenderemos la placa Arduino UNO mediante el cable
USB al ordenador y veremos que la pantalla LCD se ilumina.
En el próximo paso, vamos a conectar la pantalla LCD a la placa Arduino UNO para que
se pueda mostrar el mensaje de texto que queramos.
Conexión: pin 4 de la LCD (RS)---> pin 7 del Arduino (salida digital, PWM)
Conexión: pin 5 de la LCD (RW) --> GND de la breadboard (fila -)
El código
Ahora hay que escribir el siguiente programa y transmitirlo a la placa Arduino UNO.
void setup() {
lcd.begin(16, 2); // inicializo el LCD
lcd.setCursor(0,1);
lcd.write("Hola mundo!");
}
void loop() { }
Cuando el código esté cargado y ejecutándose, la pantalla LCD mostrará el texto de esta forma.
9.1.1 Ejemplo de rango de valores entregados por un sensor resistivo tipo LDR.
Se desea utilizar una fotorresistencia para medir la luz ambiente. En ausencia de luz,
tiene una resistencia de 1[MΩ] y con luz ambiente (aprox. 10[lux]), 50[KΩ]. Encontrar el rango de
valores que serán leídos por la placa.
Configuración A)
Configuración B)
¿QUÉ ES UN POTENCIÓMETRO?
Normalmente un potenciómetro tiene tres terminales. Los dos extremos están unidos a
ambos lados de la pista, por lo que siempre registrarán la resistencia máxima Rmax. El terminal
restante corresponde con el contacto móvil. Este terminal varia su resistencia respecto a los otros
dos terminales a medida que accionamos el potenciómetro, siendo la suma de la resistencia a
los otros terminales igual a Rmax.
El esquema es el siguiente.
MONTAJE
El montaje necesario se muestra en la siguiente imagen
/*
Lectura Analógica Serial
Leer una entrada analógica del pin 0, muestra el resultado por el
Serial Monitor.
*/
const int analogPin = A0;
int value; //variable que almacena la lectura analógica raw
int position; //posición del potenciómetro en tanto por ciento
void setup()
// inicializa la comunicación serial en 9600 bits por segundo
{ Serial.begin(9600);
}
void loop()
{
value = analogRead(analogPin); // realizar la lectura analógica raw
position = map(value, 0, 1023, 0, 100); // convertir a porcentaje
Serial.println(position); //muestra el valor en el monitor serial
delay(1000);
}
PRECIO
Los sensores LM35 son baratos. Podemos encontrar un sensor LM35 por $ 40,0 a $ 50,0
en vendedores locales.
ESQUEMA ELÉCTRICO
EJEMPLO DE CÓDIGO
De la hoja de datos del LM35, sabemos que la relación a su salida es 10 [mV/ºC], y como
es una relación lineal, usando una simple regla de tres podemos calcular, que para una salida
de 1 [V] equivale a tener 100 [ºC] de temperatura ambiente, mucho, ¿no?.
1. En definitiva, sabemos que cuando tomamos un valor por el puerto analógico lo convertimos
a un valor DIGITAL (Valor del ADC) entero entre 0 y 1023 (1024), dadas las características
del conversor (CAD-> 2 10 = 1024) de Arduino.
2. Por lo tanto, estamos en presencia de solo un número (Valor del ADC), todavía no conocemos
la temperatura, el siguiente paso es encontrar el valor de tensión que corresponde a este
número, usando la relación lineal del gráfico anterior, primero escalamos el valor:
Regla de 3 simple:
Luego, Si:
10 [mV]--------------------> 1 ºC
Valor en milivoltios--------------------> ¿Temperatura ºC?
𝑉𝑎𝑙𝑜𝑟 𝑒𝑛 𝑚𝑖𝑙𝑖𝑣𝑜𝑙𝑡𝑖𝑜𝑠
Temperatura = 𝑥 1 [ºC]
10
void setup()
{
Serial.begin(9600);
}
void loop()
{
int Valor_del_ADC = analogRead(sensorPin);
float Valor_en_milivoltios = (Valor_del_ADC / 1023.0) * 5000;
float Temperatura = Valor_en_milivoltios / 10;
Serial.print(Temperatura);
Serial.println(" C");
delay(1000);
}
El DHT11 y el DHT22 son dos modelos de una misma familia de sensores, que permiten
realizar la medición simultánea de temperatura y humedad.
El DHT11 es un sensor muy limitado que podemos usar con fines de formación, pruebas,
o en proyectos que realmente no requieran una medición precisa.
Por el contrario, el modelo DHT22 tiene unas características mucho más aceptables.
EL DHT22 (sin llegar a ser en absoluto un sensor de alta precisión) tiene unas
características aceptables para que sea posible emplearlo en proyectos reales de monitorización
o registro, que requieran una precisión media.
Los sensores de temperatura y, aún más, los sensores de humedad, son sensores con
elevada inercia y tiempos de respuesta elevados. Es decir, son “lentos” para reflejar los cambios
en la medición.
PRECIO
El DHT11, el modelo inferior en características, es realmente barato. Podemos
encontrarlo en vendedores internacionales en Ebay y AliExpress por 0,70€.
ESQUEMA MONTAJE
La conexión del DH11 y el DHT22 son idénticas, ya que como hemos comentado la única
diferencia entre los modelos son sus prestaciones. En ambos casos, disponemos de 4 patillas,
de las cuales usaremos 3, Vcc, Output y GND.
En cada envío de medición el sensor envía un total de 40bits, en 4ms. Estos 40 bits
corresponden con 2 Bytes para la medición de humedad, 2 Bytes para la medición de
temperatura, más un Byte final para la comprobación de errores (8bit integral RH data + 8bit
decimal RH data + 8bit integral T data + 8bit decimal T data + 8bit check sum).
1 #include "DHT.h"
2
3 // Descomentar el sensor que Utd. Este usando.
4
5 //#define DHTTYPE DHT11 // DHT 11
6 define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
7 //#define DHTTYPE DHT21 // DHT 21 (AM2301)
8
9 // ***************** PIN OUT***********************************
10 // Connect pin 1 (on the left) of the sensor to +5V
11 // Connect pin 2 of the sensor to whatever your DHTPIN is
12 // Connect pin 4 (on the right) of the sensor to GROUND
13 // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
14 //*****************************************************************
15
16 const int DHTPin = 5; // what digital pin we're connected to
17
18 DHT dht(DHTPin, DHTTYPE);
19
20 void setup() {
21 Serial.begin(9600);
22 Serial.println("DHTxx test!");
23
24 dht.begin(); // inicializa el sensor
25 }
26
27 void loop() {
28 // Wait a few seconds between measurements.
29 delay(2000);
30
31 // Reading temperature or humidity takes about 250 milliseconds!
32 float h = dht.readHumidity();
33 float t = dht.readTemperature();
34
35 //*****LA FUNCION “isnan” verifica si hubo algún fallo
36
37 if (isnan(h) || isnan(t)) {
38 Serial.println("Failed to read from DHT sensor!");
39 return;
40 }