Está en la página 1de 26

Laboratorio I

Introducción a Arduino
Iván Ferrari*
Abril, 2021

* Ingeniero Químico, FCAI-UNCuyo. Profesor Adjunto, Laboratorio I, departamento de Ingeniería Mecánica

1
Arduino: módulos adicionales Laboratorio I

Contenido
1 Curso de Introducción a Arduino 3
1.1 ¿Qué es Arduino? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Proyectos que utilizan Arduino 5

3 Partes de una placa 6


3.1 Distintas placas de Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Distintos modelos de placas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Estructura de un proyecto típico usando Arduino 8


4.1 Protoboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5 Programación en Arduino 9
5.1 Programa mínimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2 Importando librerías y comentando el código . . . . . . . . . . . . . . . . . . . . . . . 9
5.3 Encencer un Led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.4 Comunicación Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.5 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.6 Operadores de comparación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.7 Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.8 Control de flujo: if, if/else, if/else if/ else . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.9 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.10 Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.11 Uso del pulsador y pin de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.12 Uso de pulsador estable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.13 Buenas prácticas de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.14 Pseudocódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.15 Comparación entre Arduino y PLCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 2


Arduino: módulos adicionales Laboratorio I

1 Curso de Introducción a Arduino


En esta serie veremos qué es Arduino, cómo funciona, cómo programar y cómo desarrollar distin-
tos proyectos usando esta plataforma
Todo esto será explicado para trabajar tanto con una placa real, como usando el simulador web
de tinkercad, que es gratuito y muy completo Por lo que no necesitan tener una placa real ni otros
elementos para segir este curso.
Usando una placa real conectada a la computadora y programando con Arduino IDE

Usando el simulador gratuito de www.tinkercad.com

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 3


Arduino: módulos adicionales Laboratorio I

No necesitan tener una placa real, ni ningún otro elemento más que un navegador web para seguir
este curso!

1.1 ¿Qué es Arduino?


Arduino es una plataforma de desarrollo para proyectos electrónicos, está basada en hardware y
software libre. Incluye:
• Placas de de desarrollo con un microcontrolador y los dispositivos necesarios para que este
funcione
• El entorno de desarrollo para programarla
• La comunidad de numerosos usuarios y desarrolladores. Estos generan y comparten con-
stantemente información de todo tipo desde respuestas a preguntas y tutoriales hasta
proyectos completos.
Arduino es de código abierto acercando y haciendo más fácil para todos interactuar diseñar y
trabajar con dispositivos electrónicos
Antes de este tipo de placas, era necesario diseñar y construir todo el circuito de base para un
microcontrolador, cristal que da la frecuencia, regualdores para la alimentación, perisféricos entre
otros. En cambio la placa arduino empaqueta todo de modo que está lista para conectar programar
y utilizar el mircrocontrolador.
Ademas al ser de código abierto se puede estudiar modficiar replicar, vender, crear verionses
comerciales.. etc, por lo que existen numerosas proyectos que crean variaciones de las placas más
populares
El universo de Arduino crece constantemente basándose en los aportes de la comunidad de
hardaware libre

1.2 Microcontrolador
Es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria.
Compuesto de varios bloques funcionales que cumplen una tarea específica. Incluye en su interior
las tres principales unidades funcionales de una computadora: * cpu * memoria * perisféricos de
entrada y salida
Es un computador completo en un solo circuito integrado. Por
ejemplo, el arduino UNO utiliza un micropocesador atmega 328p:

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 4


Arduino: módulos adicionales Laboratorio I

Sin embargo,no tiene el poder de cálculo de una computadora de escritorio moderna. No se puede
instalar un sistema operativo. El microprocesador es pequeño y limitado por ejemplo un arduino
Uno tiene 2KB de RAM (siendo 1GB igual a ~1 millon de KB)
Sirve para proyectos electrónicos que debajo consumo y pequeño tamaño.

2 Proyectos que utilizan Arduino


La placa de Arduino sirve en especial para proyectos electrónicos pequeños y medianos donde
se busca controlar otros dispositivos electrónicos, tomar datos de sensores, analógicos o digitales,
conectarse con actuadores y otros dispositivos de entrada salida, botones, pantallas entre muchos
otros más.
Arduino es ideal para aprender cómo funcionan los dispositivos electrónicos interactuando de
cerca con las funciones del hardware.
El desarrollo de un proyecto en Arduino suele ser altamente eficaz, por lo que puede usarse para
realizar prototipos de dispositivos que luego pasarán a producción y comercialización
Además es el corazón de muchos modelos de dispositivos populares como: impresoras 3D, CNC
routers, drones

También es ampliamente usado en áreas en desarrollo como internet de las cosas (IOT), domótica
y robótica ligera de código abierto

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 5


Arduino: módulos adicionales Laboratorio I

3 Partes de una placa

* micro-
controlador * pines de energía, pines analógicos, pines digitales pwm y comunicación, * com-
ponentes de almentación y regulación de voltaje * componentes de conexión USB para energía y
comunicación, chip de usb a serial IC(integrated circuit)y Bootloader
(antes se programaba el micropocesador y luego se montaba en el circuito, en arduino es mas facil
porque incluye el dispositibo necesario para programar conectando desde un usb)

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 6


Arduino: módulos adicionales Laboratorio I

3.1 Distintas placas de Arduino


Existen distintas tarjetas arduino, la más conocida, por ser la primera en desarrollarse, es la placa
Arduino UNO.
Las que tienen el logo de Arduino son originelas y por ser de código abierto existen también clones
que son maś económicos por sus materiales de construcción, pero son totalmente compatibles y
de igual funcionamiento al original.
También existen placas basadas en la UNO que traen algunas diferencias de diseño y siguen
siendo compatibles para proyectos desarrollados para Arduino UNO

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 7


Arduino: módulos adicionales Laboratorio I

3.2 Distintos modelos de placas


Existen distintos modelos basadas de placas compatibles con Arduino equipadas con distintos
procesadores, distinta cantidad de pines, distintas capacidades de procesamiento. La mayoría
funcionan a 5V y algunas de ellas incluyen versiones de 3.3V.

Se programan con el mismo lenguaje, pero varían en su capacidad de cálculo, cada año sale nuevas
versiones y nuevos modelos

4 Estructura de un proyecto típico usando Arduino


En los distintos proyectos de electrónica, por un lado vamos a diseñar la conexión de los elemen-
tos necesarios para nuestro proyecto, por ejemplo, sensores botones, actuadores, pantallas lcd,
dispositivos de comunicación, y por otro vamos a programar la lógica con la cual la placa va a
controlar a todos ellos
En el entorno de desarrollo integrado IDE escribímos el código en lenguaje Arduino que es un
subconjunto de c++ y el compilador lo convierte código binario, que es el lenguaje digital que
entienden el microcontrolador

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 8


Arduino: módulos adicionales Laboratorio I

4.1 Protoboard
Placa para realizar conexiones de prueba

5 Programación en Arduino
El lenguaje usado por Arduino es un subconjunto del lenguaje C++ con varias funciones propias
para el uso del microcontrolador.

5.1 Programa mínimo


El mínimo código que podemos compilar y subir a una placa es el que se ve a continuación. Donde
se incluyen: * void setup(): esta es una función tipo void, es decir que no devuelve ningún tipo de
dato (ya veremos más adelante otras funciones), que se ejecuta una sola vez, al iniciar la placa. En
esta función se declara la confiruracioń, uso de pines, comunicación etc. * void loop(): esta es una
función, también de tipo void, que se ejecuta una y otra vez en un bucle continuo, mientras esté
conectdada la placa
En este mínimo ejemplo ambas funciones están vacías y el programa no realiza ninguna acción.
Sin embargo un sketch de Arduino debe incluir ambas para poder ser compilado

[ ]: void setup() {
}

void loop() {
}

5.2 Importando librerías y comentando el código


En el siguiente ejemplo se ve en la primera línea la sentencia
#include "Arduino.h"

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 9


Arduino: módulos adicionales Laboratorio I

De esta forma se importan las distintas librerías que ser requieran para el código. La librería
Arduino.h es la que trae todas las funciones básicas específicas de Arduino y siempre es incluida
por el compilador por lo que no es necesario declararla. Aquí se incluye a modo de ejemplo.
Además se muuestran dos formas re realizar comentarios. Los comentarios son textos que serán
ignorados por el compilador pero son fundamentales para documentar el código y hacerlo más
legible. Ya sea cuando el código lo lee un programador distinto al que lo escribió, o cuando lo lee
el mismo tiempo despues de olvidar los detalles de funcionamiento del mismo.
• Utilizando /* inicia un bloque de comentarios que termina con */
• Utilizando // se crea un comentario hasta el siguiente salto de línea
Producir un código bien documentado es parte de las buenas prácticas de programación. Los
comentarios de el siguiente código sirven a modo de ejemplo e introducción. No deben re-
alizarse cometnarios de cosas que resulten evidentes y en general es mejor que los nombres de
las funciones y variables muestren clarametne su función, a esto se le denomina un código auto-
documentado. El objetivo final es siempre auntar la claridad del código

[ ]: /*
Esto es un bloque de comentario, será ignorado por el compilador
es útil para documentar el código
*/

# include "Arduino.h" //esto es un comentario: no es necesario incluir


,→Arduino.h

void setup() {
//Aquí va el código que se ejecuta una sola vez
}

void loop() {
//Aquí va el código que se ejecuta en una y otra vez de forma continua
}

5.3 Encencer un Led


Este es el “hola mundo” de la programación en Arduino, ya que típicamente en los proyectos
electrónicos siempre puede usarse un led como salida para indicar un estado, siendo esta la forma
de comunicación más simple.
En el void setup() se declara qué pines se van a usar mediante la función pinMode(13, OUPUT),
que nos dice que usaremos el pin 13 como salida
En el void loop() se ejecuta la acción del sketch una y otra vez: * digitalWrite(13,HIGH) pone
al pin 13 en estado alto, es decir +5V, enciende el LED * delay(1000) hace una pausa de 1000
milisegundos, es decir un segundo (el led sigue encendido) * digitalWrite(13, LOW) pone al pin
13 en estado bajo, es decir 0V, apaga al led * delay(1000) pausa de 1 segundo (el led sigue apagado)
Importante: en C++ así como en Arduino se debe colocar ; al final de cada instrucción

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 10


Arduino: módulos adicionales Laboratorio I

En la im-
agen se muestra la conexión de componentes a la placa Arduino, se considera que los ejemplos
posteriores siguen usando la última conexión mostrada hasta que se presente una nueva.

[ ]: void setup(){ // función configuración: se ejecuta al inicio


pinMode(13, OUTPUT); // fija al pin 13 como pin de salida
}

void loop(){ // función loop: se ejecuta una y otra vez...


digitalWrite(13, HIGH); // pin 13 en estado HIGH (+5V) enciende el led
delay(1000); // espera 1000 milisegundos... el led sigue encendido
digitalWrite(13, LOW); // pin 13 en estado LOW (0 V) apaga el led
delay(1000); // espera 1000 milisegundos ... el led sigue apagado
}

5.4 Comunicación Serial


Podemos aprobechar la conexión USB del Arduino a la computadora para establecer una comu-
nicación Serial. No necesariamete se usa este protocolo para conectarse a una computadora de
mesa, sino a cualquier dispositivo compatible, como otro arduino u otra placa, etc.
En la imagen se muestra como acceder al monitor serial en Arduino ide y en el simulador de
Tinkercad

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 11


Arduino: módulos adicionales Laboratorio I

En el siguietne sketch se muestra un ejemplo básico de comunicación Serial. En la línea 3 se inicial


la comunicación a 9600 baudios dentro del void setup. En las líneas 8 y 11 se imprime un mensaje
por el puerto serial. Ambas líneas muestran dos métodos alternativos para incluir un salto de
línea, de lo contrario se imprime cada fragmento uno a continuación del otro.

[ ]: void setup(){
pinMode(13, OUTPUT);
Serial.begin(9600); // inicia la comunicación por el puerto serial a
,→9600 baudios

void loop(){
digitalWrite(13, HIGH);
Serial.print("ON\n") // imprime el mensaje "ON" usa "\n" para el salto
,→de línea

delay(1000);
digitalWrite(13, LOW);
Serial.println("OFF"); // imprime "OFF", la función Serial.println()
,→incluye el salto de línea

delay(1000);
}

5.5 Variables
Hasta ahora tenemos un ejemplo de base donde controlamos un led, establecimos comunicación
con nuestra computadora y podemos ver los mensajes por el monitor serial. Es buen momento
para introducir algunos conceptos básicos de programación.
Empecemos viendo los tipos de datos que se usan en el lenguaje de Arduino, pueden ver la lista
completa en este enlace.
<img src=“i/variables.png” width=“10000”)>
En el siguiente ejemplo se muestra el uso de los tipos de datos más comunes en Arduino. Lo

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 12


Arduino: módulos adicionales Laboratorio I

primero que hay que destacar es que cada variable se define con:
<tipo de dato> <nombre de la variable> = <valor de inicialización>;
Aunque en realidad podríamos
Ver en simulador
[ ]: /*
Sketch con ejemplo en el uso de variables
*/
# define LED 13 // define reemplaza el valor antes de
,→compilar

bool verdad=true; //variable boolean puede ser true o false, 1


,→o 0

String texto ="Hola Arduino"; // cadena de caracteres

String textoEntero="variable tipo entero: ";


int numeroEntero= 32767; // variable int entre -32768 y 32767
unsigned int numeroEntero2=32769; // variable int "sin signo" entre 0 y 65536
long numeroEntero3=70000; //

float numeroDecimal=0.03; // variable con punto flotante


double numeroDecimal2=0.00003; // variable con doble presición de punto
,→flotante

void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
Serial.println(texto);

Serial.print(textoEntero);
Serial.println(numeroEntero);

Serial.print("variable tipo unsigned int: ");


Serial.println(numeroEntero2);

Serial.print("variable tipo long: ");


Serial.println(numeroEntero3);

Serial.println(numeroDecimal);
Serial.println(2*numeroDecimal2);
}

void loop(){
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 13


Arduino: módulos adicionales Laboratorio I

delay(1000);
}

5.6 Operadores de comparación


Devuelven un valor boolean (0,1), suponga que declaramos dos enteros, a y b * $ a == b $ true
si a y b son iguales * a ! = b true si a y b son distintos * a < b true si es a menor que b *
a =< b true si es a menor o igual que b

5.7 Operadores lógicos


Para obtener un valor boolean a partir de una operación entre dos valores boolean. Por ejemplo,
suponga que A y B son valores boolean, las siguientes operanciones son equivalentes y devuelven
true cuando A y B son true

A && B A and B

A continuación, una lista de valos operadores lógicos más comunes, con sus dos formas de expre-
sión posible dentro del lenguaje * and, && * or, ||
• not, !
Otros operadores lógicos. . . * xor, ˆ * and_eq, &= * bitand, & * bitor, | * not_eq, != * or_eq, |= *
xor_eq, ˆ=

5.8 Control de flujo: if, if/else, if/else if/ else

En el siguiente ejemplo se compara un valor transmitido por el puerto se-


rial y convertido a int, según sea mayor, igual o menor al valor de a

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 14


Arduino: módulos adicionales Laboratorio I

enciende uno de los 3 leds que tiene conectado. ver en el simulador

[ ]: /*
Sketch condicionales para encender un led
*/
int a=1;
int b;
String mensaje;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600); // inicia la comunicación serial
}

void loop(){
mensaje=Serial.readString();
if(mensaje!=""){
b=mensaje.toInt();

if(a>b){
digitalWrite(13,HIGH);

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 15


Arduino: módulos adicionales Laboratorio I

Serial.println("mayor");
delay(1500);
digitalWrite(13,LOW);
}
else if(a==b){
digitalWrite(12, HIGH);
Serial.println("igual");
delay(1500);
digitalWrite(12,LOW);
}
else{
digitalWrite(11, HIGH);
Serial.println("menor");
delay(1500);
digitalWrite(11,LOW);
}
}
}

Podríamos colocar tantos “else if” anidados como necesitemos, pero para aquellas situaciones
en las que tenemos que controlar el flujo entre varias opciones tenermos la estructura de control
switch. . . case
[ ]: switch (mensaje) {
case "":
// statements
break;
case "ON_led1":
encender_led_1();
// statements
break;
default:
// statements
break;
}

5.9 Funciones
Podemos tomar el código anterior y modificarlo de modo que el bloque que se ejecuta para en-
cender cada led esté contenido en una función void. De este modo el código del loop resulta más
claro, además las funciones podrían reutilizarse en otra parte del código. simulador

[ ]: /*
Sketch básico ejemplo de uso de fucniones
*/
int a=1;
int b;

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 16


Arduino: módulos adicionales Laboratorio I

String mensaje;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600); // inicia la comunicación serial

void rojo(){ //enciende el led rojo por 1,5 segundos


digitalWrite(13,HIGH);
Serial.println("mayor");
delay(1500);
digitalWrite(13,LOW);
}

void azul(){ // enciende el led azul...


digitalWrite(12, HIGH);
Serial.println("igual");
delay(1500);
digitalWrite(12,LOW);
}
void verde(){ // enciende el led verde
digitalWrite(11, HIGH);
Serial.println("menor");
delay(1500);
digitalWrite(11,LOW);
}

void loop(){
mensaje=Serial.readString();
b=mensaje.toInt();

if(a>b){
rojo(); // llama a la función del led rojo
}
else if(a==b){
azul(); // llama a la función del led azul
}
else{
verde(); // llama a la función del led verde
}
}

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 17


Arduino: módulos adicionales Laboratorio I

[ ]: # define rojo 13
# define azul 12
# define verde 11

int a=10; //valor fijado


int b; //valor del monitor serial
String mensaje;

void encender_led(int led, String mensaje){


digitalWrite(led,HIGH);
Serial.println(mensaje);
delay(1500);
digitalWrite(led,LOW);
}

void setup(){
pinMode(rojo, OUTPUT);
pinMode(azul, OUTPUT);
pinMode(verde, OUTPUT);
Serial.begin(9600); // inicia la comunicación serial
}

void loop(){
mensaje=Serial.readString();
if (mensaje!=""){
b=mensaje.toInt();
if(a>b){
encender_led(rojo, "mayor");
}
else if(a==b){
encender_led(azul, "igual");
}
else{
encender_led(verde, "menor");
}
}
}

5.10 Bucles
Es muy común en un programa, tener que realizar una operación similar varias veces, para esto
existen estructuras de control llamadas bucles. En esta sección veremos las dos más usadas for,
while y do. . . while. Existen otras estructuras que pueden consultar en la web de referencia de
Arduino
Veamos un ejemplo donde queremos ver por el monitor serial los n primeros números natu-
rales,para n=3

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 18


Arduino: módulos adicionales Laboratorio I

[ ]: /*
Sketch con ejemplos para usar bucles
*/
int n=3;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);

for (int i=1; i<4; i++){ // para i=0 hasta i<4, en cada paso i=i+1
(actualiza i)
,→

Serial.print("for: "); // ejecuta este bloque ...


Serial.println(i); // ...
}

int i=1; // i=1


while(i<(n+1)){ // mientras i<4
Serial.print("while: "); // ejecuta este bloque ...
Serial.println(i); // ...
i=i+1; // i=i+1 (actualiza el valor de i)
}

int j=1; // j=1


do{ // ejecuta este bloque al menos una vez ...
Serial.print("do...while: "); // ...
Serial.println(j); // ...
j++; // j=j+1 (actualiza j)
}while(j<(n+1)); // sigue ejecutando el bloque anterior
,→mientras j<4

void loop()
{

for: 1
for: 2
for: 3
while: 1
while: 2
while: 3
do...while: 1
do...while: 2

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 19


Arduino: módulos adicionales Laboratorio I

do...while: 3
Diferencia entre while y do. . . while

En el siguiente ejemplo se muestra como podemos usar los bucles definidos para controlar varios
leds. ver en el simulador

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 20


Arduino: módulos adicionales Laboratorio I

[ ]: /*
Sketch con ejemplos para controlar leds usando bucles
*/
int n=3;

void setup()
{
Serial.begin(9600);

int i=1; // i=1


while(i<(n+1)){ // mientras i<4
pinMode(i, OUTPUT); // ...
i=i+1; // i=i+1 (actualiza el valor de i)
}
}

void loop()
{
int j=1; // j=1
do{ // ejecuta este bloque al menos una vez ...
digitalWrite(j,HIGH); // ...
delay(500);
j++; // j=j+1 (actualiza j)

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 21


Arduino: módulos adicionales Laboratorio I

}while(j<(n+1)); // sigue ejecutando el bloque anterior


mientras j<4
,→

for (int i=3; i>0; i--){ // para i=0 mientras i<4, en cada paso i=i+1
(actualiza i)
,→

digitalWrite(i, LOW); // ejecuta este bloque ...


delay(500); // ...
}
}

5.11 Uso del pulsador y pin de entrada


ver en el simulador

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 22


Arduino: módulos adicionales Laboratorio I

[ ]: void setup(){
pinMode(13, OUTPUT);
pinMode(2, INPUT);
Serial.begin(9600); //inicia comunicación serial
}
void loop(){
if(digitalRead(2)==HIGH){
digitalWrite(13, HIGH);
Serial.print("ON\n");
}
else{
digitalWrite(13, LOW);
Serial.println("OFF");
}
}

5.12 Uso de pulsador estable

pulsador 2

[ ]: bool anterior=0;
bool actual=0;
bool encendido=0;

void setup(){
pinMode(13, OUTPUT);
pinMode(2, INPUT);
Serial.begin(9600);
}

//esta función evita los rebotes típicos de un botón


bool pulsar(bool anterior){ // función que detecta un botón
,→presionado

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 23


Arduino: módulos adicionales Laboratorio I

boolean actual = digitalRead(2); // lee el estado actual del pulsador


if (anterior != actual){ // si es distinto al estado anterior
delay(5); // espera 5 ms
actual = digitalRead(2); // vuelve a leer el estado del pulsador
}
return actual; // devuelve el estado acutal del pulsador
}

void loop(){
actual = pulsar(anterior); //lee el estado sin "rebotes"
if (anterior == LOW && actual == HIGH){ // si fue presionado el botón
encendido = !encendido; // cambia el estado del led
}
anterior = actual; // resetea el valor del botón
digitalWrite(13, encendido); // cambia el estado del led
}

5.13 Buenas prácticas de programación


Un buen código no solo cumple su función, sino que también es:
• Fácil de leer y entender: es importante para el mantenimiento del código, que muchas veces
es realizado una persona distinta a la que lo escribió originalmente
• Elegante: existen muchas formas de resolver un problema, un código es elegante cuando se
usa la operación más simple
• Escribe tus programas lo más simple y directo posible. Keep it simple.
• Si trabajas con un compilador, active el modo “verbose”
• Realice comentarios relevantes de su código
• Declarar variables en líneas separadas y comentarlas
• Se prefieren nombre de que indiquen su función, código auto-documentado
• Utilice identación según convención para facilitar la lectura del código
• Use un nivel de identación por cada bloque de código anidado
• Use siempre el mismo tamaño de sangría para la identación
• Declare una variable por línea
• Poner un espacio después de cada coma(,) facilita la legibilidad del código.
• Comenta cuando sea justo y necesario, usa los comentarios dentro de las funciones para
describir las variables
• Se recomienda como buena costumbre, añadir al inicio de cada función, un bloque de co-
mentarios que expliquen el comportamiento general de la función,

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 24


Arduino: módulos adicionales Laboratorio I

• Es altamente recomendada la definición de variables locales al inicio de la implementación


de cada función
• En caso de usar operadores binarios (por ejemplo +, -, &&, ||, entre otros) se recomienda
poner espacio a los extremos de cada operador,
• Se recomienda en algunas operaciones complejas, hacer uso de paréntesis redundantes o
innecesarios que sirven para poder agrupar expresiones dentro de tales operaciones.
• Usar una instrucción por línea, siempre que sea posible
• Cuando se usan muchos operadores asegurarse de que el orden de ejecución es el esperado.
Si no tiene claro el procedimiento o pseudocódigo de lo que quiere programar es muy difícil que
logre implementarlo

5.14 Pseudocódigo
pseudocódigo herramienta para expresar un algoritmo en forma natural, muestra el orden de
ejecución de las acciones de un programa de forma clara
representa la solución de un algoritmo de forma detallada y paso a paso de forma similar a lo que
va a ejecutar el programa real
es una abstracción q permite plantear la solución a un problema sin preocuparse por la sintáxis
específica de un lenguaje

5.15 Comparación entre Arduino y PLCs


PLC (programable logic controller), controlador lógico programable, existen productos de distin-
tas marcas y fabricantes ej Siemmens Schneider Allen-Bradley etc Todos están diseñados y certi-
ficados para trabajar de forma robusta en un ambito industrial. Son muy confiables pero a la vez
costosos.
Arduino está diseñado para hacer ralizar pruebas y construir prototipos relacionándose con distin-
tos módulos. No está orientado al uso industrial sino que sirve para entrenar, educar, desarrollar
modelos. Son más económicos y permiten la mayor versatilidad.
Por otro lado, se puede usar el micropocesador con las adaptaciones necesarias protecciones para
evitar el ruido electomagnético, entradas aisladas, entre otras, además de las certificaciones de
normas de calidad. . . El micro es fabricado por una companía independiente de Arduino, y se
fabrica para muchos usos, (por ejemplo el Arduino Uno usa un micro Atmel, y existen PLC que
usan este marca de microcontroladores)
Sin embargo los PLC son robustos, tienen la confiabilidad de años de uso y desarrollo en ámbitos
industriales. Por eso aunque en existen algunos versiones de productos basados arduino adapta-
dos para uso industrial, a la hora de confiar en el control de un proceso costoso y/o potencialmente
peligroso las principales marcas de PLC siguen siendo la opción ampliamente preferida. Donde
no se paga solamente por el producto en sí sino por la “seguridad” que brinda y este es siempre
factor clave para el responzable de realziar una instalación.
Pueden pasar varios años antes de que veamos a dispositivos industriales basados en arduino
compitiendo en popularidad con los clásicos PLC, pero donde sí está avanzando el uso de arduino

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 25


Arduino: módulos adicionales Laboratorio I

dentro de la industria es para todas nuevas aplicaciones de monitoreo de datos con dispositivos
del denominado IOT (internet of things) y la industria 4.0. En donde la baja en los costos para
sensores y comunicación permite levantar datos en numerosos puntos de un proceso. Datos que
luego serán procesados para generar modelos matemáticos que permitan optimizar y predecir el
comportamiento de los sistemas estudiados.
Visite los siguientes enlaces para conocer más sobre productos derivados y compatibles con ar-
duino diseñados para uso industrial:
• https://www.industrialshields.com/es_ES/
• https://www.controllino.biz/
• https://industruino.com/
• https://www.arduino.cc/pro/hardware/product/portenta-h7

Iván Ferrari — Draft version 0.3 — Abril, 2021 Página 26

También podría gustarte