PRÁCTICAS EN ARDUINO & EPS32
ARDUINO es una plataforma de desarrollo soportada en una placa electrónica de hardware libre que incorpora un microcontrolador programable y una serie de terminales o pines analógicos y digitales, que permiten conectar entradas (sensores) y salidas (actuadores) para diseñar e implementar circuitos tecnológicos.
Esta plataforma fue inspirada en la placa Wiring (http://www.wiring.com), proyecto de Hernando Barragán, en
2003 en el Instituto de Diseño Interactivo Ivrea (Italia).
PLACA
DE HARDWARE LIBRE – ”OPEN-SOURCE”
Incorpora un microcontrolador
reprogramable tipo AVR,
arquitectura desarrollada y fabricada por la empresa ATMEL (http://www.atmel.com).
Los ficheros esquemáticos están
disponibles para descargar (http://es.crativecommons.org/licencia).
SOFTWARE
LIBRE, GRATIS y MULTIPLATAFORMA – “ENTORNO DE DESARROLLO”
Funciona en Linux, MacOS y Windows.
Los usuarios pueden ejecutarlo,
copiarlo y distribuirlo (a cualquiera y a cualquier lugar), estudiarlo,
cambiarlo y mejorarlo, sin tener que pedir ni pagar permisos al desarrollador
original ni a ninguna otra entidad específica. El software libre es asunto de
libertad, no de precio.
LENGUAJE
DE PROGRAMACIÓN LIBRE
Está inspirado en Processing (http://www.processing.org), desarrollado inicialmente por
Ben Fry y Casey Rea, construido en lenguaje Java.
El lenguaje Arduino se basa internamente en código
C/C++.
ENTRADAS Y SALIDAS DIGITALES
Dispone
de 14
pines de E/S digitales, numeradas desde 0 hasta la 13.
Aquí
se pueden conectar sensores para que la placa pueda recibir datos del entorno o
actuadores para que la placa pueda enviarles las órdenes pertinentes; los Leds se configuran como elementos de salida.
Todos
los pines funcionan a 5V y pueden proveer o recibir un máximo de 40 mA. No
obstante, internamente la placa agrupa los pines digitales de tal forma que tan
solo puedan aproximadamente con 100 mA a la vez. Esto quiere decir, que máximo se pueden tener
10 pines ofreciendo 20 mA a la vez.
Rx y Tx: Permiten
la comunicación sin recurrir a dispositivos externos, recibir directamente
datos en serie (Rx) o transmitirlos (Tx).
ENTRADAS ANALÓGICAS
Dispone
de 6
pines de entradas analógicas.
Pueden
recibir voltajes continuos de 0V a 5V. No obstante la placa solo puede operar
con valores digitales, por lo que es necesario una conversión previa del valor
analógico recibido a un valor digital lo más aproximado posible. (Esto lo
realiza un conversor A/D incorporado).
La
placa Arduino puede distinguir para el voltaje digital desde el valor 0 hasta
el 1023. Si en algún momento se requieran más pines digitales, los 6 pines
analógicos pueden ser usados (numerados del 14 al 19).
SALIDAS ANALÓGICAS (PWM)
Algunas
veces se necesita enviar al entorno señales analógicas, como variar la
velocidad de un motor, la frecuencia de un sonido emitido por un zumbador o
intensidad con la que luce un Led.
La
placa Arduino no dispone de salidas analógicas propiamente dichas sino que
utiliza algunos pines de salida digitales concretos para “simular” un
comportamiento analógico. Estos están marcado con la etiqueta PWM ~: 3,
5, 6, 9, 10 y 11.
PWM
- Pulse
Width Modulation: Modulación de Ancho de Pulso.
En
vez de emitir una señal continua, es una señal cuadrada formada por los pulsos
de frecuencia constante (aproximadamente 490 Hz).
ALIMENTACIÓN
El
voltaje de funcionamiento de la placa Arduino (el microcontrolador y el resto
de componentes) es de 5 V.
Conectando
la placa Arduino al computador mediante cable USB, la alimentación recibida
será regulada permanentemente a los 5V de trabajo y ofrece un máximo de hasta
500 mA de corriente (potencia consumida de unos 2,5 W).
La
placa Arduino está protegida mediante un polifusible reseteable que
automáticamente rompe la conexión hasta que las condiciones eléctricas vuelvan
a la normalidad.
CONECTOR
EXTERNO. Se puede enchufar una clavija de tipo “Jack”, de 2,1 milímetros.
Se
pueden conectar los bornes de una batería o fuente a los pines “Vin” (positivo)
y “GND” (negativo).
Si la
placa Arduino está alimentada mediante cable USB o por una fuente externa, se
puede conectar a este pin-hembra cualquier componente para que pueda recibir 5
V regulados. La corriente máxima generada será de 40 mA.
Entorno de Desarrollo Integrado. En el
caso de Arduino, se necesita un IDE que nos permita escribir y editar el
programa (llamado “sketch”), comprobar si hay errores, si es correcto para
grabarlo en la memoria del microcontrolador.
Conectar
la interfaz
Conectar la placa de Arduino UNO mediante
USB al PC.
Escoger
modelo de placa
Del
menú "tools" (herramientas) escoger la opción "board" (tarjeta) y de la lista se
selecciona el modelo de placa Arduino que tienes.
Elegir
el puerto Serial
Del
menú "tools" (herramientas) escoge la
opción "Serial Port" (puerto serial) y de
la lista el puerto que esté conectado.
Es un
bloque de código que tiene un nombre y un grupo de declaraciones que se
ejecutan cuando se llama a la función. Se pueden usar funciones integradas como
void setup(),
se ejecuta un sola vez; y void loop() se ejecutan de manera infinita.
La
función setup
( ) se
invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los
modos de trabajo de los pines o el puerto serie. Debe ser incluido en un
programa aunque no haya declaración para ejecutar.
void setup (
)
{
pinMode
(Led, OUTPUT); // configura al Led como salida
}
La
función loop
( ) se
ejecuta de forma cíclica, lo que posibilita que el programa este respondiendo
continuamente ante los eventos que se produzcan en la tarjeta.
void loop (
)
{
digitalWrite
(Led, HIGH);
// pone en 1 (5V)
el
terminal Led
delay (1000);
// espera un segundo (1000 ms)
digitalWrite
(Led,
LOW);
// pone en cero (0V)
el
terminal Led
delay (1000); //
espera un segundo (1000 ms)
}
Las
llaves sirven para definir el principio y el final de un bloque de
instrucciones. Se
utilizan para
los bloques de programación setup (), loop
(), etc.
Una llave
de apertura “{” siempre
debe ir seguida de una llave de cierre “}”, si no es así, el programa
al
compilarse dará errores.
El entorno
de programación de Arduino incluye una herramienta de gran utilidad para
comprobar el
total de llaves. Sólo tienes que hacer clic en el punto de inserción de una
llave abierta
e inmediatamente se marca el correspondiente cierre de ese bloque (llave
cerrada).
void setup (
)
{
El
punto y coma “;” se utiliza para separar
instrucciones en el lenguaje de programación de Arduino.
También se utiliza para separar elementos en una instrucción de tipo “bucle
for”.
void setup (
)
{
pinMode
(Led, OUTPUT); // configura al Led como salida
}
Los
bloques de comentarios o comentarios multilíneas son áreas de texto ignoradas
por el programa y se usan para describir códigos o comentarios que ayudan a
otras personas a entender parte del programa.
Inician con /* y
terminan con */ y
pueden abarcar varias líneas.
/*
Encender un
Led. Esta programación encenderá un led durante un segundo y luego se apaga
*/
Empieza
con // y
cada línea de código que se emplee debe iniciar con //. Son ignorados por el
programa y no ocupan espacio en memoria.
Las tabulaciones
de las instrucciones contenidas en el void
setup() o void loop(),
no
son estrictamente necesarias, se
utilizan como una manera ordenada, clara y cómoda de escribir el código para el
programa.
Es
una forma de llamar y almacenar un valor numérico para usarse después por el
programa. Una variable necesita ser declarada y, opcionalmente,
asignarle
el valor
que necesita para ser almacenado. Una
variable puede ser cualquier nombre o palabra que no sea una
palabra reservada
en el entorno de Arduino.
Ser descriptiva, para
hacer el código más
legible.
Las variables se declaran de varios tipos: byte, int (entero),
long (largo),
float (punto
flotante).
int Led
= 13; // se declara el Led como variable
entero y se ubica en el pin 13
Utilización de una Variable
Una
variable puede ser declarada al inicio del programa antes de la parte de
configuración setup(),
a nivel local dentro de las funciones, y, a veces, dentro de un
bloque,
como para los bucles del tipo if, for, etc.
Variables
Globales: cuando se declaran al inicio del sketch.
Variables
Locales: cuando se declaran en el interior
de alguna sección del void
setup() o void loop().
byte
Byte almacena un valor numérico de
8 bits sin puntos decimales. (0 a 255).
byte
electrónica = 180; //declara
“electrónica” como un tipo byte
int
Enteros son los tipos de datos
primario para almacenamiento de números sin puntos decimales y almacena un
valor numérico de 16 bits con un rango de – 32.768 a 32.767
byte
electrónica = 500; //declara
“electrónica” como un tipo entero
Nota: Las variables de tipo entero “int”
pueden sobrepasar su valor máximo o mínimo como consecuencia
de una operación.
long
Enteros
Largos son los tipos de datos extendido
sin puntos decimales, almacenados en un valor de 32 bits con un rango de -2147483648
a
2147483647.
float
Punto flotante u números que tienen
un punto decimal. Almacenan un valor de 32 bits con un rango de – 2.146.483.618 a 2.147.483.617
byte
electrónica = 3.14; //declara
“electrónica” como un tipo flotante
Nota: Los
números de punto flotante no son exactos, y pueden producir resultados
extraños
en
las comparaciones.
arrays
Existen array de variables de tipo
“boolean”, de tipo “int”, de tipo “float”, etc. Un array es una colección de
valores que son accedidos con un índice numérico. Cualquier valor en el array
debe llamarse escribiendo el nombre del array y el índice numérico del valor.
Los arrays indexados a cero, con el primer valor en el array comenzando con el
índice número 0. Un array necesita ser declarado y opcionalmente asignarle
valores antes de que puedan ser usados.
int
myArray[ ] = {value0, value1, value2, …;
int
myArray[6]; //declara un array de
enteros con 6 posiciones
myArray[4]
= 10; //asigna a la cuarta posición del
índice el valor 10
int
myArray[8] = {2,5,6,7}; //declara un array de 6 elementos e inicializa algunos de ellos
pinMode ()
Es comando se utiliza en la configuración
del setup ( ) que declara un pin como entrada
(INPUT) o
salida
(OUTPUT).
INPUT
o OUTPUT: Estas constantes son utilizadas para
definir, al comienzo del programa, el modo de
funcionamiento de
los pines mediante la instrucción pinMode de tal manera que el pin puede ser una entrada INPUT o una salida
OUTPUT.
pinMode (Led,
OUTPUT); //designa el pin 13 como salida digital
digitalWrite
Este
comando establece un pin, definido previamente como Output, el
valor de HIGH (Alto, + 5V) o LOW (Bajo,
0 V).
digitalWrite
(Led, HIGH); //coloca el Led en estado Alto
analogWrite
Se utiliza para
gestionar los pines de la señal PWM (Modulación por amplitud de pulsos)
analogWrite (pin, valor); //escribe “valor” en el pin definido como analógico
Si enviamos el valor 0 genera una salida de 0 voltios en el pin especificado; un valor de 255 genera una salida de 5 voltios de salida en el pin especificado.
analogWrite (11,
255); la salida del pin 11 sería una señal cuadrada con su máximo valor de
trabajo
analogWrite (11,
128); la salida del pin 11 sería una señal cuadrada con un valor de la mitad
que la anterior
………
for (int i=0; i
<=255; i = i+10) //bucle que
incrementa de 10 en 10 a la variable i
//hasta llegara a menor o igual a 255
analogWrite (5, i); //el led encenderá, según el
valor de i
delay (500); //espera 500 milisegundos
}
............
delay
Detiene
el programa durante un número especificado de tiempo
medido en milisegundos. 1000 equivale a 1 segundo.
delay (1000); //espera 1 segundo
digitalRead
Lee el valor de un pin (definido como
digital) dando un resultado HIGH (alto) o LOW (bajo). El pin se puede especificar
ya sea como una variable o una constante (0-13).
analogRead
Lee
el valor de un determinado pin definido como entrada analógica con una resolución
de 10
bits. Esta instrucción sólo funciona en los pines (0-5). El rango de valor que podemos
leer
oscila de 0 a 1023. Normalmente se almacena en
una variable que define el usuario.
valor
= analogRead
(pin); //asigna
a valor lo que lee en la entrada pin
x = y + 2;
y = x – 5;
a = b * 6;
p = m / 4;
Nota: Las operaciones se efectúan teniendo en cuenta el tipo de datos que se han definido (int, dbl, float,
etc.). Ejemplo: Si se ha definido
15 y 2 como “int” y se hace la operación 15/2
muestra como resultado 7 en lugar de 7,5 a que “int” no reconoce decimales.
Nota: Utilice el operador (int)
myFloat para convertir un tipo de variable
a otro sobre la marcha.
Por ejemplo,
i = (int)
2,5 establecerá
i igual a 2.
Las
asignaciones compuestas combinan
una operación aritmética con una variable
asignada. Estas son comúnmente utilizadas
en los bucles.
x ++ //
igual
que x = x + 1, o incrementar x en + 1
x -- //
igual
que x = x – 1, o
decrementar x en –
1
x
+= y
// igual
que x = x + y, o incrementar
x en +y
x
–= y // igual
que x = x – y,
o decrementar x en –y
x
*= y // igual
que x = x * y, o multiplicar x por y
x
/= y
// igual
que x = x / y, o dividir x por y
Nota:
Por ejemplo, x *=
2 hace que x se convierta en el doble del antiguo valor x y por lo tanto x es reasignada al nuevo
valor .
Operadores de Comparación
Las
comparaciones de una variable o constante con otra se utilizan con frecuencia
en las
estructuras condicionales
del tipo if, para
revisar si
una condición es verdadera.
== y
//
x es igual a y
x
!= y // x
no es igual a y
x <
y //
x es menor que y
x >
y //
x es mayor que y
x <= y
//
x es menor o igual que y
x
>= y //
x es mayor o igual que yOperadores Lógicos
Los
operadores lógicos se utilizan para comparar dos expresiones y
devolver un VERDADERO o FALSO dependiendo
del operador. Existen tres operadores lógicos,
AND (&&), OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if:
Logical AND:
if
(x > 0 && x < 5) // cierto
sólo si las dos expresiones son ciertas
Logical OR:
if
(x > 0 || y > 0) //
cierto si una cualquiera de las
expresiones es cierta
Logical NOT:
if
(!(x > 0)) //
cierto solo si la expresión es
falsa
Son instrucciones que permiten tomar decisiones y hacer
diversas repeticiones de acuerdo a unos parámetros, dentro de las más
importantes se destacan:
if
Switch/case
for
while
Switch/case
for
while
Sirve para comprobar si una
condición determinada es cierta (“true”, 1) o falsa (“false”,
0).
Si la condición es cierta, se
ejecutarán las instrucciones escritas en su interior (dentro de las llaves). Si no se cumple, puede no pasar
nada, o bien, si se tiene además de “if”, el bloque “else” (opcional) entonces
se ejecutarán las instrucciones escritas en el interior de “else”.
También existe la posibilidad de
incluir una o varias secciones “else if”, siendo también opcional el bloque
“else” final.
Existe una manera más elegante,
cómoda y fácil de hacer comprobaciones de condiciones múltiples, utilizando el
bloque “switch”.
Mientras, en inglés. Es un bloque
que implementa un bucle, es decir, repite la ejecución de las instrucciones que
están dentro de sus llaves de apertura y cierre. Se repetirán mientras la
condición especificada, entre sus paréntesis, sea cierta (“true”, 1).
El bucle “do” funciona exactamente igual que el bucle “while”, con la
diferencia que la condición es evaluada después de ejecutar las instrucciones
escritas dentro de las llaves. Las instrucciones son ejecutadas como mínimo una
vez aun cuando la condición sea falsa.
En el bucle “for” el número de iteraciones se puede fijar a un valor
exacto o concreto de veces.
Valor inicial del contador: x=0; se fijará la variable “x” a
cero al inicio del bucle.
Condición final del bucle: x<10; si la condición se
evalúa como falsa, se finaliza el bucle “for”, en este caso se ejecutará
únicamente cuando la variable “x” valga menos de 10.
Incremento del contador: x=x+1; se le sumará 1 a la
variable “x” antes de cada nueva iteración del bucle, es decir un contador que
aumenta de uno en uno a cada repetición.
POTENCIÓMETRO
Es una resistencia variable de tres terminales controlable por su pin central. Un extremo se conecta a un voltaje de +5V, el otro extremo a tierra. El pin central recibe una señal analógica del Arduino (A0). Un valor sugerido para el potenciómetro es de 10KW.
El valor de
valorPot es un valor de voltaje. Los valores obtenidos de analogRead () van
desde 0 a 1023 y los valores que queremos de voltaje están de 0 a 5, entonces
el valorPot lo multiplicamos con 5 y lo dividimos en 1023.
INTERRUPTORES
El Arduino leerá el estado de un interruptor
pulsador normalmente abierto y muestra los resultados en el PC con la orden Serial.println
().
Abra la ventana del monitor serial.
Cuando el interruptor está abierto, debería ver un
tren de 1 de la pantalla.
Cuando está cerrado, el cambio será de 1 a 0.
Controlando el encendido y apagado
del led, por medio de un PULSADOR
SONIDO: CIRCUITOS PREAMPLIFICADORES
:::::::::::::::::
CIRCUITOS MATEMÁTICOS
........................................................................................................................................................
TINKERCAD es un software gratuito online creado por la empresa Autodesk, una de las empresas importantes en el software de diseño 3D.
De entre
sus utilidades, probablemente la más conocida es la de diseñar piezas en 3D.
Sin embargo, ofrece también una posibilidad realmente interesante y es la de programar, implementar y simular circuitos con Arduino.
Se utiliza de forma gratuita, es necesario tener una cuenta de
correo para ingresar como
usuario y que sólo posee una
versión online, por lo que se
requiere conexión a Internet.
Para utilizarlo sólo debes registrarse en
la web Tinkercad, es gratuita
Para iniciar, dar clic en CIRCUITS
Clic en Crear nuevo circuito
Dar un nuevo nombre al proyecto
PRÁCTICA 1. ENCENDER UN LED
AÑADIR COMPONENTES
Se selecciona los elementos a utilizar como Tarjeta Arduino, Protoboard, Led y Resistencia.
Se ubican en la pantalla
Los elementos se pueden girar (rotar) y a los cables cambiar de colores.
Luego se da paso a la programación del Arduino: Por bloques, Bloques+texto, Texto.
Y se escribe la programación para ENCENDER UN LED:
Después de haber incorporado el código,
entonces se SIMULA LA APLICACIÓN
PRÁCTICA 2. ENCENDER VARIOS LEDS
Dar un nuevo nombre al proyecto
Se ubican en la pantalla, los elementos a utilizar:
PRÁCTICA 3. RETO: INTERSECCIÓN DE SEMÁFOROS
Utilizando TINKERCAD, diseñar
un cruce de semáforos con 6 Leds que lleven una secuencia lógica para su
funcionamiento óptimo.
.............................................................................................................
VIDEO: APRENDIENDO ARDUINO CON TINKERCAD
Autor: Alvaro Acosta Agón
YouTube: https://youtu.be/zugx7HnBL5s
https://www.youtube.com/watch?v=zugx7HnBL5s&feature=youtu.be
VIDEO: APRENDIENDO ARDUINO CON TINKERCAD
Autor: Alvaro Acosta Agón
YouTube: https://youtu.be/zugx7HnBL5s
https://www.youtube.com/watch?v=zugx7HnBL5s&feature=youtu.be
............................................................................................................
PRÁCTICA 4. PRÁCTICA CON EL POTENCIÓMETRO
Implemente el circuito y gire el control del potenciómetro. Qué sucede el circuito cuando está en la escala de 0 Ohmios y luego en la escala máxima de 5 K-Ohmios.
Cambiamos el valor de la resistencia de 1000 Ohmios a
una de 100 Ohmios. Gire el potenciómetro. Qué sucede el
circuito cuando está en la escala máxima de 5 K-Ohmios y
luego en la escala mínima de 0 Ohmios.
Quitamos la resistencia, conectando directamente el led al negativo de la fuente. Gire el potenciómetro. Qué sucede el
circuito cuando está en la escala máxima de 5 K-Ohmios y
luego en la escala mínima de 0 ohmios.
PRÁCTICA 5. CONVERSIÓN DE AC/DC CON EL POTENCIÓMETRO
Gire el potenciómetro revise si se
cumplen la condición dada para el encendido del Led.
En el Código se selecciona sólo texto y se escribe la programación:
PRÁCTICA 6. LECTURA DEL POTENCIÓMETRO
Gire el potenciómetro de menor a mayor
valor en ohmios y revise si se cumplen las condiciones dadas para el encendido
del Led, mirando lo que se presenta en el monitor serial.
PRÁCTICA 7. PULSO PMW CON EL POTENCIÓMETRO
Gire el potenciómetro, ubicándolo en tres
posiciones 0 Ohmios (0%), 125 K-Ohmios (50%) y 250 K-Ohmios (100%), describa la señal de onda que
aparece a la salida en el osciloscopio.
En el Código se selecciona sólo texto y se escribe la programación:
PRÁCTICA 8. RETO: ENCENDIDO DE UN LED EN FUNCIÓN DE LA LUZ
Realice
el encendido de un led de acuerdo al funcionamiento de una fotocelda.
Cuando
la luz se encuentre entre 0 y 512 el led debe colocarse en el nivel de potencia
máxima (255), si la luz se encuentra entre valores 512 y 1023 él debe lucir al
nivel de potencia baja (64).
PRÁCTICA 9. ENCENDER UN LED CON UN PULSADOR
Realice el encendido de un led de acuerdo a la operatividad del pulsador, si está cerrado se enciende el led, de lo contrario se apagará.
Código de Programación (2):
PRÁCTICA 10. RETO: ENCENDER UN LED CON DOS PULSADORES
Control de un led con dos pulsadores: cuando se cierren los dos pulsadores, el led enciende, de lo contario, se apagaría.
COMPUERTA AND
if (x > 0 || y > 0) // cierto si una cualquiera de las expresiones es cierta
ESP32 es la denominación de una familia de chips
SoC (System on Chip), de bajo coste y consumo de energía, con tecnología Wi-Fi
y Bluetooth de modo dual integrada.
Cuenta con un poderoso procesador de doble núcleo
capaz de ejecutar un Sistema Operativo en Tiempo Real (RTOS) y el stack TCP/IP
(con soporte para TLS) necesario para las comunicaciones a través de internet.
Además, cuenta con cantidades apropiadas de RAM y Flash para soportar
aplicaciones complejas.
El ESP32 emplea un microprocesador Tensilica
Xtensa LX6 poseen un alto nivel de integración:
• Interruptores de antena
• Balun de RF (Radio Frecuencia)
• Amplificador de potencia
• Amplificador de recepción de bajo ruido
• Filtros y módulos de administración de energía
Su
código más utilizado es Arduino con la librería Esp32, aunque este tiene muchas
variantes, por ahora solo mencionaremos el Esp32 Woorn.
Este Esp32 cuenta con un truco para poder ser
identificado si es original o fake, este truco va en el Arduino: primero es
mirar si ya se descargó la librería Arduino o mantener el botón BOOT pulsado en
el tiempo que demore para mandar el código, además este cuenta con otro botón
que es RESET o EN para reiniciar el programa cargado. En algunos libros o
páginas webs, los pines se llaman 12D pero en el Esp32 se llaman 12G.
Los pines GPIO34, GPIO35, GPIO36 (VP)
Y GPIO39 (VN) no se pueden configurar como salidas, se pueden utilizar como
entradas digitales o analógicas, o para otros fines. También carecen de
resistencias internas pull-up y pull-down, a diferencia de los otros pines
GPIO.
ENCENDER LEDS
0 Comentarios