domingo, 20 de marzo de 2016

Programación de un ATtiny85 con Arduino

Algunas veces he tenido ideas para proyectos en las que el circuito a aplicar era bastante simple pero no por eso menos útil. Por poneros un ejemplo, imaginemos una persiana con el motor de subida y de bajada ya incorporado. Si queremos que frente a una determinada luz ambiente la persiana se adapte para la entrada de luz natural en la habitación, solo necesitamos, aparte del Arduino, un LDR (resistencia que varía en función de la luz que le llega) y un relé que haga de "llave de paso" para activar o desactivar el motor. Si además de la sencillez del circuito tenemos poco espacio disponible puede que una placa Arduino no sea la mejor opción para gobernar el circuito. Existe una alternativa y es usar un microcontrolador puro y duro. Por puro y duro me refiero sin nada de electrónica adicional como en las placas que ya conocemos que vienen con conectores USB, Jack de alimentación, contactos para todos los pines, algún led incorporado... Me estuve informando acerca de esto y vi que uno bastante versátil es el ATtiny85 de Atmel (fabricante del ATmega que llevan casi todos los Arduinos). Sus dimensiones son ridículas como se puede ver en la foto que os dejo más abajo, y las prestaciones, aunque son más limitadas, pueden ser suficientes para el proyecto que tengamos en mente.

ATtiny85 sobre una moneda de 1 céntimo de euro.
Muchas veces puede ser útil incluso combinar un circuito Arduino con un ATtiny. He visto por Internet que hay gente que lo utiliza para hacer un hardware-reset de Arduino y evitar así detenciones inesperadas al llegar el reloj interno a cierto número de pulsos. Esto sucede porque una placa Arduino no puede estar funcionando de por vida sin hacer un reset de vez en cuando. La variable interna en la que se almacena el valor que leemos utilizando la función millis() es de 32 bits lo que se traduce en que puede contar hasta 4.294.967.296 (2^32) (en milisegundos) que son casi 50 días. Al llegar a esa cantidad, según tengo entendido (nunca la he tenido 50 días funcionando), se bloquea y para prevenir esto es para lo que se utiliza, con ayuda de un relé, el hardware-reset que no es otra cosa que apagar y encender Arduino mecánicamente.

Y, ¿qué es lo bueno de este microcontrolador? ¿por qué lo he escogido? La respuesta es muy sencilla: porque lo podemos programar en lenguaje Arduino con el IDE que hemos utilizado siempre, utilizando el propio Arduino UNO (no he probado otros de momento) como programador sin necesidad de soldaduras o montajes de cables para conectarlo al ordenador por puertos paralelos, USB... Todo muy sencillo con apenas unos retoques en la configuración del IDE.

Antes de nada, estas son algunas de las características del micro del que os hablo:
  • Dimensiones: 0.9 x 0.7 cm. aprox.
  • Alimentación a 5V.
  • 5 entradas/salidas de las cuales 2 son PWM.
  • Memoria de programa: 8 kB.
  • Memoria EEPROM: 512 bytes.
  • Memoria SRAM: 512 bytes.
  • Reloj interno a 1 o a 8 MHz, ampliable hasta 20 MHz con cristal externo.
Diagrama del patillaje del microcontrolador

Aquí dejo el datasheeet para consultar más datos si fuera necesario: Datasheet ATtiny25/45/85

Configuración de nuestro Arduino UNO como grabador

Como dije antes, elegí este microcontrolador por poder programarlo con Arduino sin necesidad de montajes complicados ni de placas grabadoras adicionales, por lo tanto, vamos a preparar nuestro Arduino como grabador. Para ello abrimos el IDE (que como siempre, os dejo el enlace al final de la página) y nos vamos a Archivo > Ejemplos > ArduinoISP. Verificamos la configuración de subida (Arduino/Genuino UNO en el puerto correspondiente) y cargamos. Ya tendremos configurada nuestra placa como un programador de microcontroladores.



Conexión del microcontrolador

Algo muy importante y que tendremos que tener en cuenta durante todo el proceso de manipulación del micro es que no da igual la posición en la que lo conectemos. Conectándolo mal podríamos quemarlo. Según el esquema de patillaje que os dejo junto a las características del chip más arriba, cada patilla tiene su número y la orientación viene dada por una muesca en el dentro del lado pequeño del micro o por un punto troquelado. En la imagen en la que aparece sobre una moneda de un céntimo se puede apreciar lo que digo (está al lado del triángulo que hay en la inscripción). El pin de la esquina en la que se encuentra ese "punto" sería el 1 (reset).

Para conectar el ATtiny85 yo me fabriqué una PCB, que se puede ver en algunas imágenes de la entrada de la fabricación de PCBs, con el fin de tener cierta facilidad a la hora de reprogramar el chip en caso de necesitarlo y no andar haciendo montajes en una protoboard aparte. Dejo al final del post el archivo pdf de la placa para que quien quiera pueda reproducirla siguiendo la entrada que mencionaba antes. Aún así, muestro también un esquema de conexionado para poder programarlo sin tener la PCB que decía.


Aunque el recortado de la placa deja que desear, cumple su función


Condensador de 10µF/16V. Imagen hecha con Fritzing.
A partir de este diagrama se pueden hacer algunas observaciones. Los leds no influyen en el grabado del sketch en la memoria del micro, son simplemente "notificaciones visuales". El verde es el de alimentación, el rojo nos indicará si se produce algún fallo en el proceso de grabado y el amarillo nos informará de cuando se está programando el chip. Por otra parte, el condensador (10µF/16V), según he leído, es necesario conectarlo entre el pin reset y GND de nuestro Arduino para evitar un auto-reset que se produce, en teoría, a la hora de cargar el sketch en el ATtiny85. Yo por ejemplo no lo puse y no tuve ningún problema para programarlo. Si os diese fallo, la solución es tenerlo en cuenta y colocarlo. Ojo a la polaridad, que es electrolítico y no da igual ponerlo en un sentido que en otro (podría incluso explotar si lo conectásemos al revés). Por tanto (y así es como programé el mío), se puede omitir tanto la parte del condensador como la de los leds, siempre y cuando no dé fallos luego, que de ser así tendríamos que incorporar al menos el condensador.

Configuración del IDE y subida del ejemplo "Blink"

Para la preparación del IDE tenemos que instalar los "drivers" de los microcontroladores para que aparezcan en el apartado "Boards" del programa. Para ello nos vamos a Archivo > Preferencias, copiamos el siguiente enlace en "Additional Boards Manager URLs" y damos a "Ok".

Este es el enlace:
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Enlace: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Ahora nos vamos a Herramientas > Placa > Boards Manager y dejamos que busque y actualice los archivos. Esto tardará unos segundos. Si bajamos al final en la lista de packs de placas encontraremos la attiny de David A. Mellis. Seleccionamos la última versión disponible, en mi caso es la 1.0.1, y le damos a "Install". Cerramos y ya tendremos los micros instalados (digo los micros porque vienen cuatro en ese paquete, el ATtiny 44, 45, 84 y 85). Puede que sea necesario reiniciar el IDE para poder ver los ATtiny.



Para hacer la prueba vamos a subir el ejemplo Blink. Para ello, desde Archivo > Ejemplos > 01.Basics > Blink, lo abrimos y cambiamos en el código los "13" por "0". Esto es porque esos pines están definidos para el Arduino UNO, concretamente para hacer que parpadee el led que lleva incorporado la placa y conectado al pin 13. Al cambiarlo a 0 estamos diciéndole que parpadeará el led que conectemos al pin 0 del ATtiny85. Para subirlo, tenemos que definir algunas cosas. En Herramientas > Placa seleccionamos "ATtiny"; en Procesador, "ATtiny85"; en Clock, "1 MHz (internal)" y en puerto, el COM al que tengamos conectado el Arduino, en mi caso es el COM7. La referencia de este último sí que es a la placa Arduino UNO y no al micro ya que lo que el PC detecta es un Arduino. Por último, escogemos en Programador la opción "Arduino as ISP" (cuidado, no es lo mismo que "ArduinoISP"). Todo esto se puede ver en la siguiente imagen:



Le damos a subir y debería empezar a grabarse el sketch en nuestro micro. Si tenemos los leds conectados veremos cuando se termina de grabar o si hay fallos durante el proceso. En una de las pruebas que hice no conseguía grabar nada y la solución fue desconectar el chip, volver a cargar el sketch ArduinoISP del apartado "Configuración de nuestro Arduino uno como grabador" y repetir el proceso de grabación. Lo aviso como posible solución si os ocurre lo mismo.

Prueba en un circuito real

Ahora que ya tenemos el ATtiny85 grabado vamos a probarlo en el circuito. Según el esquema del patillaje que os dejo con las características, el pin 0 que cambiábamos en el código corresponde con la patilla 5 o sea que aquí será donde conectemos el led. La alimentación del micro es a 5V por lo que se puede usar un regulador del estilo del 7805 o cualquier otra fuente que nos entregue ese voltaje, aunque yo, para evitarme complicaciones y siendo  que estaba haciendo pruebas, utilicé el mismo Arduino. Un posible circuito podría ser el siguiente:




Aquí finaliza el proceso de grabación, pero antes de terminar hay que puntualizar algunas cosas.

Extras

Cambio de velocidad del procesador (usando el cristal interno)

En el IDE veíamos que en Clock podíamos seleccionar varias velocidades. Según los usos que le vayamos a dar, la de 1 MHz que es la que hemos utilizado nosotros puede ser suficiente o no. Aún así podemos subirla a 8 MHz (internal). Esto quiere decir que el ATtiny85 usará el cristal interno que tiene igual que antes, pero en vez de a un millón de ciclos por segundo (1 MHz), lo hara a ocho (8 MHz). Para cambiarlo, no solo hay que seleccionar la opción en el menú del reloj. De hecho si probáis a configurarlo a ocho, siempre "internal", veréis que a pesar de poner 1000 en el delay del Blink, lo que sería una pausa de un segundo, el led cambiará cada ocho segundos. ¿Coincidencia que al subir la velocidad a 8 MHz el led cambie cada ocho segundos? 

Para solucionar esto tenemos que quemar el Bootloader en el chip y es tan fácil como en Herramientas seleccionar toda la configuración que deseemos (que sería la misma que teníamos a la hora de probar el led durante el tutorial, pero con 8 MHz (internal) en Clock) y darle a "Quemar Bootloader". Una vez hecho esto, ya podremos subir nuestro sketch y funcionará como queremos. Cuidado porque subir la velocidad del procesador significa que consumirá más al hacer más cálculos por segundo, y si esto lo destinamos a algún proyecto en el que vayamos limitados de batería puede suponer problemas de alimentación y por tanto menos autonomía.

Uso con cristal externo

También se puede utilizar nuestro ATtiny85 con un cristal externo. Si no estáis muy familiarizados con ellos os recomiendo un vídeo de Terrazocultor en el que habla de ellos (enlace) y también tenéis el link a su canal en el apartado de Enlaces de interés del blog. A lo que íbamos. Utilizar un cristal externo implica privar pines del micro de su función de entrada/salida, concretamente el 2 y el 3, lo que nos reduce el número de pines operativos a 3, solo por utilizarlo a 16 o a 20 MHz, algo desde mi punto de vista y manteniendo el fin de utilizar un micro para tareas sencillas en lugar de un Arduino es innecesario. No lo he utilizado nunca con oscilador externo y no puedo dar más detalles. Tampoco sé si el cambio de configuración será tan fácil como quemarle otro bootloader. Si algún día lo pruebo, lo explicaré en una entrada aquí, en el blog.

Funciones válidas

Según he leído, hay una lista de funciones que sirven y se pueden implementar sin ningún problema en nuestro ATtiny85. Por supuesto, la sintaxis de C como if, else, for, switch, etc. también funcionará. Esas funciones son:
  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogWrite()
  • analogRead()
  • pulseIn()
  • shiftOut()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Donde conseguirlo

Y la pregunta del millón, ¿dónde puedo conseguir uno de estos? Mi recomendación es preguntar en tu tienda habitual de electrónica. Probablemente, al no ser algo muy demandado, no tengan pero te lo puedan encargar. Aquí en España está alrededor de los 4€ la unidad. Yo suelo adquirir todo lo que puedo en mi tienda de electrónica, pero en este caso recurrí a AliExpress. Buscaba este micro para aprender más acerca de él y abrirme otra puerta para futuros proyectos, lo que se traduce en hacer pruebas y por tanto el componente en cuestión se vuelve muy susceptible de ser dañado. Como soy precavido y no me gusta tener sobresaltos durante cualquier proceso que esté llevando a cabo, pensé que comprarme tres a 4€ cada uno era mucho dinero siendo que solo quería experimentar. Me metí en AliExpress y vi un pack de 5 unidades a poco más 4'50€, algo mucho más asequible. Hay que decir que también hay venta individual, pero teniendo en cuenta lo que tardan en llegar ya que vienen de China, un lote de cinco no me parecía tan mala compra. No os pongo el enlace porque estas cosas varían de precio, unos céntimos arriba o abajo, o simplemente al ser vendidos por particulares, desaparecen del mercado y surgen otros nuevos. Este es el aspecto que tenían:

Lote de 5 ATtiny85 de AliExpress

Y dicho esto finalizamos la publicación. Como siempre, cualquier duda se puede dejar en los comentarios.

Enlace al IDE de Arduino: https://www.arduino.cc/en/Main/Software
 
NOTA: En la disposición de componentes pone TINY13. Esto es porque en la librería de Eagle no encontré el ATtiny85 pero no importa porque en cuanto a dimensiones son idénticos, que es realmente lo que me interesaba. La muesca aparece a la izquierda, por tanto, colocaremos el micro con el punto de forma que este quede en la esquina inferior izquierda.

Hacer esta placa significa disponer de un zócalo para integrados de 4+4 pines con el fin de poder el quitar y poner el micro todas las veces que haga falta. Fabricar la placa sin zócalo no tiene sentido.

lunes, 7 de marzo de 2016

Diseño y fabricación de una PCB

Una PCB, del inglés Printed Circuit Board, es un circuito electrónico fabricado sobre una lámina normalmente de baquelita o de fibra de vidrio. En un principio está formada por dos capas, la aislante (de los materiales dichos) y la conductora, que es de cobre. Mediante diversas técnicas se busca retirar el cobre de ciertas zonas de la placa y dejar el de otras con el fin de que estas últimas actúen como cables. Aunque nosotros trabajaremos con las de una sola cara de cobre, industrialmente se pueden hacer de muchísimas más a estilo sándwich.

Para la fabricación casera (y no por eso con acabado menos profesional) se pueden utilizar varios procesos que consisten normalmente en transferir un dibujo (el circuito) a la placa y retirar el cobre que no tapa el dibujo, que es lo que realmente da lugar a distintos procedimientos. Algunos de estas técnicas son:
  • Con rotulador. Consiste en dibujar a mano sobre la cara del cobre el circuito con un rotulador permanente. Luego se ataca el cobre con ácido de manera que se elimina todo lo que la tinta no cubre. Por último se retira la tinta con alcohol o acetona.
  • Con planchado. El proceso es similar. En este caso se imprime en papel fotográfico (satinado) el circuito con una impresora láser y se plancha (sí, como la ropa) sobre la cara del cobre de forma que el tóner se transfiere a la placa. A partir de ahí se procede igual que el caso anterior. Este es el método que explicaré y se suele conocer como "método del planchado".
  • Con insoladora. En este proceso se utiliza una placa con un recubrimiento especial fotosensible. Se imprime igual que en el método del planchado pero esta vez sobre papel de acetato (un "papel" de plástico transparente con el que se hacían las antiguas transparencias cuando no existía PowerPoint). Este papel se coloca encima de la placa y se le aplica luz, normalmente con una insoladora, de forma que la parte que hay debajo de la tinta no se irradia pero el resto del "cobre" fotosensible sí. Luego con una disolución se revela el cobre para hacer aparecer el dibujo y se baña en ácido como en los métodos anteriores. Este método es más costoso y más delicado por el tema de aplicar la luz por igual en toda la placa (por eso hay gente que se hace insoladoras caseras con tubos fluorescentes) y porque las placas vírgenes de cobre son un poco más caras además de tener que disponer de dos disoluciones, la del líquido revelador y la de ácido.
  • Con CNC. Un CNC es una fresadora controlada por ordenador (Control Numérico por Computadora). Un taladro en vertical, es decir, con la broca hacia abajo, colocado en una máquina capaz de moverlo por los tres ejes X, Y y Z, lo pone en marcha y "dibuja" en el cobre el circuito que has diseñado en el ordenador. La broca retira el cobre de las zonas indicadas y deja las pistas de cobre que queremos. Este método es el que proporciona un acabado más profesional al tener una precisión milimétrica pero también es el más caro y más difícil de llevar a cabo debido a que las fresadoras CNC no son baratas tanto si la compras como si la fabricas. Además la configuración es un paso importante que depende sobre todo del modelo, tamaño y programa que uses para ponerla en marcha. Si eres un gran aficionado a lo mejor te sale rentable tener una en cuanto a la relación precio-acabado, pero en mi opinión y a nivel de hobby no merece la pena.

Empezamos con el tutorial:

Como he explicado antes, nosotros nos vamos a centrar en el método del planchado, el cual consta de cuatro partes: el diseño, la impresión, la transferencia (el planchado propiamente dicho) y el atacado.

Diseño:

Para diseñar un circuito impreso existen varios programas, algunos gratis como KiCad y otros de pago como Proteus o Eagle. Con estos programas se diseña el esquema del circuito (traen librerías con muchísimos componentes y siempre son ampliables con librerías de Internet) y luego se colocan los componentes en modo PCB para trazar las pistas (los "cables" que unirán los componentes). La gran ventaja de usar estos tipos de soft es que si el esquema está bien hecho nunca te vas a dejar ninguna pista sin hacer ya que el programa te indica que patilla va conectada con cada patilla en los componentes lo cual es de gran ayuda. En el diseño hemos de tener en cuenta la corriente que va a circular por las pistas y variar, dependiendo de esto, su grosor. Existen tablas de relación aunque para electrónica clásica de leds y transistores no hace falta mucho. Esto influye realmente si por ejemplo combinamos en una placa la electrónica para gobernar un relé y el circuito para el que el relé hace de interruptor, que puede ser por ejemplo un motor más potente o lámparas incandescentes de un consumo más elevado. No es lo mismo hacer circular 3 o 4 vatios (5V a 0'6-0'8A) que 60W (220V a 5-6A).

Diseño de un esquema y de su circuito impreso con Eagle. El componente Arduino UNO no viene con el programa, es de una librería extra.

Impresión:

Esta parte es de las más delicadas y de la cual va a depender el acabado final de la placa. Lo primero a tener en cuenta es cómo se va a ver una vez impresa y transferida. Es recomendable hacerse un boceto en papel para poder imaginar la disposición de las pistas, ya que va a ser esto lo que condicione la orientación de ciertos componentes como por ejemplo de los circuitos integrados. Una resistencia por ejemplo es reversible porque no tiene polaridad, e incluso un condensador electrolítico (con polaridad) se puede voltear suponiendo que nos equivocamos al imprimir. El problema viene por ejemplo con integrados de 4+4 patillas ya que no es orientable en todas direcciones y no conviene desdoblar pines para doblarlos al revés en el supuesto de que imprimamos al revés el circuito (en espejo) y necesitemos ponerlo "boca abajo". Esto se ve claramente si escribimos algo en la cara del cobre. Por eso de que una imagen vale más que mil palabras os dejo esta foto con la que quedará claro a qué me refiero.


Si vamos a imprimir rótulos en la cara del cobre como 5V, PWR, VCC o GND tendremos que tener en cuenta como los veremos luego. Muchas veces es recomendable aplicar el "espejo" en el texto y no en todo el circuito.

Normalmente, como los componentes se introducen por la cara sin cobre, tal y como lo diseñemos en el ordenador podremos imprimirlo y transferirlo a la placa como se explica en el paso siguiente. Lo más importante de la impresión es que se tiene que usar una impresora láser y papel satinado (papel del que brilla por una cara, como el papel de fotografía). La importancia de que sea con láser es porque la tinta funciona de distinto modo. En las de chorro de tinta (las convencionales), esta es líquida y es absorbida por el papel, en cambio en una impresora láser la tinta es una especie de polvo que se "quema" quedando pegado al papel. Por su parte, el papel debe ser satinado ya que no tiene tantos poros y la tinta no llega a ser absorbida. Este tipo de papel se puede comprar en papelerías y en tiendas de fotografía. Al imprimir es conveniente comprobar que las líneas no están interrumpidas y están claramente delimitadas. Todos los fallos que podamos detectar sobre papel se van a ver agravados durante el planchado y el bañado en ácido más tarde, por lo que es recomendable conseguir una impresión lo más perfecta posible. Siempre podemos jugar con la calidad de impresión en las propiedades de impresora y configurar parámetros como el tipo de documento a imprimir. El escoger una configuración u otra depende del modelo y del papel. En mi caso con la cantidad de tinta estándar es suficiente. Algo que sí es importante es desactivar la casilla de "Ajustar a tamaño de página" que suele presentar Adobe Reader al imprimir un PDF. Destaco esto porque si se amplía un milímetro a lo ancho, los componentes con un ancho de patas fijo como relés, integrados, potenciómetros... no encajarán en los pads que taladraremos al acabar el circuito. Si el circuito es muy pequeño a lo mejor no influye pero en seguida que el tamaño se ve incrementado también se ve incrementado este error.

Es recomendable imprimir varias copias además de centrarlas en el papel por si estropeásemos alguna durante el proceso. Algunas impresoras no tienen tanta perfección en los bordes del folio como en el centro.

Planchado:

En este paso vamos a transferir nuestro circuito del folio a la placa de cobre. Para esto colocamos sobre un paño seco (con el fin de proteger la superficie sobre la que planchamos) la placa con el cobre, limpiado previamente con alcohol, al descubierto por la parte de arriba. Hay gente que es partidaria de lijar la superficie para aumentar la adherencia de la tinta. Yo lo he probado de las dos formas y no he notado diferencia, lo que más influye es el grado de limpieza del cobre. A continuación colocamos el trozo de papel del circuito sobre la placa de forma que el tóner y el cobre estén en contacto. Planchamos el papel, con cuidado de que no deslice, durante unos segundos asegurándonos de las esquinas y los lados también reciben calor y quedan pegados. Conviene aguantar el calor más tiempo para cerciorarnos de que la tinta es transferida en su totalidad. Puede ser recomendable poner un trozo de papel de cocina encima y utilizarlo como señal para saber cuando está listo. Yo suelo retirar la plancha cuando el dibujo del papel que hemos puesto ha desaparecido. Al quitar la plancha, el papel debería haber quedado pegado al cobre (¡cuidado que quema!). Como se puede ver en las imágenes que dejo a continuación, utilizo un tablón de corcho para proteger la mesa. Tampoco hay ningún papel, como el del rollo de cocina que mencionaba antes, entre la plancha y el trozo de folio con el circuito. Esto es porque pretendía que al sacar la foto quedase claro por qué lado se aplica el calor.




Con ayuda de agua retiramos TODO el papel dejando solo la tinta.

También se puede sumergir sin miedo en una cubeta con agua para que el papel se humedezca y se vaya desprendiendo poco a poco.

El circuito debe quedar como el de la derecha, sin restos de papel entre las pistas. El izquierdo, debido a esos restos, plantearía problemas a la hora de eliminar el cobre que hay debajo del papel. Los restos fueron eliminados antes de pasar a la fase siguiente.

La idea es que al calentar la tinta se desprenda del papel y quede pegada al cobre, de aquí la importancia del tipo de impresora y de papel. Nuestra PCB ya estará lista para darle el baño de ácido.

NOTA: La plancha no tiene que tener ningún requisito especial. De hecho yo utilizo una de viaje pequeña que se calienta en cuestión de segundos y las placas salen perfectas.

Atacado:

Hay que destacar que existen los productos preparados para hacer la disolución y se pueden adquirir en tiendas de electrónica, pero también que los principios activos son los mismos del salfumán o agua fuerte y del agua oxigenada mezcladas. Yo utilizo el remedio casero y nunca me ha dado problemas. Cuanto más concentrada sea el agua oxigenada más rápido actuará la disolución sobre el cobre. La de farmacia o supermercado suele estar al 3% (11 volúmenes más o menos) y la de peluquería se vende como de 110 volúmenes (destinada normalmente a decoloraciones y por tanto más agresiva). Yo siempre he utilizado la de supermercado que es la que tenía a mano y, aunque me ha llevado su tiempo (15-20 min.), el acabado ha sido bueno. Tengo entendido que con la de peluquería, en 3-4 minutos la placa está terminada. Si no tienes experiencia recomendaría la más "lenta" porque te permitirá jugar mejor con los tiempos y dejarla un par de minutos más no supondrá ningún peligro, cosa que con la "rápida" puede suponer la eliminación de las pistas que quieres mantener. Siempre intento hacer una disolución al 50% de cada producto, añadiendo el salfumán sobre el agua oxigenada (reglas básicas de química, ácido sobre base). Lo suelo hacer a ojo, sin medir estrictamente, y si veo que el proceso es demasiado lento añado más salfumán. Como veis no es algo demasiado importante mientras la relación se mantenga dentro de unos límites. ¡OJO! Si esto se hace con el agua oxigenada más corrosiva (la de peluquería) probablemente si que haya consecuencias más graves como la destrucción de la placa al no mantener el circuito, por eso y sin tener experiencia, recomiendo mantener las medidas si se usa este otro producto. Ni que decir tiene que si la disolución se "come" el cobre, otro tipo de tejidos se verán también afectados así que conviene cumplir unas mínimas medidas de seguridad como protección en la superficie donde trabajemos y unos guantes para evitar contactos con la piel. Por esto, en caso de necesidad de entrar en contacto con el ácido, por ejemplo para extraer el circuito una vez terminado, utilizaremos algo de plástico o de madera, como un palillo de dientes, un palo de brocheta, unas pinzas... Si utilizásemos una espátula metálica o un cuchillo se verían afectados por el ácido.

Al introducir la placa en la disolución, el cobre cambiará de color. Para que el atacado sea uniforme se debe hacer un ligero oleaje en la cubeta donde lo hagamos, la cual debe ser de plástico ya que este es resistente a la mayoría de líquidos corrosivos domésticos. Hacerlo en un recipiente de cristal o de barro puede provocar que se destruya o se erosione parte del material del que está hecho e incluso que se desprendan esmaltes o desaparezca el brillo. En seguida, el líquido debería empezar a ponerse de color verde. Cuando veamos que se ha retirado todo el cobre que estaba al aire y nos quedan las pistas negras, sacamos la placa del ácido y la enjuagamos con agua. Con acetona y un pañuelo retiramos la tinta y nos quedaran las pistas de cobre al descubierto y perfectamente definidas si lo hemos hecho todo bien. Ahora ya solo nos quedaría recortar la placa en caso de necesitarlo y taladrar los pads, por donde pasaremos las patillas de los componentes, y los agujeros para los tornillos de sujeción que vayamos a poner para anclar la placa a algún tipo de caja o soporte. Es recomendable ver si hay alguna pista cortada mirando al trasluz la PCB o con ayuda de un polímetro midiendo continuidad. También debemos mirar que no haya conexiones entre pistas distintas. En caso de haberlas podemos rascar con algún objeto metálico con punta para retirar el sobrante, todo esto una vez retirada la placa del ácido y después de haber sido aclarada con agua. Como decía en el apartado de diseño, el grosor de las pistas dependerá de la corriente que vaya a circular por ellas. Si por algún motivo no pudiésemos ensancharlas, tenemos la baza de estañarlas con el fin de crear un cordón conductor más grueso y poder así con pistas más finas pero más "cilíndricas" solucionar el problema que se nos presenta. Al soldar, cuanto más finas sean las pistas más probabilidad habrá de que se desprenda el cobre de la placa a causa del calor por lo que debemos llevar cuidado a la hora de empezar a estañar o de soldar componentes.

Aunque esta imagen es de otra placa que hice la pongo para que se entienda mejor a lo que me refiero con que "el líquido debería empezar a ponerse de color verde":

Recipiente con una placa en la fase de atacado y los productos utilizados en la disolución.

Aspectos de los circuitos nada más retirar el tóner con acetona.

A la izquierda, la placa con solo las pistas estañadas. A la derecha, la placa con los componentes situados y soldados.
En el caso de la anterior foto, el estañado de las pistas es opcional ya que la corriente que va a circular por ellas es ínfima. Se trata de una placa para programar un ATtiny85 al cual dedicaré una entrada más adelante. Aún así, el estañado previene posibles oxidaciones del cobre y mayor protección de la conductividad al haber más volumen de material conductor en las conexiones entre los pads.

Aquí se ve una foto del circuito acabado y colocado sobre el Arduino. Lo que se ve escrito en tinta negra son indicaciones personales de conexión de los distintos pines.
El líquido sobrante no es reutilizable a no ser que sea para realizar otra placa en el mismo momento (esto no es fiable 100% ya que el poder corrosivo se habrá visto menguado después de su primera utilización). Con esto me refiero a que no podemos embotellarlo para posteriores usos. Por otra parte no lo podemos tirar por cualquier sitio (no olvidemos que es ácido). Para deshacernos de él antes lo debemos disolver en gran cantidad de agua de forma que su "poder" se vea reducido todo lo posible. Un cubo con agua sucia, por ejemplo de la que queda después de fregar, es una buena opción. Si hay poca cantidad de ácido incluso lo podemos tirar por el váter mientras tiramos de la cadena. Después del proceso conviene enjuagar bien todo lo utilizado y apartarlo para utilizarlo para futuras placas. Si utilizamos un recipiente de plástico de cocina, evidentemente no es recomendable utilizarlo luego para meter alimentos.

Con esto quedaría terminado nuestro circuito impreso, listo para ponerse en funcionamiento.

sábado, 12 de diciembre de 2015

Configuración del módulo bluetooth HC-05 por comandos AT

El módulo HC-05 es un módulo físicamente igual que el HC-06, el siguiente de la familia, pero diferente en cuanto al firmware que llevan grabado. La principal distinción es que se puede conectar a otro módulo al poder configurarlo como maestro, algo que en el 06 es imposible, siendo siempre esclavo. Ser maestro o esclavo NO determina la dirección del flujo de datos, es decir, la comunicación es bidireccional. Al igual que con el módulo HC-06, presentado en la entrada anterior, con el HC-05 también escribí un sketch con el objetivo de utilizar el Serial Monitor del IDE de Arduino como consola y poder, mediante esta, enviar comandos y modificar las propiedades configurables de estos módulos.

Al adquirir este módulo (que por cierto me costó muy barato, 2'74€) por AliExpress, lo primero que observé es que no tenía los pines típicos de un HC-05 que yo había visto por internet. En vez de STATE, RXD, TXD, GND, VCC y KEY, tenía STATE, RXD, TXD, GND, VCC y EN. Mi primer pensamiento fue que como el único pin diferente era el KEY (que sabía que era el necesario para entrar en el modo AT), el EN sería una especie de "enable" y tendría la misma función. Pero como estas cosas nunca son como te esperas, en las pruebas falló.

NOTA: Para los módulos "normales" todo lo explicado en este post también sirve, con la ventaja de tener el pin KEY accesible desde el primer momento y no teniendo que hacer soldaduras extra como me pasó a mí. Aunque recomiendo leer la entrada entera por si acaso, no habría ningún problema en acceder directamente a la parte de los comandos y del esquema de conexiones y posteriormente al código, saltándose la parte intermedia.

Después de buscar y buscar, me enteré de que había más de un tipo de módulo, y que lo que variaba era el patillaje de la base azul (lo que es realmente el módulo es la plaquita verde y es igual en todos. Nosotros llamaremos módulo al conjunto en sí, incluyendo la base azul y haré distinción cuando me refiera solo a la plaquita verde). El que yo tenía llevaba soldado un pulsador entre el pin de la placa verde correspondiente a la entrada en el modo AT, el cual debía estar pulsado para entrar. Pero no era así sin más porque midiendo continuidad con el pulsador presionado, el polímetro marcaba infinito, es decir, no había continuidad. Mi modelo de módulo era el GW-040 (o ZS-040) que funcionan de una manera ligeramente diferente a los "normales". Por esto decidí hacer lo que explico en el párrafo siguiente.


Pulsador en el módulo.

Casi toda la información que utilicé y en la que me baso para lo que explico a continuación fue sacada de http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/. Tengo que decir que no toda esa información me fue útil. Después de leer la página y hacer las pruebas pertinentes llegué a "mi" método pero antes de explicarlo quiero hacer un matiz. Manteniendo presionado el botón que traía mi módulo (teniendo el pin EN en HIGH) entraba en el modo AT, pero como dice la página de Martyn Currey, hay dos modos AT, que llama "full" y "mini". En el primero, todos los comandos están "habilitados", pero en el segundo hay unos cuantos que lanzan error al enviarlos. Para entrar, sí o sí hay que poner el pin 34 en HIGH pero una vez dentro podemos mantenerlo o quitarlo, quedándonos en "full" o cambiando a "mini". Mi planteamiento fue que iba a ser costoso estar pendiente de mantener el pulsador del módulo presionado y enviar los comandos a la vez a través del PC, por eso opté por cortar el plástico protector en el que van enfundados estos dispositivos y soldar en el pin 34 de la placa verde medio jumper (en vez de puentear el pulsador como habría sido lógico pensar ya que como he dicho antes, el polímetro no marcaba continuidad al accionar el pulsador). Luego le di un par de vueltas de celo para evitar tirones accidentales. Así quedó soldado:

Antes de "envolver" en celo.

Localización del pin 34 en la placa verde.

Así, poniendo el pin 34 en HIGH a través del jumper entraba en modo AT y a no ser que lo desconectase estaba en "full", teniendo acceso a todos los comandos, algo mucho más cómodo. Según he leído, hay que hacer un divisor de voltaje para alimentar ese pin 34 con 3.3V pero también digo que alguna vez lo he conectado a los 5V de Arduino y no ha pasado nada extraño, ha funcionado como siempre. La última cosa que señalar es que para entrar en AT hay que tener el pin 34 alimentado antes de conectar la alimentación del módulo, es decir, imaginando que tenemos una protoboard delante, conectar primero el pin que nos hace de KEY y luego "pinchar" el módulo. Sabremos que hemos entrado porque la luz roja se alternará en encendida y apagada en intervalos de un segundo en cada posición. También es válido conectar tanto alimentación como KEY y controlar por software cual se activa primero, por ejemplo con un delay().

Aquí dejo el enlace del datasheet (Datasheet HC-05) y una lista con todos los comandos (tomada de la guía del usuario del módulo bluetooth EGBT-045MS).

Aquí muestro el esquema de conexiones (sin divisor de voltaje en el pin 34):
Imagen hecha a partir de bases tomadas de Fritzing

Este módulo, para detectar un comando, tiene que leer el "final de línea" y el "retorno de carro" ("\r\n"), pero para simplificarlo aun más y no tener que estar pendiente de cambiarlo, ya va incluido en el código y por tanto el Serial Monitor tiene que estar, como de normal, en "Sin ajuste de línea".

En este momento ya podemos cargar el sketch a nuestro Arduino. El archivo .ino lo podéis encontrar en el enlace a "Archivos" al final de la entrada junto al enlace al IDE de Arduino.

Cabe destacar que al entrar en modo AT con el HC-05, este entra siempre en frecuencia 38400, así que nos ahorramos la función de "sintonización" a la frecuencia correspondiente que utilizábamos en el sketch del 06, por lo demás es casi idéntico.

Enlace al IDE de Arduino: https://www.arduino.cc/en/Main/Software

sábado, 17 de octubre de 2015

Configuración del módulo bluetooth HC-06 por comandos AT

Los módulos bluetooth del tipo HC-0X tienen unas propiedades editables como el nombre, la velocidad de transmisión de datos o el pin de emparejamiento. Esto, según varias páginas en internet, es muy fácil de realizar, tan fácil que no se explica ni se demuestra como hacerlo. Después de indagar mucho y no conseguir editar mi HC-06 recibiendo respuesta (sí que encontré código que grabado en el Arduino cambiaba la configuración del módulo conectado pero que no permitía ver las respuestas generadas por este) decidí crear mi propio sketch con el que se podría utilizar el Serial Monitor de Arduino a modo de consola. Tras varias pruebas y muchas comidas de cabeza para entender problemas que planteaba, salió a la luz el programa. A continuación está la información de los comandos para este modelo:

1. Test de comunicación
Enviar: AT
Respuesta: OK

2. Cambiar velocidad de transferencia de datos

Enviar: AT+BAUDX
Respuesta: OKY

Pudiendo tomar X e Y los siguientes valores

X..........Y
1..........1200
2..........2400
3..........4800
4..........9600 (Por defecto)
5..........19200
6..........38400
7..........57600
8..........115200
9..........230400
A..........460800
B..........921600
C..........1382400

El ordenador no soporta más de 115200 así que la única forma de controlarlo es mediante programación limitar el cambio de tasa de datos máximo a 8.


3. Cambiar el nombre del módulo (20 caracteres como máximo)

Enviar: AT+NAMEXXXX
Respuesta: OKsetname

Siendo XXXX el nombre que nosotros queramos darle.


4. Cambiar pin de emparejamiento (1234 por defecto)

Enviar: AT+PINXXXX
Respuesta: OKsetPIN

El pin es un número de 4 bits por lo que tiene que ser un número comprendido entre 0000 y 8888.


5. Leer versión de firmware

Enviar: AT+VERSION
Respuesta: OKlinvorV1.X

Siendo X el número de la versión de vuestro módulo.


Hay más comandos, concretamente tres más, que vienen explicados en el datasheet del módulo. Aquí dejo el enlace: Datasheet HC-06



Ya podemos cargar el sketch a nuestro Arduino. El archivo .ino lo podéis encontrar en el enlace a "Archivos" al final de la entrada junto al enlace al IDE de Arduino.


NOTA: Seleccionar "Sin ajuste de línea en el Serial Monitor".

El programa recoge lo introducido por el Serial Monitor del IDE de Arduino, comprueba en primer lugar si es un comando de cambio de frecuencia y luego lo envía (en este caso modifica también la frecuencia del Arduino). Si se trata de otro comando, el módulo genera una respuesta que el programa recoge y muestra. Si por el contrario la cadena de caracteres no es reconocida como un comando interpretable, no genera respuesta y por tanto el programa muestra "Comando no válido". A esto se le suman los controles necesarios de entrada de datos así como la selección automática de frecuencia en el arranque del programa. Por automática se entiende que el Arduino se sintoniza solo a la velocidad a la que esté configurado el módulo (el programa va enviando comandos en distintas frecuencias y cuando recibe respuesta se detiene y queda sintonizado, podemos decir que hace un barrido por todas las frecuencias posibles hasta encontrar la "buena").

En los comentarios del código hay también datos importantes a tener en cuenta a la hora de entender el código como que en los cambios de frecuencia, la respuesta es generada en la frecuencia en la que se encontraba el módulo antes de enviar el comando de cambio. Esto conlleva la siguiente secuencia: Enviar comando > Leer respuesta > Cambiar frecuencia.

Aquí está el esquema de conexión:

Imagen hecha a partir de bases tomadas de Fritzing
Enlace al IDE de Arduino: https://www.arduino.cc/en/Main/Software

miércoles, 23 de septiembre de 2015

Primera entrada: Bienvenidos!!

Esta es la primera entrada del blog y quiero que sirva de presentación del mismo, así que allá vamos.

Este blog nace con el objetivo de compartir conocimiento. Hace ya un tiempo, adquirí el Starter Kit de Arduino y desde entonces ha sido un no parar. Proyectos, ideas, ambición... todo eso me ha acompañado este tiempo en lo referente a la electrónica y a la programación. Pero nadie nace sabiendo. Todo lo que sé es fruto de horas y horas frente al monitor, consultando blogs, el playground o el foro de Arduino... También sé lo costoso que es conseguir información fiable de primera mano, no por la calidad de los posts de la gente, sino por compatibilidad de placas, módulos, o simplemente por el intervalo de tiempo que pasa desde que se publica algo hasta que tú lo necesitas y entonces lo descubres con versiones posteriores, firmwares actualizados, problemas corregidos, otros nuevos detectados, etc. 

Por todo esto he creado este blog. La idea es compartir lo que sé con todo el que quiera. Ahorrarle todas esas horas de trabajo y esos problemas que solucioné yo un día, que no los tenga que volver a solucionar otro (aunque buscar caminos alternativos siempre es una manera de innovar y descubrir métodos nuevos). Al fin y al cabo la ciencia nunca se construye desde cero, sino sobre lo ya descubierto y documentado.

Dicho esto espero que todos los lectores lo disfrutéis y no tengáis ningún reparo en comentar, preguntar, aportar... como he dicho arriba, nadie nace sabiendo. No preguntes por miedo a parecer tonto y serás tonto toda la vida.

Estamos abiertos a todo tipo de propuestas y sugerencias, tanto en lo referente a la forma y estética del blog como al contenido.

Ahora ya solo queda empezar.

¡Ánimo!