Buenas!
En esta entrada pretendo resumir en pocos pasos como iniciarse en DIY con Arduino.
Arduino es un microcontrolador, mientras que Raspberry Pi es una placa de propósito general. Arduino por tanto está más limitado en hardware, en cuanto a la memoria RAM (arduino Uno solo tiene 2KB RAM!!), etc.. Existen varios modelos de Arduino, este blog se centra en principio en Arduino UNO o compatible que es el que suele estar más limitado en las prestaciones hardware, pero también es el más económico (su precio ronda los 4 euros en tiendas online a diferencia de Raspberry Pi 4 que ronda en el momento de escribir esta entrada los 50-60 euros con caja), y por qué no empezar con algo básico.
Adquisición de componentes
Para empezar puedes adquirir un kit básico en cualquier tienda online (tipo Aliexpress) donde podrás tener el arduino uno (bueno más bien uno compatible), cable de conexión y varios componentes y cables de conexión. Luego en función de lo que quieras investigar podrás ir comprando componentes o módulos por separado (un módulo bluetooth maestro sale alrededor de 2 euros transporte incluído), por lo que no nos vamos a arruinar. Si te quieres concentrar en un proyecto más en concreto, tipo robot rover con dos ruedas puedes buscar un kit de robot que satisfaga los componentes necesarios para empezar (chasis, motores DC, controlador de los motores DC, etc)
Simuladores y diagramadores de Arduino
Si no puedes esperar a obtener los componentes y quieres realizar tus propios experimentos también dispones de simuladores donde conectar tu protoboard, arduino y componentes y codificar un sketch (programa en los términos de la saga) para ver cuál es la salida e ir asentando conocimientos.
También te puedes apoyar en herramientas de diagramación como Fritzing (edición beta) para diseñar tus propios circuitos y permitir apoyar la documentación en la evolución de tu prototipo.
https://www.google.com/search?client=firefox-b-d&q=simuladores+arduino
Lo básico en cuanto a código
Instálate el entorno o IDE Arduino
Descárgate el entorno y familiarízate con él. Aunque si el proyecto se hace más complejo será necesario utilizar otros editores de código para facilitar el mantenimiento de la solución que quieras implementar. Dentro del entorno, deberás importar bibliotecas para determinados proyectos o instalar nuevas, normalmente suelen poder descargarse de la página del editor, lo único ponerlas en el directorio del resto de librerías e importarlas desde el editor.
https://www.google.com/search?client=firefox-b-d&q=arduino+ide
El código
El código está formado en líneas generales por dos grandes procedimientos o funciones. El lenguaje que se usa está basado en C++ (Processing), por lo que puedes buscar manuales de este tipo de lenguajes para saber la sintaxis y las estructuras de control que se pueden utilizar.
https://www.arduino.cc/reference/es/
El código tiene tres áreas diferenciadas:
- La de inclusión de las librerías que permitirán utilizar objetos o funciones definidos para manejar los componentes
- La declaración de variables globales y predefinidas que se utilizarán a lo largo de la aplicación software cargada en el microcontrolador. Las variables se definen con el tipo, el nombre de la misma y opcionalmente un valor por defecto mediante el operador =, por ejemplo int i =0; . Todas las sentencias que se escriben en las áreas de declaración de variables globales y funciones finalizan en punto y coma a excepción de los nombres en la declaración de las funciones, todo ello en base a la sintaxis del lenguaje de programación.
- Al menos dos funciones principales: setup, donde se definen los pines digitales que se utilizarán como entrada o salida, se inician los objetos, etc. Solo se ejecuta una vez. La función loop, que se ejecuta por defecto de forma indefinida mientras haya suministro de corriente. Las funciones permiten encapsular código que se puede ejecutar fácilmente invocando el nombre de la función, sin necesidad de tener que repetir el código de nuevo, como por ejemplo la función escribe, que toma como parámetro nuestra variable global de tipo entero y realiza unas operaciones, devolviendo un resultado. Si quisiéarmos aplicar esas operaciones a otra variable, solo tendríamos que volver a escribir la función escribe e incluir como argumento a otra variable, sin necesidad de repetir el código.
#include <DHT.h>
#include <DHT_U.h>
#define LEDPIN 13
int i = 0;
void setup()
{
Serial.begin(9600);
Serial.println(F("Fin setup"));
}
void loop
{
Serial.println(F("Inicio Loop"));
Serial.println(F(escribe(i)));
}
int escribe(int v)
{
for(j=0; j<10; j++)
j=j*(j+1);
return j;
}
En la función o procedimiento setup, se inicializan los pines, etc y solo se ejecuta una única vez, mientras que la función loop se repite de forma infinita hasta que finalice la energía en arduino.
Dentro de cada bloque de código, normalmente definido por una función, por defecto todas las sentencias se ejecutan de forma secuencial, una detrás de otra, pero podemos influir en esa secuencialidad haciendo uso de sentencias condicionales o bucles para repetir el código mientras se cumpla una condición. La sentencia for del código anterior es un bucle que hace que se ejecute la operación que se realiza dentro (asignar a j su valor inicial multiplicado por su valor inicial más la unidad) un número determinado de veces (en concreto 10 veces, desde que j es igual a cero hasta que es menor de diez incrementando su valor en la unidad cada vez)
La idea es ir empezando con pocos módulos o componentes
https://www.google.com/search?client=firefox-b-d&q=circuitos+b%C3%A1sicos+arduino
e ir recordando o asimilando los conceptos que subyacen como la ley de Ohm
https://www.google.com/search?client=firefox-b-d&q=ley+de+ohm+arduino
En función del datasheet del componente deberemos aplicar resistencias
https://www.google.com/search?client=firefox-b-d&q=calculadora+de+codigos+de+colores+de+resistencias
O mejor catalogarlas y tenerlas dispuestas para usar en el circuito.
La optimización del código
Una vez hemos escrito algo de código si no tenemos cuidado tendremos un consumo excesivo de memoria, para evitarlo tendremos que optimizar
- Utilizar tipos de datos correctos, mejor utilizar un tipo de dato byte, que un tipo de datos int que consume más memoria
- Cuidado con las cadenas de caracteres. El uso del monitor serie para depurar las salidas de tu programa produce un incremento excesivo del consumo de RAM . Se puede utilizar una función macro llamada F la cual hace que las cadenas de caracteres, queden almacenadas en la memoria de programa y no en la memoria RAM.
- Optimizar nuestro código de programa, para ello utilizar constantes con la sentencia #define LED 13 en vez de variables con byte LED = 13;
- Optimizar las variables del programa pasándolas a la PROGMEM.existen unos tipos de datos predefinidos para poder definir variables de tipos básicos en la memoria de Programa, empiezan con el prefijo prog_
- Optimizar los datos guardando información en la EEPROM, con EEPROM.write(direccion,variable), podremos almacenar información sin que se pierda cuando el sistema no disponga de energía
https://www.google.com/search?client=firefox-b-d&q=optimizar+el+codigo+arduino
El monitor Serie
El monitor Serie cuyo uso se expresa en el código mostrado anteriormente permite depurar la salida de nuestro programa,es interesante al comienzo hacer uso del mismo, pero si disponemos de pocas conexiones y queremos aprovechar por ejemplos pines 0 y 1 de arduino para transmitir y recepcionar datos, deberemos utilizar otra solución para depurar ya que no podremos hacer uso del monitor serie.
https://www.google.com/search?client=firefox-b-d&q=introducir+datos+en+monitor+serial+arduino
En cuanto a la puesta en escena del circuito y prototipo
Conecta bien los pines a la protoboard o a la placa de extensión (como la sensor shield v5): la protoboard o placa de prototipos, permite construir como su nombre indica un prototipo sin necesidad de soldar cables al replicar la conducción del circuito a través de sus canalizaciones en forma de matriz donde podremos conectar los cables dupont necesarios para ejecutar nuestro proyecto. Es una placa que se alimenta a través de arduino en los extremos + con VCC y en los negativos - con GND y cuya disposición permite añadir componentes en cualquier ubicación siempre que respetemos la polaridad del componente que añadamos así como la necesidad de aplicar una disminución del voltaje mediante resistencias. En las dos primeras filas por los extremos la señal se transmite en horizontal, mientras que en el resto de las filas se transmite en horizontal, es decir por columnas.
Si hay más de un componente externo que requiere de alimentación, es decir, son necesarias dos fuentes de alimentación, recuerda conectar los componentes a una misma referencia de masa o GND.
En la puesta en escena de sistemas más complejos, utiliza mecanismos básicos para anclar los componentes que no te impidan hacer variaciones rápidas, por ejemplo utiliza una cinta de pegar doble antes que tornillos, por si tienes que quitar componentes o ubicarlos de otra manera más óptima y cuando dispongas de un prototipo definitivo entonces ajusta o cierra este tipo de anclajes de una mejor manera.
Haz uso de un destornillador pequeño de estrella cuando te haga falta para apretar conexiones como por ejemplo los motores DC al controlador de dichos motores
Una referencia interesante en Iniciarse con Electrónica: https://startingelectronics.org/beginners/start-electronics-now/
Referencias
- https://www.prometec.net/intro-programacion/
- https://aprendiendoarduino.wordpress.com/2016/11/16/librerias-arduino-2/
Gracias por tu tiempo y atención
Un saludo