Icono del sitio Home Assistant Fácil

Cómo resolver errores de Arduino y más preguntas Maker

En este nuevo capítulo del podcast voy a resolver varias dudas entorno a la programación y electrónica con Arduino y ESP8266. Comenzaré hablando de dos soluciones para detectar cuando un vehículo se ha puesto en marcha.

Estas dos ideas que me han llegado son relativas al podcast donde plantee este problema. Resulta que estoy trabajando en un proyecto sobre un tracker GPS con SigFox. Este dispositivo sólo se tiene que encender cuando esté en movimiento.

También hablaré de la geolocalización con SigFox, cómo resolver errores en Arduino y una duda con respecto al ruido en señales analógicas.

Pero antes de empezar, quiero dar las gracias a Jorge Lobo y a David Matías Alonso por la donación que han hecho a través del botón donar de iVoox. Desde que empecé La Tecnología Para Todos hace más de 3 años ha estado ahí.

La verdad es que no le había dado importancia pero un intercambio de mensajes con Jorge me ha hecho ver que quizás sea una buena opción para mejorar la calidad y contenidos del mismo.

Hacer un podcast lleva tiempo, esfuerzo y dinero. Todos los recursos económicos que se reciban a través de esta vía, serán destinados íntegramente a la mejorar el podcast. Siéntete libre de hacerlo si realmente quieres y puedes. No es ninguna obligación.

Con sólo leer y escuchar el podcast ya me estás ayudando :)

Por otro lado, si eres oyente desde iPhone, iPad o cualquier dispositivo de la plataforma Apple, te agradecería una valoración en iTunes o la APP Podcast ;)

Dicho esto vamos con el programa de preguntas de los oyentes de esta semana.

Sensor de movimiento con Arduino

José Domínguez de Logroño me comenta

Hola Luis, pues te respondo al GPS con una propuesta que no valdrá, por lo rupestre, pero puede que surja otro enfoque.

El clásico micro interruptor de mercurio, con patas doblables.

El que tristemente utilizaba E.T.A. para activar la bomba cuando arrancaba el coche.

Al empezar a moverse el coche, la bolita de mercurio se movía y cerraba el circuito y la electrónica lo detectaba. Esto solo vale para cuando se arranca el coche.

Para apagar tu proyecto, seria ver si las coordenadas del GPS permanecen constantes durante un periodo de tiempo, entrando en reposo.

Otra opción sería detectar que el coche se ha arrancado al llegarle la luz de algún cable que implique que el coche está arrancado.

Otra, que a lo mejor consume más que el acelerómetro, es un sensor de gases en el escape.

Bueno Luis, que te esperamos por La Rioja.

Un abrazo.

José.

Javier Elio en un comentario del artículo dice lo siguiente

Hola Luis. Para tu proyecto de GPS puedes usar un interruptor por vibración en vez de un acelerómetro.
Si buscas en Adafruit «vibration sensor», aparecen varios. También los hay en Aliexpress, incluso módulos con ajuste de sensibilidad.

¡Un Saludo!

Geolocalización con SigFox

Jordi desde Madrid me comenta

Hola Luis. Sobre tu proyecto de un tracker GPS, al margen de la electrónica que utilices para detectar el movimiento (que para este caso en concreto creo que con un acelerómetro de tres ejes sería suficiente), me interesa también cómo tienes pensado la transmisión de los datos del GPS, por un proyecto en el que estoy trabajando ahora con unos compañeros.
Te lo explico un poco por encima: se trata de lanzar un globo de gran altitud amateur, y uno de los problemas a resolver es precisamente la localización del payload cuando este tome tierra, que pude ser en un area bastante amplia y que además en general interesa que esté lo más desierta posible. Para el seguimiento del globo en vuelo hemos probado unos cuantos sistemas (LoRa, RTTY, xBee…) que vienen muy bien cuando hay línea de visión directa entre la base y la cápsula, pero una vez en tierra tienen una utilidad limitada, por lo que habíamos pensado usar un sistema específico para la localización. Nuestro hardware tiene un módulo GPS que está recogiendo continuamente la posición, pero claro, lo que interesa es que esa posición llegue a la base de alguna manera, para lo que necesitaríamos un sistema de muy amplia cobertura. Normalmente usaríamos la red GSM (de hecho usaremos un tracker GSM como respaldo), pero la cobertura en campo abierto a veces no es suficiente. Lo que vamos a probar en esta ocasión es la red de SigFox (con un módulo SiPy). ¿Tienes experiencia sobre la cobertura de esta red en lugares donde incluso el GSM es difícil? ¿Se parece en algo a tu proyecto :)?

Un saludo a todo el personal!

Bueno Jordi, efectivamente, con las tecnologías que comentas GSM, LoRa, xBee, etc… el problema que existe es la cobertura. Respecto a utilizar SigFox creo que es una buena opción. Para asegurarte que realmente tienes cobertura tienes un mapa donde lo puedes ver.

Este mapa está en la página web de SigFox y es orientativo. El mayor problema con el que te vas a encontrar sea quizás el consumo. Un módulo GPS, dependerá mucho del modelo que utilices, suele consumir bastante batería.

Aún así, imagino que el tiempo que deba estar emitiendo sea de unas pocas horas.

Otro factor a tener en cuenta es la precisión. En este sentido pasa como con todo. Cuanta más precisión más caro será el dispositivo. Yo utilizo el Adafruit Ultimate GPS que lo puedes encontrar por unos 49€ sin antena.

En ningún caso recomiendo utilizar la geolocalización de SigFox por su baja precisión. En la actualidad, dependiendo de la cobertura, da una precisión de decenas de kilómetros. Si crees que esto es suficiente puedes probar a utilizarlo.

Resulta muy interesante este tipo de proyecto y me gustaría que si hay algún usuario u oyente que lo haya hecho, me enviara un email para comparar diferentes soluciones.

Cómo resolver errores de Arduino

Comentario en iVoox

Hola Luis ! aqui siempre haces mucho énfasis a los oyentes para que comiencen con Arduino, creen proyectos y en definitiva que cacharreen. Este mundo de arduino NO es nada fácil. Cuando ya pasé la fase de encender y apagar LEDs, a primera vista me parecía fácil el crear proyectos sencillos. Me llamaba mucho la atención hacer algo con relés y hace dos veranos, muy animado, y con la idea clara de lo que quería hacer, gasté unos doscientos euros entre placas, componentes, relés de diferentes canales, sensores tipo Pir, etc.. Y lo que parece en un principio fácil y claro , después empieza a dar problemas que sin tener conocimiento de electrónica, no puedes resolver ni puedes echar mano de ningún videotutorial. Rápidamente desistí de seguir perdiendo el tiempo. Ya se que existe mucha información, publicaciones sobre Arduino y videotutoriales en castellano y aquí viene mi pregunta ¿Existe alguna publicación o ayuda específica sobre cómo solucionar errores, fallos en arduino? Gracias y Saludos

Lo primero que tengo que decir es que es cierto. La programación con Arduino o cualquier otra placa no es algo sencillo. Requiere tener conocimientos en dos ramas: la programación y la electrónica. No queda otra.

Como bien dice este comentario, hay mucha información dispersa por Internet. De hecho, todo está en Internet incluyendo todo lo que publico. Hay vídeos en YouTube, artículos, portales dedicados a proyectos y podcast.

Pero nada te garantiza que lo que estés viendo funcione. Un ejemplo lo tenemos en el proyecto del que nos habló Nuria en el pasado capítulo del podcast, Ardunespresso. Mucha gente publica sus proyectos sin haber probado y documentado correctamente si funciona o no.

Gastar 200€ en material no es una buena idea en ninguno de los casos. Antes de hacer esto, tienes que aplicar el proceso de prototipado con Arduino. En este artículo lo dejo bastante claro. Hay tres fases definidas: idea general, prototipo mínimo y diseño incremental.

La idea general te ayudará a tener una perspectiva general de lo que quieres conseguir. Me gusta llamarlo la fase Homer ya que tenemos que poner en marcha toda nuestra creatividad e imaginación. Es como ese capítulo de Los Simpson donde Homer diseña el coche del futuro.

Material que se necesita: lápiz y papel. Sólo esto y nada más.

Una vez tenemos nuestra idea general hay que centrarse en la objetivo principal de nuestro proyecto. Si quieres, por ejemplo, crear un riego automático para tus plantas, debes centrarte en eso y olvidarte de lo demás.

Puede que en tu idea general hayas puesto que el sistema debe tener un sensor de humedad de suelo y un sensor de temperatura. Debes olvidar todo aquello que te separe del objetivo principal de tu proyecto: sistema de riego automático.

Por ejemplo, sólo haría falta un relé, un reloj en tiempo real o RTC (del inglés Real Time Clock) y un Arduino UNO. Por supuesto que podríamos hacer que el sistema sea totalmente automático y que si, por ejemplo, llueve, deje de regar porque tiene mucha humedad.

Incluso podríamos utilizar una placa que se conecte a la WiFi como Arduino MKR1000 o un ESP8266. Pero esto haría que tardes más en conseguir algo que funcione correctamente. A esta fase la llamo el prototipo mínimo.

Debes ser muy ágil, rápido y económico. Aprovecha todo lo que tengas por casa y sólo compra lo necesario. Esto te llevará a tener resultados muy rápidamente, evitando así la frustración y no entrar en el estado de parálisis por análisis.

Es muy importante obtener resultados lo antes posible cuando estamos aprendiendo. Al ver que algo funciona, nos da ánimos para seguir aprendiendo y mejorando. En el caso de este comentario está claro que ha entrado en una espiral de desesperación.

Se gasta 200€ en componentes. Intenta crear un sistema complejo que llevaría mucho tiempo a cualquier persona y no obtiene resultados. Esto le produce un desánimo y frustración por no obtener resultados. Al final terminas abandonando porque no avanzas.

Es algo normal y es algo a lo que, tarde o temprano, tendrás que enfrentarte.

Y sólo una vez que tenemos un prototipo mínimo y viable funcionando, podemos aplicar el diseño incremental. Aquí si que podemos incorporar nuevos sensores, actuadores y placas. Vamos incorporando funcionalidades poco a poco.

Vale, entonces tenemos claro el camino que hay que seguir para conseguir resultados lo antes posible y evitar la frustración. Pero todo esto parte de empezar a construir sobre unos cimientos firmes.

No vas a encontrar una página web, un canal de YouTube o un podcast donde den solución a todos los errores que puedas tener en tu código. Tendrás errores de sintaxis que con la ayuda del IDE de Arduino podrás resolver de una forma más fácil o más difícil.

Pero también existen los errores de lógica es decir, que el programa no haga lo que tu quieres. En este caso nada ni nadie te dirá cómo tienes que resolverlo. Debes ser tu el que, de alguna manera, lo resuelva comprobando el resultado obtenido.

Aquí es donde entra en juego tener unos conocimientos fundamentales de programación con Arduino. Si construyes una casa sobre unos cimientos fuertes, podrás alcanzar una buena altura. Si construyes una casa sobre unos cimientos débiles, tarde o temprano la casa se caerá.

Lo mismo ocurre con la programación. Si tienes unas bases sólidas podrás enfrentarte a los errores y resolverlos más rápidos que si no tienes esa base. Esto requiere de dedicación y esfuerzo de uno mismo.

Aquí no hay atajos, no hay un camino fácil y no hay privilegios. Todos tenemos que pasar por lo mismo, no hay otra. Por eso hago especial énfasis en que hay que ponerse en acción. Cuanto antes te pongas a recorrer ese camino, antes llegarás al final.

Espero con esto no haber desanimado a nadie y espero haber ayudado a este oyente. Quiero recordar también a todos que yo, en la medida de mis posibilidades, estoy aquí para ayudarte :)

Ruido en una señal analógica de Arduino

Gabriel de San Vicente del Raspeig pregunta

De los Sonoff solo los conozco de tu podcast, me dejó con ganas de meterme en ello ya. En cuanto a Node-RED y Raspberry Pi me he montado una máquina virtual, lo he instalado, y estoy jugando ahora con ello, que te voy a contar… conforme vas entrando vas viendo más posibilidades…

Lo curioso de este mundo es que encuentras gente enganchada donde menos te lo esperas. El otro día un compañero de trabajo, me vio que me llegaba un componente que había comprado, y reconoció el componente, porque su padre anda con un proyecto de motorizar un telescopio para poder fotografiar con nitidez las estrellas… Flipa!!!, otro día paseando al perro, me contaba una persona que estaba montando un robot con Arduino, lógicamente sin saber que yo estaba trasteando…

Por cierto, ya que estamos, me puedes recomendar algo para salvar el problema de la longitud de los cables que tengo que utilizar entre Arduino y el sensor de humedad del suelo? Estoy hablando de 5 ó 6 metros.

En encontrado algunos “I2C extender”, y aunque no es este protocolo, solo estoy leyendo un pin analógico, entiendo que puede valer igual, pero bueno… por si conoces otra solución.

Luis un saludo.

Es cierto Gabriel que ahora mismo hay una explosión en el movimiento Maker. Esto me encanta ya que así haremos más fuerza. Yo recibo muchos proyectos curiosos y la verdad, tendría que hacer un artículo y un podcast sobre ellos porque son la bomba.

Respecto a lo del sensor de humedad del suelo mucho ojo. Con datos analógicos estás muy expuesto al ruido y lo vas a tener complicado.

Lo primero que tienes que hacer para ver si funciona es hacer una media. Toma varios valores (50 o 100) y haces la media o mediana de esos valores. Eso eliminará parte del ruido. Te aconsejo que utilices una librería para Arduino que funciona muy bien. Se llama RunningAverage y RunningMedian.

La diferencia entre estas dos librerías es que una calcula la media o promedio (RunningAverage) y la otra la mediana (RunningMedian).

Básicamente, la media o promedio lo que hace es sumar todos los valores y dividirlos entre el número total de muestras. La mediana lo que hace es ordenar los valores y coger el del medio literalmente.

¿Cuál es la mejor? Pues depende. Cuando tienes diferencias muy pequeñas entre las muestras prácticamente el resultado es el mismo si lo haces calculando la media o la mediana. Ahora, si de repente hay algún error y tienes varios valores muy altos o muy bajos habrá mucha diferencia.

Imagínate que tenemos esta serie de medidas:

10, 11, 9, 8, 7, 8, 10

Calculando la media o promedio el resultado sería 67/7 = 9. Si calculamos la mediana tendríamos que ordenar los valores de menor a mayor quedando una lista de la siguiente manera.

7, 8, 8, 9, 10, 10, 11

La mediana sería el valor central que es el 9.

Pero ¿qué ocurriría si por ejemplo si tenemos dos valores de 18 y 20? En este caso la serie de medidas serían las siguientes:

18, 20, 9, 8, 7, 8, 10

La media sería de 11, 4 sin embargo, la mediana se calcularía con la siguiente serie.

7, 8, 8, 9, 10, 18, 20

Siendo el valor obtenido de 9. Hay una gran diferencia si tenemos varios datos erróneos. En los dos casos, lo ideal sería coger muchas muestras pero claro, esto nos lleva a que los cálculos son más complejos y necesitamos más tiempo para calcular la media y la mediana.

Por otro lado el tema de los cables. Cuánto más largos más expuestos estarán los datos al ruido. Siempre que se pueda hay que utilizar cables de calidad y apantallados. Aún así, esto no nos garantiza inmunidad frente al ruido.

Por último, te aconsejo que pienses en utilizar otra opción para comunicar el sensor con Arduino. Por ejemplo puedes utilizar radiofrecuencia con un módulo NRF24L para transmitir esa información. Lo puedes conectar a un Arduino Mini por ejemplo.

El coste no es excesivo y el consumo de batería tampoco. Dejo apuntado escribir un tutorial sobre estos módulos ya que tengo bastantes ganas de hablar de los módulos de radiofrecuencia.

Conclusiones

En este capítulo hemos visto muchas cosas pero me gustaría destacar una. El camino para dominar Arduino es difícil y complejo pero no es imposible. Lo primero es tener ganas de aprender.

Con esto, nadie te parará pero eso sí, no puedes entrar en la espiral de frustración ya que lo único que conseguirás es abandonar.

Por eso debes ser capaz de aplicar el proceso del prototipado. Imagina tu proyecto y plásmalo en una idea general. Luego crea un prototipo mínimo rápido y económico. Aunque parezca una tontería, obtener resultados te va ayudar a avanzar más rápido.

Sólo cuando tengas ese prototipo funcionando debes aplicar el diseño incremental para dotar de nuevas funcionalidades a tu proyecto.

Pero vuelvo a repetir que lo principal es tener ganas y pasión por lo que haces.

¿Qué te motiva a ti para aprender Arduino?

¿Has pasado la fase de aprendizaje con Arduino?

Deja tus comentarios aquí abajo.

Gracias a Shutterstock por la cesión de la imagen.

Salir de la versión móvil