lunes, 30 de mayo de 2022

Rfid Login - Pro Micro (Arduino)

Hace poco adquirí un Arduino Pro Micro; hace tiempo que tenía ganas de conseguir uno y ver que proyectos podían realizarse.

El Arduino Pro Micro es una pequeña y completa placa basada en el ATmega32U4, el mismo microcontrolador del Arduino Leonardo.

Una de las funcionalidades más interesantes de este microcontrolador es la de poder funcionar como un HID (Human Interface Device), pudiendo emular un teclado o mouse.

Esta funcionalidad de emulación HID (Human Interface Device) está disponible de forma nativa en placas que incorporan los procesadores ATMEGA 32u4 (Micro, Leonardo) (Fuente)

Para este proyecto vamos a utilizar esta capacidad del Pro Micro para emular un teclado (utilizando la librería keyboard.h ya presente en el IDE de Arduino) para ingresar nuestra contraseña e iniciar sesión en el sistema.


Podríamos usar un pulsador para realizar esta tarea pero me pareció más interesante usar un lector RFID RC522 (que hasta ahora nunca había utilizado). De manera que cuando le acercamos el TAG autorizado se ejecuten las instrucciones necesarias para realizar el login.

También incluí dos LEDS (rojo y verde) que se enciendan según utilicemos el TAG autorizado o no correspondientemente.

Detallo las conexiones a continuación:

Led Rojo Led Verde
Pin D3 Pin D4
Señal RC522 Pin Pro Micro Pin
RST/Reset RST 9
SPI SS SDA(SS) 10
SPI MOSI MOSI 16
SPI MISO MISO 14
SPI SCK SCK 15

GND GND

3.3v 3.3v

En el video verán que estoy usando un pulsador. El mismo no tiene ninguna relevancia para el proyecto; estaba teniendo problemas para subir los sketch al Pro Micro y encontré que pulsando reset previo a enviar el sketch el mismo se subía sin ningún problema.

Un problema que sí me surgió fue el de cómo darle energía al lecor RFID dado que utiliza 3.3v y el Pro Micro provee solo una salida de 5v. Para solucionar este problema utilicé una fuente para protoboard que me permite elegir entre 5v y 3.3v para las diferentes líneas.


 

Si se utiliza una fuente para la protoboard es imporante unificar la tierra (GND) de la propia fuente y de la del Pro Micro.

Pueden buscar otras soluciones en internet si es que no tienen una fuente disponible; se pueden utilizar resistencias en serie para bajar el voltaje.

Verán que cada paso del sketch está comentado para su mayor comprensión. Los pasos a seguir son bastante sencillos: tras comparar el UID del TAG utilizado vemos si este es el autorizado o no. En caso de serlo el microcontrolador "imprime" el password, envía la señal de enter/entrar y enciende el led verde por medio segundo; en caso de utilizar un tag no autorizado simplemente enciende el led rojo y el loop continúa ejecutándose hasta que se acerque nuevamente un tag.

Dejo el link al sketch:  

https://gist.github.com/mcattani/92f0fb8e9959ef4fec0a3327f9e4a690

Si este u otro de los proyectos publicados en este blog te pareció interesante por favor no dudes en dejar un comentario, darle like y compartir.

Saludos!

jueves, 7 de abril de 2022

Binance2Arduino

 

Ya en otra ocasión publiqué un proyecto que conectaba una aplicación hecha en Gambas3 con un Arduino (Temp2LCD). 

Como pueden ver en la captura de pantalla Binance2Arduino es una aplicación que busca la cotización de hasta dos criptomonedas mediante la web de Binance y la envía a un Arduino UNO para ser desplegada en un display LCD (16x2). El display que estoy utilizando cuenta con una interfaz I2C por lo que las conexiones son bastante sencillas.

Hay un LED conectado en el pin 13 que se enciende cuando el Arduino recibe información desde la pc.

Recuerden que en el Arduino UNO el pin digital 13 ya cuenta con una resistencia integrada, si van a utilizar otro pin deben conectar una para evitar quemar el LED.

La función del LED es puramente estética. Me sirvió al momento de escribir el sketch como ayuda visual para ver cuando se estaba recibiendo información en el Arduino.

El programa busca la cotización de dos criptomonedas (o una si se desea), recibe la información en formato json, la decodifica y la envía como una sola línea al Arduino. Previamente al envío recorta a 16 caracteres la información recibida que es el máximo de caracteres por línea que pueden mostrarse en el lcd (esto recorta algunos valores cuando la cotización posee muchos decimales). Luego el Arduino divide la cadena recibida en dos y la despliega en cada línea del display.

Como ven el programa es bastante simple. Podría complejizarse agregando, por ejemplo, un gridview para buscar mas cotizaciones e ir desplegándolas alternativamente en el Arduino. Si alguien quiere hacerlo, como en todos los proyectos que publico, el código fuente de la aplicación y el sketch de Arduino estará disponible en github. Puede ser un buen ejercicio para los que estén aprendiendo. También puede reemplazarse la conexión USB por una bluetooth por ejemplo utilizando un módulo HC-06. En este link pueden ver un proyecto donde utilizo dicho módulo. Las modificacione necesarias en el sketch pueden copiarlas de ahí, son muy simples.

Me gustaría volver a repetir este proyecto utilizando un esp8266 (que hasta ahora nunca usé) y un display OLED para mostrar más información.

Link del proyecto en GitHub: https://github.com/mcattani/binance2arduino

Espero que este proyecto les haya resultado útil, o por lo menos entretenido. De ser así los invito a dejar un comentario y compartir.

Saludos!.

sábado, 20 de noviembre de 2021

Agregando conectividad Bluetooth a un parlante (Mod.)

Este proyecto es bastante diferente a los que venía publicando anteriormente.

Desde hace bastante tiempo tenía unos parlantes AIWA de un equipo de audio estropeado que finalmente fue descartado. Hace poco se me ocurrió la idea de ver si podía transformar/adaptar uno de los parlantes (el otro tiene roto el bafle) en un parlante Bluetooth de buena potencia/calidad.

Empecé probando el parlante en un equipo existente para comprobar que funcionase y por suerte así lo hizo. No tengo manera de evaluar objetivamente al mismo pero la calidad del audio me pareció excelente.

El próximo paso fue investigar qué componentes necesitaría, en principio requeriría:

  • Un módulo amplificador mono. El modelo que indicaba el parlante no me brindó mucha información, más que la de afirmar que era de 80W.
  • Un módulo receptor de audio bluetooth.

En cada caso fui probando los componentes, cada uno con su propia fuente de energía. Las fotos que ven son el producto final.


Con respecto al amplificador me decidí por un Módulo Amplificador de Audio Mono 60w Clase D Tpa3118

Características:
Circuito Integrado: TPA3118
Rango de tensión: DC8-24V
Potencia de salida: 60 W máx.
Número de canales: 1 (MONO)  

Como fuente para el amplificador utilicé una fuente de una vieja netbook que según sus especificaciones proveía 19.5v / 2.4 amperios.


Con estas características me pareció que la fuente iba a ser suficiente.
Corté el conector y soldé los cables al amplificador. Con ayuda de un multímetro identifiqué los polos +/-.

Con respecto al módulo receptor de audio BT me decidí por el siguiente: Módulo Placa Receptor Bluetooth Sin Pérdidas Estéreo 5v Mp3 .

Características:
Fuente de alimentación: 3.7 - 5v
Distancia de transmisión: 15 metros
Bluetooth version: 4.1
Voltaje de operación: Soporte de alimentación de 5 voltios
Distancia de transmisión: 15 mts.

Para probar el módulo lo alimenté utilizando un cargador común de celular (creo que era de un antiguo Motorola que tenía por ahí guardado). Le corté la terminal USB y soldé los cables a la placa (como se ve en la imagen el módulo puede ser alimentado con un USB pero el conector que tenía no era el mismo).

Me aseguré que el cargador no sea de los de carga rápida, dado que esos entregan 9v y no 5v como requiere el módulo.

Aclaración: Las características arriba mencionadas corresponden a los datos proporcionados por el vendedor. En mi caso adquirí los módulos a través de Mercado Libre.

Del receptor BT saqué tres cables:

  • El GND conectado al “-“ del amplificador
  • Y los canales derecho/izquierdo (left/right) los uní y los conecté a la terminal positiva (“+”)

El primer intento fue más o menos un éxito. Tuve que desoldar y volver a soldar los cables entre los módulos, por alguna razón el volumen era muy bajo y el audio tenía mucho ruido. Pero tras solucionar este problema el resultado fue excelente, la potencia del audio y la claridad del mismo no dejaron nada que desear.

Una vez que me aseguré que todo funcionara bien empezó la tarea de ver como seguir, necesitaba poder:

  • Buscar una nueva fuente para el receptor BT, ya que hasta el momento venía utilizando una fuente para cada módulo.
  • Agregar al parlante algún interruptor de encendido/apagado.

Respecto de la nueva fuente, conseguí en el sitio antes mencionado una Fuente Switching Ac 220v Salida Dc 5v 700ma Step Down Ac/Dc.

Características:
Voltaje de entrada: 50-270V AC
Voltaje de salida: 5V DC (± 0.3V)
Corriente de salida: 700 ma
Potencia de salida: 3.5W
Protecciones: Corto circuito / Sobretensión / Sobre corriente / Temperatura

Reemplacé el cargador que alimentaba el módulo receptor BT con la fuente switching step down.

A partir de acá fue ir cableando todo con cuidado. Utilicé una bornera para unir la entrada de 220v con las salidas. Unifiqué la entrada de ambas fuentes en una sola terminal de la bornera y en el otro extremo armé un cable común y corriente con su respectivo conector macho (pueden pedirlo en cualquier casa de iluminación por ejemplo, con el largo que quieran).

También agregué un switch que conecté a la línea que va directamente a los 220V, lo que permite el encendido/apagado de todo el conjunto.

El último paso consistió en ir ubicando todos los componentes; utilicé pegamento térmico para asegurarlos detrás del parlante. Con el pegamento aseguré también la bornera y todos los cables (para evitar que tirones estropearan alguna conexión).

Es convenientes encontrar alguna manera de proteger los módulos.

Recordar que la fuente que alimenta al receptor BT recibe 220V AC por lo cual es conveniente que encentren alguna forma de aislar los componentes por seguridad.

En mi caso tenía una cajita de acrílico con bordes de madera que utilicé para contener todos los módulos. También utilicé el pegamento sobre todas las conexiones para asegurarlas y sobre la bornera para aislar bien las líneas de 220v.


Sé que el resultado podría ser mucho más prolijo y estéticamente agradable pero fue así como salió ¯_(ツ)_/¯ de frente el parlante se ve impecable por lo menos :).

Lamentablemente ni la potencia ni la claridad del audio se aprecian bien en el video.

Debo decir que lo vengo utilizando desde hace un tiempo, y a riesgo de repetirme el resultado superó por mucho mis expectativas. Lo vuelvo a repetir, la calidad de audio es excelente, tanto los agudos como los bajos se escuchan perfecto. Y la potencia de sonido es más que suficiente para cualquier ocasión, pienso que un amplificador de más potencia podría estropear el parlante. Me hubiera gustado que el otro parlante no hubiera estado estropeado para hacer una versión estéreo (que era mi idea original).

Espero les haya interesado este proyecto, también espero haber sido claro relatando todos los pasos que fui realizando para que cualquiera pueda hacerlo. Si tienen algún parlante tirado por ahí les recomiendo probarlo. Los componentes (módulos) no son caros y todo el resto puede conseguirse en cualquier casa de iluminación.

Cualquier duda, consejo o comentario, por favor no duden en escribir abajo.

Saludos!

lunes, 11 de octubre de 2021

Control Swap/zRAM

 

Esta sencilla aplicación cumple diversos propósitos.

El primero es el de poder ajustar el valor de la swappiness.

El parámetro del kernel que gestiona el uso de la memoria virtual es el anteriormente mencionado swappiness, y básicamente podemos decir que se encarga de definir que tan seguido accedemos a la partición de intercambio y que tanto contenido copiamos en ella, mediante un argumento que varía entre 0 y 100.
Citado de: ubunlog.com

Si están utilizando Ubuntu por ejemplo y no han modificado este valor, seguramente sea de 60. En mx-Linux (que utilizo en una notebook de bajo recursos) el valor por defecto es de 15.

Volviendo a citar la web antes mencionada:

Cuando se lo deja por defecto en 60 lo que se le dice al kernel es que vaya y utilice la memoria virtual cuando nuestra memoria RAM tenga el 40 por ciento o menos de su capacidad libre.

La aplicación permite cambiar este valor (podemos ir probando diferentes valores para ver cuál es el que más nos conviene).

Cabe aclarar que los cambios no son permanentes, al reiniciar le ordenador el valor volverá a ser el que había por defecto. Podemos volver a cambiarlo con la aplicación o cambiarlo de manera permanente, para tal fin recomiendo visitar el blog arriba mencionado para ver las instrucciones.

La segunda función que tiene el programa es la de activar/desactivar completamente la swap.

En lugar de utilizar espacio en la memoria RAM, el swap utiliza el disco duro para almacenar datos temporales, así se reduce el uso de la RAM. El uso combinado de memoria RAM y swap crean una memoria virtual de mayor capacidad a la que trae el ordenador por defecto. Citado de: Wikipedia

En ocasiones desactivo la swap para hacer uso de la memoria RAM en su totalidad. Aunque si uno se dedica bien a ajustar el valor de la swappiness no sería esto necesario.

La tercera función permite activar/desactivar el uso de la zRAM.

zRAM es un módulo para el kernel Linux que crea un dispositivo de bloque comprimido en RAM. Dicho con otras palabras, crea un disco de RAM con compresión on-the-fly (sobre la marcha). Este dispositivo de bloque creado con zRAM suele ser usado como swap, de ahí que haya entrado en competición con las particiones de área de intercambio usadas en Linux desde hace décadas. Citado de: muylinux.com

Hablar sobre las características y la complejidad de la zRAM excede a la entrada de este blog, para saber más y ver los distintos parámetros que pueden configurarse les recomiendo visitar el link recién citado.

En estos momentos me encuentro probando diferente configuraciones de la zRAM para ver cuál es el más apropiado para mi ordenador y evaluar cuál es el impacto total sobre el sistema. De ahí que me pareció una buena idea incluir en la aplicación la capacidad de activar/desactivar la zRAM. Además como pueden ver en las capturas de la aplicación ésta da información respecto del algoritmo que se está utilizando, el tamaño de la zRAM, etc.

Tal como se aclara en el programa es necesario tener instalado el paquete zram-tools para poder utilizar esta función del programa.

Como siempre dejo el link al proyecto en GitHub donde pueden descargar tanto el código fuente como los paquetes deb para su instalación.

Link: https://github.com/mcattani/Control_Swap_zRam

Espero les sea de alguna utilidad!

Saludos!

sábado, 4 de septiembre de 2021

Juego "Simon Dice" (Simon Says) hecho en Arduino

Después de tanta prueba y error pude crear mi versión del juego “Simón dice” (Simon Says).

Sé que hay varios ejemplos en internet del juego pero quería crear una versión propia. Vi varios ejemplos (y probé otros tantos), la mayoría no los pude hacer funcionar a pesar de copiar y pegar el código directamente en el IDE, otros que sí funcionaban me parecía que el código era muy rebuscado.
Igualmente me había propuesto crear mi propia versión como un desafío que fuese más sobre el código que sobre las conexiones o la parte técnica.

El resultado lo pueden ver en el video, que aún tiene algún que otro bug a corregir, pero funciona bastante bien.
Creo recordar que la versión original aumentaba la velocidad de la secuencia que mostraba lo que iba ingresando el jugador. No incluí esa función en el código, me pareció que así era más amigable al jugador (además de que tengo pésima memoria _(ツ)_/ ).

Foto muestra
El código está bastante comentado. Para que quien lo descargue pueda seguir paso a paso para qué es cada parte del código y, con suerte, no tenga que luchar tanto como yo para entender los ejemplos que tanto abundan.
Creo que el resultado es bastante bueno y para aquellos que estén aprendiendo, como yo, les pueda ser de bastante utilidad.

La única parte del código que debo aclarar no es de mi autoría es la melodía que se reproduce cuando el jugador pierde la partida. La misma la copié del siguiente link: https://forum.arduino.cc/t/piezo-buzzer-win-and-fail-sound/133792/2, así que los créditos van al autor. Puede que otras partes del código estén basados en ejemplos que se encuentren en internet, no recuerdo haber copiado otra cosa; pero como ví tantos ejemplos cuando me estancaba puede que algo se me haya quedado. Aseguro que salvo lo mencionado recién, el resto fué escrito por mí.

Las conexiones son bastante sencillas. Recuerden conectar los leds con sus correspondientes resistencias de 220 ohms y los pulsadores con sus resistencias de 100 ohms a tierra (ground/GND).

Conexiones
 Conexiones:

Elementos PIN
Led 1 D6
Led 2 D7
Led 3 D8
Led 4 D9
Pulsador 1 D5
Pulsador 2 D4
Pulsador 3 D3
Pulsador 4 D2
Buzzer D11

Usé leds de diferentes colores porque me parecía más atractivo visualmente, pero es indistinto que leds utilicen.

Es importante (si modifican las conexiones) dejar sin conectar el pin A0, ya que como se verá en el código se utilizará como semilla para generar la secuencia aleatoria. De usarse ese pin recuerden cambiar randomSeed(analogRead(0)) a algún pin que no estén utilizando.

Una segunda versión del juego podría incluir:

  • Sonidos al presionar los pulsadores y reproducir dichos sonidos al repetirse la secuencia.
  • Algún tipo de display para mostrar el nivel alcanzado por el jugador.

Bueno, espero les haya interesado / servido este proyecto. Creo que el resultado es bastante divertido.

Link al proyecto en GitHub: https://github.com/mcattani/simon_dice_arduino

Espero sus comentario debajo! :)

Saludos.