Puente H con Reles para el control de giro de motores DC

0 comentarios
En este post voy a explicar la forma de cómo diseñar un puente H basado en relés. Los puentes H son circuitos electrónicos ampliamente usados en robótica para el control de motores u otros actuadores que requieran de convertidores de potencia.
Los circuitos de puente H son tan populares que incluso los tenemos en circuitos integrados como el L293 o el L298. La hecho de construirlos surge como respuesta a la necesidad de querer usar motores u otros acutadores que requieran manejar grandes cantidades de corriente como por ejemplo cuando queremos diseñar un warbot cuyos motores consumen entre 20A y 30A con picos de hasta 50A.
Existen en el mercado puentes H que soportan esta carga de corriente, pero su precio es elevado. Por eso, frente a ello les muestro el esquema de un sencillo puente H basado en relés pues estos permiten manejar corrientes elevadas sin precisar de mucho dinero en comparación con los Puentes H basados en mosfets.

El esquema que muestro en la Figura 1 corresponde a un circuito de Puente H el cual utiliza 2 relés de 5V para controlar el sentido de giro de un motor de corriente continua.

Figura 1. Diagrama esquemático de un puente H

Luego de armar el circuito debería quedarnos como en la Figura 2 y Figura 3.

Figura 2. Circuito de Puente H

Figura 3. Circuitos de Puente H

Estos circuitos fueron desarrollados como parte de mi tesis sobre el telecontrol de robots móviles. Aquí les dejo un video en donde se muestra parte de las funcionalidades del robot.


Aquí les dejo el diagrama para realizar el PCB del circuito junto a otro diagrama para ver la disposición de los componentes así como también el archivo del circuito hecho en PCBWizard si es que necesitan hacer modificaciones.

Photobucket 
 
Cualquier duda no duden en comentarla. Espero que les sea de utilidad y hasta la próxima!!!...xD !

Gráficas con Matlab

0 comentarios
En este post vamos a ver la forma de realizar graficación de datos utilizando Matlab. Estudiaremos la amplia gama de funciones que Matlab pone a nuestra disposición para realizar gráficos de curvas, superficies, barras, líneas, gráficos polares, pies, etc.


Plot(x,y) nos permite dibujar el conjunto de puntos X,Y en un plano cartesiano. La forma de utilizarlo se muestra a continuación:
x=-1:0.1:5;
y=sin(x.^2);
plot(x,y);
Bar(x,y) grafica barras verticales, donde y representa las frecuencias y x define los espacios en el eje x.
x=-3:0.2:3;
y=exp(-x.^2);
bar(x,y);
Barh(x,y) grafica barras verticales, donde x representa las frecuencias y y define los espacios en el eje x.
x=-3:0.2:3;
y=cos(x.^3)-2*x+1;
barh(x,y);
Stairs(x,y) se utiliza para graficar curvas escalonadas.
x=0:0.2:10
y=sin(x);
stairs(x,y);
Polar(x,y) se utiliza para graficar curvas en coordenadas polares.
t=0:0.1:2*pi;
y=abs(sin(2*t).*cos(2*t));
polar(t,y);
 
Pie(x) realiza un gráfico de sectores o de torta relativo al vector x.
x=1:2:9;
pie(x);
 
Rosex) realiza el histograma angular relativo al vector x. 
x=[ 1 3 6 7 4 7 4 12];
rose(x);
Matlab  también nos permite personaliar nuestros gráficos de funciones utilizando diferentes colores, caracteres y tipos de líneas. Las tablas a continuación nos muestran los valores que podemos utilizar para indicar los puntos de nuestra función.

Caracteres
Descripción
.
Punto
+
Más
*
Asterisco
O
Circunferencia
X
Equis

Líneas
Descripción
-
Continua
--
Guiones
:
Punteada
-.
Guiones y punto

Color
Descripción
r
Rojo
y
Amarillo
g
Verde
b
Azul
w
Blanco
m
Magenta
c
Turquesa
k
Negro

Las imágenes a continuación muestran el resultado de aplicar los valores de la tabla anterior.
x=-2:0.2:2;
y=abs(cos(x));
plot(x,y,'+');
 
x=-3:0.2:4;
y=sin(x).^3-x;
plot(x,y,'O');


x=-3:0.2:3;
y=x^.2+3*abs(x)+8;
plot(x,y,'r');
 
Matlab también tiene la opción para realizar simultáneamente la gráfica de varias curvas. La función plot(x,y,x,z) grafica dos curvas con dos colores o tipos distintos.
x=0:0.05:5;
y=sin(x);
z=cos(x);
plot(x,y,x,z);
 
También podemos realizar gráficas en múltiples ejes. La función subplot(a,b,c) divide la pantalla del gráfico de a por b gráficas en una sola pantalla, en donde c es la secuencia o de las gráficas. En el siguiente ejemplo podemos ver el uso de la función subplot:
t=0:0.3:5;
x=t.^2;
y=2*t-5;
z=sin(t);
u=cos(t);
v=abs(t);
w=sqrt(t);
subplot(3,2,1), plot(t,x), title('gráfico 1');
subplot(3,2,2), plot(t,y), title('gráfico 2');
subplot(3,2,3), plot(t,z), title('gráfico 3');
subplot(3,2,4), plot(t,u), title('gráfico 4');
subplot(3,2,5), plot(t,v), title('gráfico 5');
subplot(3,2,6), plot(t,w), title('gráfico 6');
Y en el siguiente post dedicado a Matlab veremos cómo generar animaciones y películas.

Saludos xD!

Descargar videos de youtube en Linux

0 comentarios
Buen dia a todos, hoy le toca el turno al Software Libre. En este post voy a mostrar cómo descargar videos de youtube usando Linux (En este caso Debian).


A pesar de tener años usando Debian nunca se me había presentado la necesidad de descargar videos de Youtube. Y a pesar de haber muchas formas de hacer esto (incluso sin la necesidad de un programa) la manera que voy a mostrarles ha resultado muy cómoda para mí. Aquí les muestro los comandos que se deberán ejecutar en consola:
# apt-get update
# apt-get install clive
# exit
$ clive [URL del video]
# apt-get install mplayer
//Para reproducir el video
$ mplayer [nombre_del_video_descargado.flv]
//Para convertir el fichero a otro formato
# apt-get install ffmpeg
//Convertir a MPG
$ ffmpeg -i [nombre_del_video_descargado.flv] [video_salida.mpg]
//Convertir a MP3
$ ffmpeg -i [nombre_del_video_descargado.flv] -acodec copy [fichero_salida.mp3]
Y como una imagen vale más que mil palabras aquí les muestro cómo descargar un video en imágenes:

Primero copiamos la URL del video de youtube a descargar y ejecutamos clive del siguiente modo:


Y esperamos que termine la descarga. Luego podemos visualizar el video en formato flv usando mplayer.


Y lo convertimos a mp3.


Hecho esto, a disfrutar de la buena música :D!


Saludos y hasta otra oportunidad.

Conectándose a una cámara IP con Java

2 comentarios
La tecnología IP aplicada a la vigilancia de recintos ha proliferado en los últimos años en gran medida debido a los incrementos de ancho de banda en las redes ip actuales y al bajo costo de los equipos que la soportan.

La gran mayoría de cámaras IP traen consigo Applets y Controles ActiveX para poder conectarnos a estas, sin embargo un gran problema es que este tipo de controles no soportan trabajar fuera del contexto de algún navegador web. Otro problema es cuando queremos acceder a los frames o imágenes adquiridas por estos dispositivos para realizar algún tipo de procesamiento.

Las cámaras IP se caracterizan por la movilidad (Sobre todo las cámaras IP con soporte para la tecnología 802.11x) e independencia de funcionamiento pues solo será necesario de un dispositivo de capa de red para operar. Por otro lado las cámaras web siempre dependerán de la existencia de un computador así como los escasos 5 metros que nos proporcionan los estándares USB.

Todos lo descrito anteriormente ha representado siempre una dificultad cuando se quiere interactuar con estos dispositivos ya no a nivel de un simple usuario sino que queremos acceder a la información que nos proporcionan e ir un poco más allá. Java nos permite conectárnos al módulo CGI que poseen estas cámaras y obtener las imágenes de forma continua para realizar el procesamiento necesario sobre estas. Lo único que tenemos que hacer es acceder a este módulo cgi de forma continua e ir mostrando las imágenes a modo de secuencia lo cuál dará una apariencia de ser el video en sí.

Lo primero que tenemos que hacer es sobreescribir el método paintComponent de un JPanel del siguiente modo:
public class PanelVideo extends javax.swing.JPanel {

    private boolean hayConexion = false;
    private String direccionIP = "";
    public BufferedImage frame = null;

    /** Creates new form PanelVideo */
    public PanelVideo() {
        initComponents();
    }

    public boolean isHayConexion() {
        return hayConexion;
    }

    public void setHayConexion(boolean hayConexion) {
        this.hayConexion = hayConexion;
    }

    public String getDireccionIP() {
        return direccionIP;
    }

    public void setDireccionIP(String direccionIP) {
        this.direccionIP = direccionIP;
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.white);
        g2.fillRect(0, 0, getWidth(), getHeight());
        if (hayConexion) {
            try {
                URL nUrl = new URL(direccionIP);
                frame = ImageIO.read(nUrl);
                if (frame != null) {
                    g2.drawImage(frame, 0, 0, this);
                    repaint();
                }
            } catch (MalformedURLException ex) {
                hayConexion = false;
                g2.drawString(ex.toString(), 5, 15);
            } catch (IOException ex) {
                hayConexion = false;
                g2.drawString(ex.toString(), 5, 15);
            }
        } else {
            g2.setColor(Color.black);
            g2.drawString("No se ha establecido conexión con el dispositivo.", 5, 15);
        }
    }
}
Luego agregamos este panel a un JFrame y voilà, tenemos nuestra aplicación funcionando, podemos acceder a la secuencia de imágenes cuando se quiera, procesarlas, enviarlas por correo con información adicional, almacenarlas en una base de datos... en fin, un sinnúmero de posibilidades!!!

Aquí tenemos un screenshot de la aplicación ejecutándose:


Y como siempre el código fuente listo para descargar, reutilizar, mejorar, compartir!

Photobucket

Es importante saber la dirección correcta del módulo cgi de nuestras cámaras ip para lo cuál debemos acceder a su página de configuración. En mi caso la dirección es la siguiente: http://192.168.1.150/image/jpeg.cgi. De todos modos cualquier duda, la comentan.

Saludos, hasta un próximo post!!!