LABO3ELECTRICA20IV
LABO3ELECTRICA20IV
I. Objetivos
24
Arduino es una plataforma de electrónica de código abierto basada en hardware y
software fácil de usar. Las placas Arduino pueden leer entradas (tales como luz, temperatura
o distancia detectados por un sensor; un dedo en un botón o un mensaje de Twitter) y luego
procesar esos datos de entrada y bajo ciertas condiciones programables, producir una salida
u orden, tal como la activación de un motor, el encendido de un LED o publicar algo en línea.
Puede decirle a su Arduino qué hacer, enviando un conjunto de instrucciones al
microcontrolador incorporado en el mismo Arduino. Para hacerlo se utiliza el lenguaje de
programación Arduino y el software Arduino (IDE). En este curso usaremos el modelo Arduino
UNO, con su microcontrolador incorporado ATmega328, el cual posee entradas y salidas
digitales, así como entradas analógicas, pero no posee salidas analógicas.
Todas las tarjetas Arduino son Open Source, el software también es Open Source; ello
posibilita que puedan ser fabricadas por cualquiera o modificadas también al igual que su
software. Lo cual facilita su rápido desarrollo gracias a la contribución de usuarios de todo el
mundo.
Se utiliza la placa Arduino para crear objetos interactivos, leyendo datos de una gran
variedad de interruptores y sensores y controlar diferentes de tipos de luces, motores y otros
actuadores físicos. Los proyectos con Arduino pueden ser autónomos o comunicarse con un
programa (software) que se ejecute en tu computadora. El link para descargar el software
Arduino IDE es: https://www.arduino.cc/en/Main/Software
Pines Digitales: Ver parte derecha de la tarjeta. Pines digitales (E/S). En total 14, desde el
Pin 0 hasta el Pin 13. Los pines 0 y 1 tienen 2 funciones, son para comunicación serie, pero
también se pueden usar como pines de entrada/salida digital, sin embargo por comodidad
25
conviene usarlos sólo en último recurso ya que son pines destinados a usarlos en la
comunicación con la PC.
Pines Analógicos: Parte izquierda de la tarjeta. Pines analógicos (entrada). En total 6, desde
el A0 hasta el A5. Estos pines son solamente de entrada analógica, no son pines de salida.
Puerto USB: Ver lado derecho superior de la tarjeta: conector USB. A través de este puerto y
mediante un cable, se conecta la tarjeta Arduino a la PC. Por ahí se transmite el programa
que se escribe en la PC para cargar en la tarjeta y también conecta la alimentación eléctrica
de la tarjeta.
Una vez abierta la aplicación nos vamos a Herramientas Tarjeta Arduino UNO
26
Una vez seleccionado el modelo de nuestra placa tendremos que seleccionar el puerto
serie de la placa:
El esquema de programa solo está compuesto del void setup y el void loop, lo
adicional es comentarios, considerar que todo está en minúsculas.
void setup () {
void loop () {
Arduino es sensible a las mayúsculas y minúsculas, hay que tener mucho cuidado al
momento de programar.
27
Funciones de los Botones:
Las funciones que hemos visto pueden ir en el void setup() o en el void loop() :
Primero se ejecuta el void setup() una sola vez, luego se ejecuta el void loop() infinitas veces.
28
Sentencias o Instrucciones para valores digitales
pinMode(#pin, valor);
#pin - Número de pin del arduino que se va a configurar, varia de 0 a 13.
Valor - Su configuración puede ser OUTPUT (salida) e INPUT (Entrada)
Esta función normalmente debe ir el setup
digitalWrite(#pin, valor);
#pin - Número de pin del arduino que se va a colocar su valor, varia de 0 a 13.
Valor – Su configuración, puede ser HIGH, que significa 1 o LOW, que significa 0.
digitalRead(#pin);
#pin - Número de pin del arduino que se va a leer su estado, sólo puede ser un HIGH o un
LOW.
delay(t);
tiempo “t” - Esta expresado en milisegundos, indica la cantidad de tiempo que el programa
quedara en stop sin hacer nada.
analogRead(pin);
Lee el valor de tensión en el pin analógico especificado. La placa Arduino posee 6 canales
conectados a un conversor analógico digital de 10 bits. Esto significa que convertirá tensiones
entre 0 y 5 voltios a un número entero entre 0 y 1023. Esto proporciona una resolución en la
lectura de: 5 voltios / 1024 unidades, es decir, 0.0049 voltios (4.9mV) por unidad. El rango de
entrada puede ser cambiado usando la función analogReference().
analogWrite(pin,valor);
Escribe un valor analógico (PWM) en un pin. Puede ser usado para controlar la luminosidad
de un LED o la velocidad de un motor. Después de llamar a la función analogWrite(), el pin
generará una onda cuadrada estable con el ciclo de trabajo especificado hasta que se vuelva
a llamar a la función analogWrite() (o una llamada a las funciones digitalRead() o digitalWrite()
en el mismo pin). La frecuencia de la señal PWM será de aproximadamente 490 Hz. los
valores de analogRead van desde 0 a 1023 y los valores de analogWrite van desde 0 a 255
pin: Es el pin en el cual se quiere generar la señal PWM.
valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre
encendido).
Ejemplo: val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
29
Comunicación Serial
Se utiliza para la comunicación entre la placa Arduino y una PC u otros dispositivos. Todas
las placas Arduino tienen al menos un puerto serie Serial. Se comunica a través de los pines
digitales 0 (RX) y 1 (TX), así como con el ordenador mediante USB. Por lo tanto, si utilizas
estas funciones, no puedes usar los pines 0 y 1 como entrada o salida digital.
Puedes utilizar el monitor del puerto serie incorporado en el entorno Arduino para
comunicarte con la placa Arduino. Haz clic en el botón del monitor de puerto serie en la barra
de herramientas y selecciona la misma velocidad en baudios utilizada en la llamada begin().
Serial.begin(speed)
Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos
en serie. Para comunicarse con el ordenador, utilice una de estas velocidades: 300, 1200,
2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
Ejemplo: Serial.begin(9600);
Serial.read()
Lee los datos entrantes del puerto serie.
Serial.print(val,[format])
Imprime los datos al puerto serie como texto ASCII.
val - El valor a imprimir - de cualquier tipo
format - Especifica la base (formato) a usar; los valores permitidos son BYTE, BIN (binarios o
base 2), OCT (octales o base 8), DEC (decimales o base 10), HEX (hexadecimales o base
16). Para números de coma flotante, este parámetro especifica el número de posiciones
decimales a usar.
Serial.println(val,[format])
Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13,
o '\r') y un carácter de avance de línea (ASCII 10, o '\n').
Serial.available()
Devuelve el número de bytes (caracteres) disponibles para ser leídos por el puerto serie. Se
refiere a datos ya recibidos y disponibles en el buffer de recepción del puerto (que tiene una
capacidad de 128 bytes).
if (Serial.available() > 0)
{
//realiza la lectura del puerto serie}
30
Empleo de Variables:
Las variables se utilizan para guardar información de manera temporal. Ejemplo, si tenemos
el número 98 y deseamos almacenarlo en algún lugar, este lugar donde se almacenará se
conoce como variable. Las variables tienen una clasificación dependiendo del tipo de
información a almacenar.
Ejemplos: caracteres: “Hola” , entero: “234” , decimal: “2.84”, etc. Binario 11001010
Declaración de Variables
Las variables se declaran de cualquiera de las 2 siguientes formas:
tipoVariable nombreVariable;
tipoVariable nombreVariable = valorInicial;
En ambos casos uno define que nombre colocar a la variable, los tipos de Variables se basan
en el siguiente cuadro.
Los operadores matemáticos definen una determinada relación entre operandos. El resultado
se almacena en una variable y depende del tipo de variable con la que se esté tratando.
Si se intenta guardar el resultado de una división que no sea exacta en una variable
de tipo entero, el microcontrolador truncará el resultado y solo guardará en la variable la parte
entera, por lo tanto, es vital considerar el uso que se le dará a los datos para definir el tipo de
variables a utilizar.
c=a+b; e=(a+b)*(c+d);
d=a-b; x=x+3;
e= a*b; x=x-7;
d=a/b;
31
Operadores:
Comparación
Igual (==), Distinto (!=), Menor (<) Mayor (>), Menor o igual (<=), Mayor o igual (>=)
El resultado de la expresión devuelve “true” o “false”
x == y // x es igual a y
x != y // x no es igual a y
x < y // x es menor a y
x > y // x es mayor a y
x <= y // x es menor o igual a y
x >= y // x es mayor o igual a y
Asignaciones Compuestas:
Combinan una operación aritmética con una variable asignada.
Se usan comúnmente utilizadas en los bucles.
Ejemplo, x * = 3 hace que x se convierta en el triple del antiguo valor x y por lo tanto x es
reasignada al nuevo valor.
Booleanos:
Permiten realizar operaciones lógicas
Es posible anidar expresiones con paréntesis
And (&&), Or (||), Not (!)
(var1 == var2) && (var1 < var3) // var1 es igual a var2 y además var1 es menor que var3
(!var1) // La expresión es cierta si var1 es falso
Función Map
La función map nos permite cambiar el rango de una variable
Si tenemos una variable que tiene un rango, pero queremos cambiarlo, la función map crear
una nueva variable con el rango deseado, que depende de la variable inicial
Int b = map(a,RangoInicialInicial, RangoInicialFinal, RangoFinalInicial, RangoFinalFinal);
Donde a es la variable inicial con el rango no deseado.
Donde b es la variable con el rango deseado.
32
IV. EXPERIMENTO
Pines analógicos.
Tierra.
SCL (I2C) Reloj serie.
Pines digitales.
Puerto USB.
+5 V.
Botón reset.
SDA (I2C) Datos serie.
2. Con el uso del simulador Tinkercad, realice la siguiente conexión y escribir programa
para que el led parpadee infinitamente (conecte el pin digital 10 de la placa Arduino).
Tiempo en ON (alto) = 400 ms, Tiempo en OFF (bajo) = 200 ms.
void setup() {
pinMode(10,OUTPUT);
}
void loop() {
digitalWrite(10,HIGH);
delay(400);
digitalWrite(10,LOW);
delay(200);
}
Inicie la simulación y vea el procedimiento. ¿Qué pasaría si usamos una resistencia muy
baja? (10ohm) ¿Qué pasaría si la resistencia es muy elevada? (270kohm)
33
3. Usando el circuito anterior, adicione un botón pulsador. Mientras el pulsador
está presionado, el LED debe estar encendido, caso contrario, apagado. Utilice el
siguiente esquema.
void setup() {
pinMode(10,OUTPUT);
pinMode(11,INPUT);
}
void loop() {
digitalWrite(10,digitalRead(11));
}
Nota: Si usamos el símbolo “!” (admiración) significa “no” o “lo opuesto”. Es decir, si en la
última instrucción escribimos:
digitalWrite(10,!digitalRead(11));
34
4. Comunicación en serie
Al momento de iniciar la simulación, presione el botón que dice Serial Monitor como se
ve en la siguiente imagen;
35
5. Imprimir en el monitor serial un contador desde cero hasta infinito (delay 1
segundo). Use el siguiente programa:
int a = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(a);
a=a+1;
delay(1000);
}
36
7. Se usará un sensor ultrasónico para poder medir las distancias, para ello replicar el
siguiente circuito:
Nota: el pin de Trigger se conecta al pin 9 del Arduino, el pin Echo se conecta al pin
8 del Arduino y ambos leds superiores comparten tierra.
float distancia;
float tiempo;
int trig=9;
int echo=8;
void setup() {
Serial.begin(9600);
pinMode(trig, OUTPUT); /*activaciòn del pin 9 como salida: pulso ultrasónico */
pinMode(echo, INPUT); /*activación del pin 8 como entrada: tiempo del rebote */
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
void loop() {
digitalWrite(trig,LOW);/* Para estabilizar el sensor */
delayMicroseconds(5);
digitalWrite(trig,HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(echo,HIGH); /*Función para medir la longitud del pulso entrante */
distancia= float(0.0175*tiempo); /*Fórmula para calcular la distancia */
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
if (distancia<50){
37
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
}
if (distancia>200){
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
}
if (distancia>51 && distancia<199){
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
}
38