Reacción clásica a novedades científicas

Cita

La respuesta de los “conservadores” […] parece reflejar el esquema clásico de reacción inducido por las novedades científicas: no es cierto (primera fase); aunque sea cierto, es una cuestión secundaria (segunda fase); es cierto, pero yo ya lo había dicho (tercera fase).

Telmo PievaniRepensar a Darwin, Investigación y Ciencia, enero 2016

Altavoz Bose SoundDock + entrada de línea + bluetooth

Hace tiempo cayó en mis manos un altavoz Bose SoundDock de primera generación. Es un altavoz magnífico (y muy caro, unos 500 €), que se empleaba para reproducir música de un iPod o de un iPhone de las primeras generaciones (los que tienen conexión alargada, de 30 pines). El problema es que solo permite conectar uno de esos aparatos, ya antiquísimos, y que a ver quién usa aún uno… Además, en mi caso, la base estaba rota y ya ni siquiera tenía la clavija, por lo que estaba totalmente inservible. Pero, salvo que no había forma de conectarle un iPod o ningún otro dispositivo, el altavoz en sí parecía en perfecto estado…

Bose Sounddock

Así que me propuse arreglarlo. A continuación cuento todas las trastadas que le he hecho al altavoz, y cómo he llegado al resultado final, en el que tengo un altavoz perfectamente funcional, al que he añadido una entrada de audio por medio de una clavija de 2.5 mm, le he añadido bluetooth y un potenciómetro para regular el volumen. Ojo, que los primeros procedimientos que intenté no me funcionaron, pero los cuento también por si alguien se encuentra con los mismos problemas. Más adelante contaré cómo le he añadido una Raspberry Pi en la que he instalado el Google Assistant.

Pero antes, este es el resultado final:

 

Esta es la etiqueta que aparece en la base:

El frontal se demonta por medio de tres tornillos tor.

Podemos desconectar la banda, y luego hay que despegar el plástico negro:

Buscando por internet hay varias personas que han “hackeado” este altavoz con el mismo propósito, bien por rotura de la clavija como es mi caso, o para añadirle una entrada auxiliar. Mike Kruckenberg parece que fue el primero en explicar cómo lo hizo. Hay también varios vídeos en Youtube. Tengo que decir de antemano que el procedimiento de Mike Kruckenber, que es el primero a seguir (por simplicidad), no me funcionó. Por un lado mi placa parece ser una versión más antigua que todas las otras que he visto, y además sospecho que tendría algún problema más. Pero al final lo conseguí con otro procedimiento que contaré más abajo.

La idea de fondo es averiguar cuáles son los pines del iPod que mandan la señal de audio, y conectar ahí nuestra entrada. Son el pin 13 para audio izquierdo, el pin 14 para el derecho, y el 24 para tierra. Conectando ahí debería funcionar, pero hace falta un paso adicional pues solo mandando ahí audio el altavoz sigue sin funcionar. Al parecer, el iPod le indica por algún otro pin al altavoz que debe encenderse. No me entretengo a explicarlo (en el post de Mike Kruckenberg está muy bien explicado, y también en varios vídeos), pero su método no me funcionó. Aquí van las fotos de los intentos fallidos.

Otra prueba fallida:

Así que decidí dar por perdida la primera placa e ir directamente a la placa del amplificador, dentro.

Encontré otro post en el que hacían lo mismo, que lo explica muy bien. La idea es nuevamente localizar los pines de audio y “pinchar” ahí. Del encendido nos encargaremos luego.

Preparo una clavija hembra de jack de 3.5 mm y le sueldo los cables.

Como estos cables eran algo gruesos, con una pequeña broca agrandé ligeramente los agujeros donde iba a soldar en la placa. Inicialmente soldé por detrás:

Empleo blu-tack para mantener en su sitio los cables mientras sueldo. Siguiendo el mismo criterio de William Paul, realizo unos pequeños cortes al circuito, para que si hay algo más ocurriendo por ahí, no me afecte.

Al final me fue más fácil soldar directamente a las patas de la clavija, por delante:

Si probaba el altavoz con estas conexiones, escuchaba música por unos segundo nada más, y luego dejaba de sonar. Así que me quedaba arreglar el “encendido automático”. Para eso tenemos que ir un poco más adentro.

Desmonto la placa del amplificador en sí.

Hay que enviar entre 4.2 V y 5.5 V al pin 6 de este circuito integrado para que se encienda. Paul William lo hizo con un divisor de tensión con dos resistencias, pero es más fácil conectarle directamente un cable que lleve 5 V de la placa anterior, que es lo que hice yo. Soldé con mucho cuidado un cable al pin 6, que luego puse un poco de resina epoxi para que permanezca fijo eternamente.

Soldando ese cable a algún punto que tenga 5 V de la placa anterior (buscar con el multímetro), ¡funcionaba a la perfección!

Ya solo quedaba el volver a ensamblarlo todo en el interior y a hacer un poco de bricolaje para que el acabado fuese perfecto. Esto es lo que más tiempo me llevó…

Lo primero era hacer una tapa para el hueco frontal. Hice una planilla marcando el hueco en un papel.

Recorté la planilla y la pegué sobre un trozo de plástico negro de una tapa de un lector externo de DVD (que ya había usado antes en el megáfono de juguete).

Con mi Dremel casera recorto la tapa:

Tras el corte con la mini-Dremel, tuve que lijar mucho hasta que la tapa encajase perfectamente en el hueco. El resultado es perfecto, parece una tapa que viene con el altavoz nuevo…

Y ahora, a por el receptor de audio de Bluetooth. Compré este módulo de Bluetooth por 5.52 €. Le sueldo tres cables a las conexiones de audio.

Sueldo dos cables a una clavija de micro-usb, para alimentar el receptor de audio de Bluetooth a través de algún punto con 5V de la placa.

También sueldo tres cables a un conector de audio de 3.5 mm.

Los conecto en paralelo:

Pero no los conecto directamente a los tres puntos de entrada de audio en la placa, sino que como voy a querer regular el volumen conecto un potenciómetro estéreo logarítimico de 10 KΩ., que me costó 4.4 €.

El potenciómetro lo conecto así:

Y es logarítmico porque para audio tiene que ser así; el oido “no funciona linealmente”. Esta figura lo explica muy bien:

Busco un punto de tierra en la placa y le conecto un cable (blanco):

El otro cable (naranjha) lo conecto al mismo punto de 5 V que empleé para “encender” el altavoz.

Y ahora conecto un interruptor. Voy a sufrir para que me quepa todo dentro de este espacio…

Hago unos taladros en los botones originales de volumen + y – (que ya no tienen uso), que emplearé para el potenciómetro y para la clavija de audio. Fijo con pegamento epoxídico el conector de audio y con pegamento térmico el potenciómetro, que ya lleva su tuerca.

Esto parece el juego “Operación”…

¡Ya está!

Recorto un poco el fuste y le coloco el embellecedor al potenciómetro, y ya está terminado.

 

Referencias

http://mike.kruckenberg.com/archives/2006/06/add_aux_input_t.html

http://williampaulblog.blogspot.com.es/2012/11/ressurection-of-bose-sounddock-ipod-dock.html

Manejar un motor stepper con un driver DRV8825 y una Raspberry Pi

Para un proyecto que tengo entre manos (un scanner 3D por fotogrametría, ver esta entrada), quiero controlar un motor a pasos (stepper) con una Raspberry Pi. En esta entrada ya expliqué cómo hacerlo con Arduino, pero ahora lo voy a hacer con la Rapsberry Pi, y voy a emplear un driver DRV8825.

En teoría, al no ser linux un sistema de “tiempo real”, no es muy indicado para manejar directamente elementos que requieren un control preciso del tiempo. Para mis propósitos, como no necesito controlar de forma muy precisa la velocidad, sino la posición, me sirve sin problemas.

0j42241200

Características principales del driver DRV8825:

  • Para motores bipolares
  • Permite microstepping de hasta 1/32
  • 1.5  por fase o 2.2A si se dispone de ventilación forzada de aire o disipadores
  • Interfaz casi idéntica al A4988
  • 45 V máximo
  • Control de corriente máxima con un potenciómetro

El motor que tengo es un motor NEMA 17 JK42HS40-1704 13A, comprado aquí por 12.50 €.

Características:

  • Número de parte: JK42HS40-1704 13A
  • Tamaño de marco: NEMA17
  • Ángulo del paso: 1,8 grados
  • Voltaje: 3.4V
  • Corriente: 1,7 A/phase
  • Resistencia: 2,0 ohmios/fase
  • Inductancia: 3,0 mH/phase
  • Llevar a cabo el esfuerzo de torsión: 4000g-cm 58.30 OZ-IN
  • Inercia del rotor: 54 g-cm2
  • Esfuerzo de torsión de la muesca: 0,22 kilogramo-cm
  • Número de ventajas de alambre: 4
  • Peso: 0,24 kilogramos
  • Longitud: 40m m
  • Eje del motor: 5mm
  • Longitud del árbol delantero: 20 mm
  • Certificación: CE, ROHS, ISO9001

 

Para alimentar el motor empleo una fuente de alimentación de un ordenador (ver esta entrada).

Siguiendo las instrucciones de la página de Pololu, voy a emplear el siguiente modo de conexión, con paso completo (sin microstepping):

El esquema Fritzing sería así:

Manejar un motor paso a paso con DRV8825 y Raspberry Pi

La conexión de los cables del motor al DRV8825 la hago así:

  • B2: azul
  • B1: rojo
  • A1: negro
  • A2: verde

Para no dañar el motor tenemos que regular inicialmente el potenciómetro a la mínima potencia, girando el potenciómetro en sentido antihorario hasta el final, y más adelante ajustarlo hasta la capacidad del motor. En este vídeo se explica cómo regular adecuadamente la intensidad.

Empiezo con el motor desconectado. Lo primero, calculo el voltaje por cada fase. Para eso me fijo en las características de mi motor. Ahí me dicen que el motor es de 1.7 A / fase. Tendré que limitar el DRV8825 a este valor. Por encima de 1.5 A (y hasta 2.2A) el controlador DRV8825 debe tener ventilación forzada de aire o un disipador, así que le pego un disipador (me venía al comprarlo con el DRV8825), pues pretendo fijarlo en la capacidad máxima del motor.

Ahora tengo que ajustar la corriente del DRV8825 con el potenciómetro. Primero tengo que averiguar a cuánto he de limitar esa corriente. Para ello empleo la fórmula que viene en la hoja de especificaciones del driver:

Current Limit = VREF × 2

(Ojo, que por muchas páginas se ven otras fórmulas; hay que emplear la fórmula específica de nuestro driver).

Entonces:

1.7 = VREF x 2

VREF = 0.85 V

Pero ojo, este voltaje va asociado a la corriente máxima que recibirá el motor, y depende de la configuración de micropasos. Hay que consultar en la Tabla 2 de la hoja de especificaciones del DRV8825. En mi caso, con paso completo (full step), la corriente es un 71%, así que deberé multiplicar por este factor el resultado anterior:

VREF = 0.71 · 0.85 = 0.60 V

Así que el voltaje límite que debo ajustar es 0.60 V por fase.

Ahora tengo que ver dónde medir con el multímetro en el DRV8825:

Aunque es más fácil medir directamente desde el potenciómetro:

Desconecto el motor, pero alimento con 12V el DRV8825 y alimento también el Arduino a través del puerto USB. Con todo así, mido el voltaje y ajusto el potenciómetro hasta alcanzar mis VREF calculado antes (0.60 V).

Ya tengo el driver ajustado a mi motor, así que ya puedo conectarlo y empezar a utilizarlo.

 

En la Raspberry Pi voy a emplear código en Python. He conectado el pin de STEP del DRV8825 en el pin GPIO7 de la Raspberry Pi (pin 26), y el de DIR en el pin GPIO8 (pin 26). Mandando señales a estos pines podré indicar que se avance un paso (pin STEP), y cambio de dirección en en pin DIR. Por como tengo conectado todo, son pasos completos, nada de micropasos, que no me hacen falta por el momento.

Con el código siguiente en Python el motor da una vuelta completa en una dirección, y luego cambia de dirección y da otra vuelta:

# -*- coding: utf-8 -*-

import time                     #Para las pausas
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)        #Usar la numeración de pines de la placa

pinDir = 24                     #Pin DIR
pinStep = 26                    #Pin Step
numSteps = 200                  #Número de pasos del motor
microPausa = 0.005              #Número de segundos de pausa


GPIO.setup(pinDir,GPIO.OUT)
GPIO.setup(pinStep,GPIO.OUT)

while True:

        GPIO.output(pinDir,0)           #Establezco una dirección (0 o 1)

        for x in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

        time.sleep(microPausa)

        GPIO.output(pinDir, 1)          #Cambio de dirección

        for x in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

GPIO.cleanup()          #Para acabar correctamente

Y aquí un vídeo mostrando el motor en funcionamiento:

 

Referencias

https://www.pololu.com/product/2133

 

https://forum.pololu.com/t/drv-8825-stepper-motor-steps-and-delay-between-pulses/7530

Raspberry Pi Stepper Motor Tutorial