icono telefono  320 447 37 16                       icono skype   electronicaplugandplay

10 Cosas que debe saber antes de empezar su primer proyecto con Arduino

10 Cosas que debe  saber antes de empezar su primer proyecto con Arduino

Todos los días vemos  en la web  y redes sociales cómo muchas personas hacen distintas cosas con Arduino y todo parece divertido y sencillo. Ahora quieres hacer tu propio proyecto y divertirte en el proceso; para ello puede que hayas adquirido o estés pensando adquirir alguna tarjeta Arduino, cables Jumpers,  algunos LEDs, tal vez sensores y accesorios o incluso Kits. Sin embargo para que te asegures que tendrás un buen rato de diversión aquí te daremos algunos tips para que tengas en cuenta, y que esperamos, te ahorrarán tiempo y frustración en el camino.

 

1. Arduino es genial para experimentación y aprendizaje.

tip1

Los Arduinos se prestan maravillosamente a tareas pequeñas y dedicadas. Los Arduinos son como una versión experimental  y  ampliada de lo que se encontrarías por ejemplo dentro de un detector de humo, un reloj contador o cronómetro sencillo, etc. Los microcontroladores en estos tipos de aplicaciones tienen una lista corta de tareas, por lo general no es necesario por ejemplo que un termostato tenga el poder de ejecutar Linux o hacer grandes cálculos.  Si tu intención es escribir código para aplicaciones que se ejecuten/corran en algún sistema operativo, entonces te recomendamos pensar en una Computadora de Tarjeta Única o SBC (Single Board Computer) como por ejemplo Raspberry Pi, Beagle Bone o Intel Edison.

Para quienes quieren desarrollar aplicaciones de IOT o aplicaciones inalámbricas deben tener en cuenta que aunque todas las tarjetas Arduino son portátiles, hay algunas tarjetas que pueden acoplarse mejor a este tipo de proyectos por sus características de sistemas inalámbricos incorporados, puertos especiales, tamaño y bajo consumo de energía, algunos ejemplos son: Digispark, Arduino Nano, Arduino Mega 2560 ADK, Arduino Uno Wifi, Intel Edison, ESP32 DevKit C, entre otros.

También es importante definir que Arduino no es solo una tarjeta electrónica con un microcontrolador, es mas bien una plataforma, La Plataforma Arduino, que se compone tanto de hardware (la tarjeta Arduino) y un simple Entorno de Desarrollo Integrado (Arduino IDE) que es su software.

 

2. Escritura de código o programa

La programación de las tarjetas Arduino consiste en escribir un "Sketch”  en el entorno de desarrollo de Arduino (Arduino IDE) y subirlo/cargarlo a su tarjeta Arduino.

Ide arduino

 

Estos bocetos (Sketches) se escriben en un lenguaje aproximado a C y por lo tanto los sketches utilizan las mismas estructuras de control. Si no entiendes lo que quiero decir, no te desesperes, son buenas noticias. Esto significa que si sabes algo de C o C + +, escribir bocetos o sketches te será muy familiar. Si no sabes nada de C o C++, significa que aprender a escribir bocetos o sketches, te ayudará a aprender los fundamentos de C. Es decir, ganas de cualquier manera.

Una nota sobre el entorno de desarrollo de Arduino: no tiene un depurador incorporado en él. Si estás acostumbrado a reparar o corregir código con los depuradores integrados en otros entornos de desarrollo, por ejemplo como ATMEL Studio o MPLAB, con Arduino IDE es un poco distinto entonces con Arduino IDE, solo tendrás que ser listo. Tendrás que emplear métodos más primitivos para solucionar problemas, como insertar una línea de código para devolver algún texto o activar un LED cuando se haya alcanzado una sección de código que estás evaluando, es decir ser creativo y crear puntos de prueba o testeo dentro del código o en el hardware. La falta de un depurador puede ser visto de dos maneras, el lado positivo es que te ayudará a desarrollar tus habilidades de resolución de problemas; sin embargo, el lado menos positivo es que puede ser contraproducente localizar y corregir errores  si tu código es demasiado extenso.

 

3. Usar las herramientas adecuadas: Tarjetas, escudos (shields), módulos y accesorios

 arduino genuino

Probablemente adquiriste  o piensas adquirir una tarjeta Arduino porque tienes un proyecto en mente y/o quieres aprender más sobre la electrónica, programación e incluso robótica. Va a ser mucho más difícil aprender si tus materiales de aprendizaje tienen poca documentación y soporte. Debes concentrarte en las lecciones y conceptos, no sumar  problemas con tarjetas, escudos, módulos, accesorios, etc. de origen desconocido y/o sin documentación o escasas referencias. Si utilizas tarjetas, escudos, módulos y accesorios de la marca Arduino o de fabricantes y distribuidores reconocidos tendrás más probabilidades de encontrar solución a algún problema que se te pueda presentar o a alguien que anteriormente haya tenido el mismo problema. Por lo general, fabricantes y distribuidores serios y profesionales, independientemente de la garantía respectiva, pueden orientarte porque tienen la documentación necesaria o tienen algún tutorial o videotutorial, inclusive si los contactas, probablemente no te hagan la tarea pero si podrán darte luces sobre cómo detectar o resolver un problema pues suelen conocer muy bien los productos que fabrican o distribuyen.

Por cierto, la solución de problemas es una parte importante e inevitable del viaje, pero no debes incrementarla cuando estás empezando.

 

4. Mantén apuntes sobre lo que haces y sobre tu evolución

Esto es especialmente importante a medida que experimentas con diferentes iteraciones del mismo programa. Será muy fácil perder la pista de qué versión hizo qué, y por qué. Usted puede pensar que no necesitará estas notas de revisión, pero te aseguro que lo harás. El número de cambios e iteraciones que puedes hacer durante un fin de semana intentando conseguir un proyecto en su punto justo podría llegar a los cientos. Si quieres hacerlo de manera profesional puedes aprender sobre nuevas herramientas sencillas de manejar, open source, gratuitas y muy útiles como GitHub.
Es importante también que lleves un registro de los esquemas de conexiones que realizas. En la web hay distintas herramientas para dibujar circuitos tipo open-source, shareware, pagas, etc. Un par de buenos ejemplos son Fritzing o TinkerCad.

tip4

 

5. Ir a paso a paso sin saltar escalones

Primero conviértete en un maestro de técnicas individuales y conceptos. Empieza con hacer parpadear el LED de la tarjeta Arduino usando el ejemplo "Blink" incluido en el IDE de Arduino. A continuación, haz parpadear un LED externo cableado hasta una salida de tu tarjeta.  Este es el “Hello World de Arduino”. Luego, escribe un sketch para hacer parpadear varios LEDs a la vez. A continuación, haz que el LED o los LEDs solo parpadeen al pulsar un botón. A continuación, elabora un croquis es decir, un sketch + esquema del circuito, que haga una lectura analógica de un potenciómetro para controlar la velocidad de parpadeo del LED o los LEDs.

Cualquier proyecto que en última instancia desees lograr es reducible a tareas más pequeñas. Por ejemplo, al poner pequeños trabajos como descifrar las pulsaciones de un botón, enviar datos a una pantalla LCD, leer un sensor de temperatura y hacer parpadear un LED, juntos podrían llevarte a crear un proyecto macro como un “interruptor de temperatura controlada”.

tip5 

Cada concepto que aprendes es como un ladrillo, y tu proyecto macro es una pared de estos ladrillos.

 

6. Ten cuidado con: el tope máximo de la velocidad de reloj y micros de 8 bits, 16 bits y 32 bits.

Como ejemplo, el Arduino UNO tiene una velocidad de reloj interno de 16 MHz. Eso es 16 millones de ticks de reloj por segundo. Eso suena como un montón, pero considera lo siguiente: Cada instrucción o chequeo en un sketch utiliza señales de reloj. Cuantas más tareas e instrucciones tenga tu sketch, más rápido consumirá ese excedente aparentemente interminable de ciclos de reloj; y antes de que te des cuenta, sorprendentemente, al Arduino le estarán faltando señales de entrada o pulsos de la salida. Ello significa que literalmente el Arduino no tiene tiempo suficiente para hacer todo lo que se espera de él según lo programado/subido. No te asustes!! Esto también le sucede hasta la computadora más potente del mundo.

TimeDiagrams CPUBusCycle

En términos mas sencillos, imagina lo siguiente: El señor X es el mejor piloto de carreras de la Fórmula 1 (F1) y posee la máquina (vehículo) más veloz del campeonato de este año así como el mejor equipo y escudería. Cómo sabrás la F1 posee diferentes circuitos (pistas) al rededor del mundo cada una de distinta longitud, aunque también diferentes grados de dificultad pero no vamos a tener en cuenta esto para no complicar esta explicación sino únicamente una de las pistas con su longitud bien conocida y el menor grado de dificultad, eso sí nuestro piloto en la mejor forma y el vehículo bien tanquedado y con el mejor equipamiento. Esto significa que para el señor X y su vehículo no existirá ningún inconveniente al efectuar un giro a nuestra pista de prueba en el menor tiempo posible, es decir a la máxima velocidad que su vehículo brinda, supongamos que el tiempo que él tarda en hacer esto es de T segundos. Ahora le diremos al señor X que efectué no una sino dos vueltas a nuestra pista de prueba a la máxima velocidad, esto significará que el tiempo empleado ahora será de 2T segundos, es decir, si ampliáramos la longitud de nuestra pista al doble el señor X solo dará una vuelta pero llegará al punto de partida en 2T segundos. Por tanto, si ahora triplicamos la longitud de la pista el señor X llegará al inicio de la misma en 3T segundos y así sucesivamente. Ahora asumamos que nuestro vehículo es nuestro Arduino, es decir la misma máquina para todos nuestros sketches y siempre con su máxima velocidad de 16Mhz y tanque a full (siempre alimentado adecuadamente), a su vez los sketches son las pistas, esto significa que a medida que nuestro sketch crece en líneas de código estaremos aumentado la longitud de la pista lo que quiere decir que nuestra máquina requerirá más tiempo para efectuar los recorridos a medida que crece el número instrucciones. Esto por lo general lo hace en una sección del sketch llamada ciclo o Loop. A mayor número de instrucciones en el Loop más tarda el microprocesador en procesarlas aunque tenga la misma velocidad todo el tiempo y así por ejemplo si estás haciendo el polling de un teclado matricial al inicio del Loop muy probablemente debas pulsar la tecla de tu interés mas de una vez para que tenga el efecto deseado. Esto sucede hasta en la supercomputadora más veloz del mundo (excepto claro las cuánticas).

Para tareas básicas esto rara vez se convertirá en un problema, pero a medida que tus proyectos crecen vas a encontrarlo. El techo o tope de la velocidad del reloj realmente se hace evidente cuando se comienza a intentar controlar motores paso a paso o al manejar la retroalimentación del encoder de los servomotores.

Si anticipas que puedes estar fuera de los ciclos de reloj establecidos en Arduino UNO, entonces debes empezar a pensar en otro tipo de tarjeta Arduino cuyo reloj tenga un rango más amplio. Por ejemplo Arduino Due corre a 84 MHz,  Intel Edison que corre a 100 MHz o en otras plataformas como ChipKit, Mbed, etc.

El Arduino Uno trae el Microcontrolador ATMEGA328P-PU que es un microcontrolador de 8 bits. Esto quiere decir que en cada ciclo de reloj se procesan o hacen operaciones con registros de un ancho de 8 bits. Si el microcontrolador es de 16 bits o 32 bits pues los anchos de los registros tendrán respectivamente 16 bits o 32 bits. Pero, ¿Qué tiene que ver que sea de mayor o menor número de bits? La respuesta es mayor exactitud. A mayor número de bits las operaciones matemáticas serán de mayor precisión. De otro lado, un microcontrolador de 16 bits puede operar automáticamente dos números de 16 bits, como la definición de un entero para lenguaje C es 2^16=65536, es decir, un entero entre -32768 a +32767. Pero cuando se utiliza un microcontrolador de 8 bits, para operar con este rango de valores el proceso no es tan sencillo. Las funciones implementadas para operar tales números tomarán ciclos de reloj adicionales. Dependiendo de cómo se procese el código de su aplicación y de cuántos cálculos haga dentro del mismo, se podría afectar el rendimiento de la aplicación que creaste. Además al operar números enteros (int), almacenarlos, etc. estarás consumiendo más registros en memoria RAM, EEPROM, etc. en un microcontrolador de 8 bits que en uno de 16 bits.
Un Ejemplo de una placa  con micro de 16 bits es MSP-EXP430G2 Launchpad. Ejemplos de tarjetas con micros de 32 bits son: MSP432 LaunchPad, Arduino DUE, Intel Edison, ChipKIT uC32, ChipKIT MAX32, Núcleo F446RE, Discovery STM32F407, etc.


7. Aprenda cómo usar las Librerías de Arduino

¿Qué pasa si grandes secciones del código que necesitas ya están escritas y disponibles? ¿Eso no aceleraría realmente tu tiempo y reduciría tu trabajo para completar el proyecto? Bueno, ese código está ahí fuera y sólo está esperando a que lo atrapes y lo cargues en tus bocetos o sketches. Estas colecciones de código se denominan Librerías, debes indagar si existe ese código que buscas antes de emprender tu proyecto pues te ahorrará tiempo.

Explicar realmente lo que son las librerías tomaría mucho más tiempo y espacio de lo que está disponible para un artículo sobre consejos rápidos, pero aquí hay una analogía para ayudarte a comprender el concepto. Una librería es como una caja de herramientas para un conjunto relacionado de tareas. Sólo tienes que incluir las cajas de herramientas que contienen esas herramientas que necesitas en tu proyecto.

Por ejemplo, incluido en el entorno de desarrollo Arduino está la biblioteca "Wire". Wire es una caja de herramientas llena de herramientas para comunicaciones serie I2C o ahora TWI. Las herramientas de Wire automatizan la mayoría de las tareas relacionadas con las comunicaciones I2C. Como todo, las Librerías tienen distintos puntos de vista, podrías escribir código para hacer todo lo relacionado con comunicación I2C/TWI tú mismo, lo que definitivamente vale la pena hacer por la experiencia de aprendizaje que vas tener y por profundizar y afianzar conceptos sólidos, pero  también puedes acelerar el desarrollo de tu proyecto que incluya comunicaciones I2C/TWI si aprendes a emplear efectivamente la Librería Wire.

librerias

 

8. Aprenda lo básico sobre los puertos seriales y sobre la comunicación paralela

Aprender sobre la comunicación paralela y sobre todo mucho sobre la comunicación serial es muy buen consejo. Busque lo que la sigla UART significa, en qué casos se utiliza, etc. Busque sobre SPI e I2C. Atmel, ahora Microchip, son quienes producen los microcontroladores que son el corazón de muchas de las tarjetas Arduino, tienen algunas notas de aplicación muy útiles sobre el tema de las comunicaciones SPI y I2C. La mayoría de los sensores, módulos y otros accesorios que utilizará se comunicarán con su Arduino a través de una conexión en serie SPI o I2C. Aprender estas técnicas de comunicación hará que sea mucho más fácil de usar estos sensores, módulos y accesorios.

serialparallelcomm tip8

Para los proyectos, tenga cuidado con los accesorios, como las pantallas, que requieren una comunicación paralela. Los puertos COM paralelos utilizan una gran cantidad de pines en comparación con los puertos COM serie. Podrías descubrir que tu Arduino no tiene suficientes patillas o pines para ello, y si lo haces, puedes terminar usando tantos pines que no te quedarán para nada más. Si acabas de aprender a controlar una pantalla LCD de comunicación paralela, a continuación quieres utilizarla junto a otros dispositivos, pero los dispositivos como este pueden tener demasiadas E/S (Entradas/Salidas) para proyectos que implican varios dispositivos, entonces deberás analizar, por ejemplo cómo reducir el número de E/S de la pnatalla o cómo expandir los pines o patillas de tu Arduino.

 

9. No olvidar los límites de memoria

arduino memory ram tip9

La mayoría de las personas que comienzan lo hacen con una de las tarjetas básicas como la UNO. Efectivamente hay varios tipos de memoria en cualquier tipo de tarjeta Arduino, pero aquí nos centraremos en la memoria RAM. Eventualmente llenaremos la memoria y llevaremos al límite esta memoria RAM. Llegar a este límite es una buena noticia. La frase anterior puede sonar ridícula, pero permítenos explicártelo para que puedas calificarla o descalificarla.

Inevitablemente, los programadores principiantes y experimentados por igual, son desordenados, extendiendo el código de tal forma  que ocupa más recursos de lo necesario. Casi siempre hay maneras de reforzar el código. El objetivo es hacer que sea lo más compacto posible, y realmente sacar el máximo provecho de los recursos que se tienen. Hasta que te encuentres con una barrera, ¿por qué pararías para investigar esto? Llegar al límite de memoria RAM te obliga a ser inteligente. Te obliga a reexaminar lo que ya has hecho y buscar maneras de mejorarlo. Si simplemente te trasladas a una tarjeta Arduino con más memoria, te privarás de esta experiencia.

Eventualmente, puede que tengas que obtener una tarjeta con más memoria RAM y más memoria de programa o Flash o más memoria EEPROM, pero no te apresures.

Aquí hay una pequeña sugerencia para empezar: Si encuentras que te estás quedando sin memoria RAM, intenta este truco para leer cadenas de texto directamente desde la memoria del programa en lugar de hacerlo desde la memoria RAM:

Serial.println(F("su texto aquí"));

La macro F insertada aquí entre los paréntesis, evita que el texto se cargue en la memoria RAM al inicio del programa. Así la cadena de texto se leerá directamente de la memoria flash/programa cuando sea necesario.

 

10. No todas las tarjetas Arduino tienen USB nativo

arduino usb tip10

Sabemos que esta afirmación no tiene sentido a primera vista. Podrías señalar que puedes programar tu Arduino, que tiene un puerto USB, conectándolo en el puerto del USB de tu computadora. Esto es correcto, pero para algunas tarjetas de Arduino hay algunas piruetas de software muy inteligentes que van por detrás de escenas y son transparentes para los usuarios.

La mayoría de los microcontroladores no manejan las comunicaciones USB innatamente. Hay dos maneras en que esto es generalmente eludido. La primera solución común es colocar un chip separado en la placa para manejar la comunicación USB como en la placa Arduino UNO. Este chip separado también convierte los datos de la comunicación USB en una forma que es comprensible por el UART del microcontrolador principal. El otro método común implica una pieza separada de hardware  o módulo de hardware que se conecta al microcontrolador cuando se quiere comunicar éste a través de USB, por ejemplo el Adaptador USB a Serial TTL CP2102. Cuando empleas este último método muy probablemente necesitarás instalar a tu host un controlador de software adicional que en el argot popular se conoce como "Driver" para que éste sea capaz de reconocer ese módulo de hardware.

En resumen, si tienes la intención de usar el puerto USB de tu Arduino para conectarte a una computadora, a una cámara o una unidad USB, asegúrate de que la tarjeta que adquieras tenga un controlador USB incluido. O, tú podrías agregar esta capacidad del USB con un módulo adicional.

No olvides dejarnos tus comentarios en nuestras redes sociales y regalarlos un me gusta o un me encanta.

      youtube logo

www.electronicaplugandplay.com

Julio/2017.

Actualizado Junio/2022