Archivo de la etiqueta: patolin

Paginador para custom post types en wordpress > quick fix!

Quizás se hayan topado con el problemita del paginador, al trabajar con custom types en wordpress. Simplemente el paginador no aparece.

Les dejo este código para arreglar esto. El truco es temporalmente mover la variable $wp_query a un temporal, y cargar $wp_query con el query del custom post type

 

< ?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('post_type=custom_post_type' . '&paged=' . $paged . '&posts_per_page=10');
?>
< ?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

 

< ?php endwhile; ?>
< ?php previous_posts_link(); ?>
< ?php next_posts_link(); ?>
< ?php $wp_query = null; $wp_query = $temp; ?>

Al final, volvemos la variable $wp_query a su lugar, y listo!

CX-10 Micro Quad – Cuando creíamos que no podían ser mas pequeños

Mis amigos en www.tmart.com han sido muy amables en enviarme un nuevo microcóptero. Cuando pensaba que no podían hacer algo más pequeño aún, aparece esto! La miniaturización al máximo nivel!

DSC01186

Este microquad, dentro del paquete contiene:

  • Micro quad, de 4cm de ancho (realmente pequeño)
  • Control de 2.4Ghz para evitar interferencias
  • Batería LiPo de 50mah, para unos 3 minutos de vuelo aproximadamente
  • Micro transmisor de bolsillo
  • Cargador USB
  • Hélices de repuesto y manual de usuario

El microquad vino en una cajita bastante peculiar (dentro de un sobre pequeño, para ahorrar gastos de envío), y al verlo inicialmente, más parece una caja de un juguete pequeño, que de una aeronave RC. El quad viene en la parte superior, y el transmisor en la parte inferior de la caja transparente. El empaque es bastante delicado, pero con suerte no hubo ningún daño durante el envío.

DSC01187

 

Antes de iniciar el vuelo, recuerden que esto no es un juguete!, a pesar de ser muy pequeño y simpático (el modelo es un clon del DJI phantom, pero a escala 1:16) sus helices giran a muy altas velocidades, y podrían causar alguna herida en caso de tener contacto con la piel cuando estén en movimiento. Vale recalcar que para cualquier tipo de multirotor que se vuele en interiores, debe cuidarse que exista el espacio suficiente y que no existan obstáculos para su vuelo.

Primer vuelo

Luego de poner a cargarlo por unos 10 mins, y buscar un par de baterías AAA para el transmisor, lo primero que salta a la vista es lo pequeño de todo. El microquad como les mencionaba solo mide 4cm de lado, y el transmisor no mide mas de 6cm de longitud. El transmisor es bastante cómodo, y las palancas se ven bastante resistentes, pero eso no quita el efecto “juguete” que muestra por su pequeño tamaño. El transmisor tiene trims digitales para la palanca derecha, para ajustar el movimiento ya en vuelo.

DSC01190

DSC01191

Una vez que se ha cargado totalmente el microquad (se enciente la luz del conector USB del cargador), procedemos a encenderlo con el microswitch que se encuentra en la parte posterior, y encendemos a la vez en transmisor. Cuando la comunicación entre el transmisor y el microquad esté lista, el transmisor emitirá un bip de aviso, y en el microquad dejarán de parpadear los leds de cada rotor, quedando encendidos permanentemente.

Dado el pequeño tamaño del microquad, han sido muy inteligentes en colocar luces LED que facilitan su ubicación en el espacio. Además, las luces (2 azules adelante y 2 rojas atras) facilitan el control en el aire, indicando para donde se va a mover.

DSC01193Subimos la palanca de la velocidad y el microquad despega super rápido. Es super sensible a los comandos. los giros son bastante buenos y el cambio de dirección es rápido. Adicionalmente es super estable cuando no recibe ningun control desde el transmisor.

Al ser tan pequeño, el punto débil del microquad son sus hélices. Lastimosamente, éstas, al entrar en contacto con una pared o algun objeto grande, se van a romper. Por suerte dentro del paquete se incluyen 2 hélices (una de cada sentido) para solventar un caso fortuito.

Como multicóptero de oficina funciona excelentemente. Intenté volarlo en exteriores, pero es imposible. Su escaso peso lo hace incontrolable con la brisa más leve 🙁 además, no sería muy optimista en la distancia a la que se perderá de vista volando en un parque o en el patio de la casa.

Como siempre, la curiosidad es mala consejera, y quise ver como es que algo tan complejo como un multirotor puede estar en un empaque tan pequeño, así que manos a la obra, a desarmarlo.

DSC01195

DSC01196

En sí, todo es miniaturizado. El microquad tiene un microcontrolador ST, un acelerómetro y el receptor de 2.4Ghz, todo en un circuito impreso que no mide más de 1cm2. El PCB se extiende hacia los lados y funciona como soporte de los motores, quedando únicamente la batería por debajo. Quizás para aligerar un poco el peso, podríamos deshacernos de la carcasa plástica y dejarlo “al desnudo”

DSC01203
Les dejo un video del vuelo en mi sala… resulta bastante complicado filmarlo por su pequeño tamaño, pero muy divertido de volarlo

Stellaris Launchpad + Energia (pt. 2 – Timers)

En el post anterior, pudimos comprobar lo facil que nos va a resultar usar al Stellaris Launchpad con el IDE Energía, como reemplazo del Arduino.

En este post vamos a revisar como usar las interrupciones del timer, para poder ejecutar eventos periódicamente. El Launchpad que estamos usando (LM4F120XL) tiene 27 timers que pueden ser activados independientemente.

Para poder utilizar el timer, en este caso el Timer 0 del Launchpad, necesitamos implementar 2 rutinas: 1 de inicialización y otra de interrupción. Para nuestro ejemplo, las rutinas son las siguientes:

Inicialización:

void initTimer(unsigned Hz)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
  TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
  unsigned long ulPeriod = (SysCtlClockGet() / Hz) / 2;
  TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod -1);
  IntEnable(INT_TIMER0A);
  TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  TimerIntRegister(TIMER0_BASE, TIMER_A, Timer0IntHandler);
  TimerEnable(TIMER0_BASE, TIMER_A);
  
}

Interrupción:

void Timer0IntHandler()
{
  
  TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  digitalWrite(RED_LED, j&0x01);  
  j++;

}

Como podemos observar, la rutina de inicialización recibe como parámetro la frecuencia de activación del timer en Hz. Y la rutina de interrupción, simplemente activa o desactiva el led Rojo, para comprobar la funcionalidad del timer.

El sketch completo sería el siguiente:

#include "Energia.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"

int j=0;

void setup()
{
  pinMode(RED_LED, OUTPUT);
  initTimer(1); // timer a 1 hz
  
}

void loop()
{
  // put your main code here, to run repeatedly:
  while(1) {} 
}

void initTimer(unsigned Hz)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
  //TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
  TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
  unsigned long ulPeriod = (SysCtlClockGet() / Hz) / 2;
  TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod -1);
  IntEnable(INT_TIMER0A);
  TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  TimerIntRegister(TIMER0_BASE, TIMER_A, Timer0IntHandler);
  TimerEnable(TIMER0_BASE, TIMER_A);
  
}

void Timer0IntHandler()
{
  
  TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  digitalWrite(RED_LED, j&0x01);  
  j++;

}

Stellaris Launchpad + Energia (pt. 1)

He decidido escribir una serie de posts, acerca del uso del Stellaris Launchpad. Este mini tutorial, vamos a analizar la primera versión del Stellaris Launchpad, que veía con el microcontrolador LM4F120H5QR, pero aplica a las nuevas versiones del board, que tienen el microcontrolador Tiva-C.

Este development board de Texas Instruments, sobresale de otros similares, por que su microcontrolador LM4F120XL tiene las siguientes características:

  • Microcontrolador Stellaris LM4F120H5QR con núcleo ARM® Cortex™-M4 con las siguientes características:
    • Operaciones de punto flotante
    • Velocidad de operación máxima de 80 MHz
    • 256 KB de memoria flash
    • EEPROM interna
    • SRAM de 32 KB
    • 8 UARTs
    • 4 I2C
    • 4 SPI
    • 27 Temporizadores
  • Interfaz ICDI (In-Circuit Debug Interface) USB incluida en la tarjeta.
  • Conexión micro USB-B para depuración.
  • Conexión micro USB-B de dispositivo para aplicaciones de usuario.
  • Switch selector de alimentación de dispositivo/depuración.
  • Pines BoosterPack XL, compatible con muchas tarjetas BoosterPack existentes.
  • 2 botones para aplicaciones de usuario
  • Botón de reset
  • 1 LED RGB
  • Puente (jumper) para medición de corriente
  • Cristal principal de 16 MHz
  • Cristal de 32.768 KHz para hibernación y reloj en tiempo real (RTC – Real Time Clock)

Si lo comparamos con el cásico y conocido Arduino, vemos que tenemos un procesador mucho más poderoso, con muchos mas pines de Entrada y Salida y mas periféficos, lo que permitirá que podamos diseñar aplicaciones embebidas con mayor facilidad. Además de esto, el Stellaris Launchpad, tiene un precio aproximado de USD.12,00  (en su nueva versión, que lleva un microcontrolador TIVA C) lo que lo coloca al nivel de los clones del Arduino Uno, por lo que vale la pena el intento.

Texas Instruments, con el fin de promover el uso de sus microcontroladores, permite descargar de forma gratuita (luego de un pequeño registro) sus herramientas de desarrollo, y son bastante completas. Pero al ser un entorno de desarrollo basado en Eclipse, es bastante lento y pesado, si no tienes un computador bastante potente.

Es aquí cuando aparece Energia. Este entorno de desarrollo, ha sido pensado para facilitar el desarrollo de aplicaciones usando la linea Stellaris de TI, presentando la posibilidad de usar el IDE de Arduino, para los procesadores de TI. Con este entorno, podemos programar fácil y rápidamente aplicaciones con el Launchpad, de la misma manera que lo hacemos con el Arduino, traduciéndose esto en velocidad de desarrollo, y facilidad de uso. Además, Energía es multiplataforma, existiendo versiones para Windows, MacOS y Linux.

En primer lugar, y si estamos trabajando bajo Windows, debemos descargar los Drivers Stellaris ICDI  para USB. esto lo podemos descargar desde este enlace. Si estamos usando Linux o MacOS, podemos saltarnos este paso sin problema.

Una vez descargados los drivers, los descomprimimos en alguna carpeta facil de ubicar, y procedemos a conectar el Launchpad a nuestro puerto USB. Se iniciará el proceso de detección del dispositivo, y deberemos buscar la carpeta donde se descomprimió nuestro Driver, para que windows lo detecte e instale los dispositivos. Si todo sale bien, debemos tener 3 dispositivos nuevos en nuestro computador.


stellaris1

 

Luego descargamos el IDE  Energia desde este enlace, escogiendo la versión que corresponda a nuestro sistema operativo. La descarga es algo grande (alrededor de 200MB) así que tomará algunos minutos. Una vez concluida la descarga, lo descomprimimos en una carpeta (puede ser en Mis Documentos) y listo, podemos empezar.

Al ejecutar Energia, a primera vista, observamos un clon del IDE de Arduino (algo bastante obvio, porque es un fork) pero en color rojo. Además del cambio de color, todas las barras de herramientas y menús, son identicos al IDE de Arduino.

 

Antes de empezar a programar, debemos cerciorarnos de que estamos utilizando la configuración correcta para nuestro Launchpad. Para esto, debemos seleccionar el puerto serie, y tipo de board correctos en el menu Herramientas. En mi caso estoy usando el puerto COM7 y el board LM4F120, que es de la primera serie de los Launchpad con Cortex M4.

stellaris3

Ahora si tenemos todo listo para empezar a programar, y vamos a empezar con el “Hello World!” de los microcontroladores: El blink. Vamos a crear un pequeño sketch que encienda el led Rojo del Launchpad, espere 1 segundo, lo apague, espere 1 segundo, y lo vuelva a encender. Para esto, pegamos el siguiente código en la ventana del editor Energia.

#define LED RED_LED
void setup() {                
  pinMode(LED, OUTPUT);     
}

void loop() {
  digitalWrite(LED, HIGH);   
  delay(1000);               
  digitalWrite(LED, LOW);    
  delay(1000);              
}

Una vez copiado el código, presionamos en boton de descarga, y listo! El Led rojo de nuestro Launchpad empieza a parpadear.

Si queremos jugar un poco, podemos cambiar el color del Led. El launchpad incluye un led RGB, que podemos hacerlo parpadear cambiando esta línea:

#define LED GREEN_LED

O por

#define LED BLUE_LED

En los próximos días, continuaré con la serie, explicando como usar los distintos periféricos, y algunas funciones avanzadas del Launchpad.

Cliente de Bittorrent para el Raspberry Pi

Y bueno, mi Raspberry Pi pasa todo el día conectado monitoreando la casa, y como durante el día no hay nadie, la conexión de internet pasa completamente desocupada….. algo realmente malo.

Para aprovechar un poco más nuestra conexión perezosa, instalé Transmission, que es un cliente de Bittorrent que corre como un demonio en Linux; dado que el Raspberry Pi consume prácticamente nada de energía al estar conectado, resulta bastante práctico para tenerlo descargando cosas durante el día.

Para instalar Transmission, debemos ejecutar los siguientes comandos desde el terminal de nuestro Pi:

sudo apt-get install transmission-daemon
sudo apt-get install transmission-common
sudo apt-get install transmission-cli

Si no hay ningún problema en la descarga se instalarán los paquetes necesarios, y arrancará el demonio de transmission. Antes de empezar a usarlo, debemos editar un par de detalles en su archivo de configuración. Para esto, detenemos el servicio con el siguiente comando:

sudo service transmission-daemon stop

A continuación editamos el archivo /etc/transmission-daemos/settings.json (sudo nano /etc/transmission-daemos/settings.json) y modificamos las siguientes líneas, con los datos que vayamos a usar según nuestro caso (para las rutas de archivo y las IPS, son las que tengo creadas en mi PI):

"download-dir": "/home/pi/transmission", 
"incomplete-dir": "/home/pi/transmission/incompleto",
"rpc-whitelist": "127.0.0.1,192.168.1.100",
"rpc-whitelist-enabled": false,

Además, para dar acceso via navegador, es necesario que modifiquemos las líneas del nombre de usuario y contraseña del mismo archivo:

"rpc-password": "su_contrasena",
"rpc-username": "su_usuario",

La contraseña acá la colocamos sin encriptar. El momento de reiniciar el demonio se encriptará automáticamente. Para reiniciar el servicio, basta con el comando:

sudo service transmission-daemon start

y Voilá! tenemos nuestro cliente de bittorrent conectado 24/7, que lo podemos monitorear desde nuestro navegador, con la IP de nuestro Raspberry, y el puerto 9091

torrent

Felices descargas 🙂

pd. Si desean acceso externo (por ejm. para colocar descargas desde la oficina) basta con abrir el puerto 9091 en su router, y en lo posible, darle un dominio virtual, como lo indiqué en el post de cómo configurar no-ip para el raspberry.

ahora si! de vuelta al blog

hola! estoy funcionando nuevamente jejejeje.

Ahora si en serio, no me gustó el diseño anterior (que lastimosamente yo mismo hice, pero realmente no soy tan bueno diseñando) así que estoy usando un nuevo template, y muchos extras programados que poco a poco los irán descubriendo.

Estoy en fase de pruebas de la integración de wordpress con facebook, para que los usuarios usen su id de facebook para comentar, y de paso estamos probando la programación de aplicaciones de facebook. Estoy en búsqueda de ideas así que si se les ocurre algo (no, el pato de la suerte ya quedó descartado jejeje) haganmelo saber.

Prueben comentando desde su usuario de facebook, haciendo click en el boton de facebook en el cuadro de comentarios, necesito feedback 😉

at. Pato