Archivo de la etiqueta: how-to

Usar funciones en Icaro Bloques

Usar funciones al programar nos permite reutilizar código. En particular al tratar con bloques, nos evita atiborrar la pantalla, pero también nos evita errores de conexión entre bloques al repetir varias veces lo mismo.

Lo primero es crear una rutina que será nuestra función. Un ejemplo sencillo, hacer parpadear un led. Esta rutina la salvamos como un archivo de icaro.

Luego la salvamos como una función con el mismo nombre.

En el ejemplo siguiente mostramos como hacer la llamda de la función. Usamos un bloque de carga_func para llamar a la funcion y luego un bloque de acción con la función.

Para que esto funcione debemos salvar la rutina como un archivo de icaro y luego darle compilar. Todos los archivos deben estar en la misma carpeta, de esta manera Ícaro Bloques encuentra el código a usar de los archivos.

Si nos vamos a la pestaña de código fuente y damos click en el boton recargar, podremos ver el código con la declaración de la función y el llamado a la misma en lenguaje C.

 

Sensores Analógicos y Digitales con la placa Icaro

Los sensores digitales son los más simples. Un interruptor es un sensor digtal. Simple: Apagado o encendido. Un interruptor de paro o un botón de pulso es lo mismo.

Tomamos un interruptor y conectamos sus extremos a la bornera sn_d1 justo al lado del boton de reset en la placa NP-06.
interuptor de paro
Hacemos unos bloques simples a como se muestra a continuacion:
sensor-digital
El resultado será que cuando se cierra el circuito, es decir el interruptor esta encendido el led primero se encenderá. Cuando el interruptor se apague, el led hara lo mismo.

Los sensores analógicos son un poco más complicados. Su respuesta es un valor que varia segund determinadas condiciones. Para ilustrar esto usaremos un potenciometro. La forma más simple de potenciometros son los controles de volumen. Es bien fácil comprar uno o rescatar uno de un aparato que ya no sirve.
potenciometro
Vamos a encontrar clasicamente tres patitas. La primera es tierra (GND) , la segunda es la salida del sensor (sens_analog) y la tercera es voltaje (VCC). Realmente es una resistencia variable. Si invertimos el orden, no será un problema. Siempre tendremos un voltaje que varia en el centro en relación al voltaje existente entre la alimentación y tierra.

Lo que hay que hacer es conectar los cables en los puertos que se encuentran al lado del led rojo en la placa NP-06. Los tres primeros pines, los mas cerca al extremo de la barra de leds corresponden al primer sensor analógico. En la placa NP-06 estan claramente identificados.
sensor analogico
Ahora hacemos unos bloques a como se muestran a continuación.
sensor_analogico
El resultado es que al mover el valor del control de volumen, la barra de led incrementara o reducirá el valor binario representado por los leds.

Conexión serial a la placa Icaro

La placa Icaro nos ofrece una gran cantidad de beneficios como una placa autónoma. Pero también podemos sacar provecho de su conexión serial. Tortucaro es la herramienta que nos permite esto.

Para ello debemos ubicar el icono de tortucaro en la ventana de icaro y hacer click en él. Luego hacemos click en compilar. Finalmente hacemos click en Cargar. Oprimimos el botón de reset en la placa y nos debe decir que la carga fue exitosa. En la versión de desarrollo, todo esto es más breve, varios pasos redundante se eliminan, pero la lógica es la misma.
botones_icaro
Si este es el primer intento usando tortucaro, podemos querer hacer algunas pruebas. El primer paso es confirmar que existe la conexión con la placa. Desde la terminal usamos el comando ls /dev/ttyA* nosotros esperamos que la respuesta incluya que dentro de los dispositivos existe /dev/ttyACM0

Posiblemente el programa de comunicación serial más simple de usar es cutecom. Lo mas seguro es que no lo tengan instalado, asi que pueden usar la interfaz gráfica o un comando como
su -c “yum install cutecom”

Al iniciar cutecom enviará un aviso que no logro conectar con el puerto /dev/ttyS0, lo cual es lógico porque seguramente no tienen nada conectado a un puerto serial o incluso no tiene puerto seriales en la computadora. Asi que en la parte superior debemos configurar dispositivo o device a /dev/ttyACM0 y luego hacer click en el botón abrir dispositivo o open device. Si no hay malas noticias, son buenas noticias.
cutecom
El programa tiene tres áreas de texto, de arriba hacia abajo, respuesta del dispositivo, historico de comandos enviados al dispositivo y entrada o input. Nos colocamos en input y escribimos “b” y damos enter. En la ventana de respuesta dirá “icaro USB 02”

Si tenemos un servo podemos usar comando como m1! (mover servo del puerto uno al valor ascii 33) o bien puede escribir m1Ñ (mover servo del puerto uno al valor ascii 126) Puede buscar una guia de valores ascii

Ahora que ya saben como es el asunto de la comunicación serial y han comprobado que funciona, pueden hacer algunas cosas más intersantes. Por ejemplo les comparto un pequeño programa de python escrito por Valentin Basel

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# servo.py
#
# Copyright 2014 valentin basel
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#

import apicaro
import time
icaro=apicaro.puerto()

icaro.iniciar()
for a in range(3):
icaro.activar_servo(1,1)
time.sleep(1)
icaro.activar_servo(1,255)
time.sleep(1)

Icaro y la version devel

Cuando estamos probando las ultimas cosas de un programa puede ser que tengamos deseo de ir al paso del desarrollo de ese programa. La versión en desarrollo o devel es un espacio para experimentar, encontrar que cosas no están funcionando y hacer sugerencias. Icaro tiene esta versión y quiero compartir como echarla a andar. No estoy siendo muy explicito, porque si están buscando la versión de desarrollo, supongo que ya tienen alguna experiencia en Fedora

Lo primero a saber, es que el repositorio nos va a presentar la versión estable. Nosotros tenemos que navegar en busca de la versión de desarrollo.

La pueden encontrar aqui: https://github.com/valentinbasel/icaro/tree/devel

Eso les dará acceso a hacer una descarga de un archivo zip. Deben descomprimirlo manteniendo la estructura interna de directorios. Usualmente yo descomprimo en la misma carpeta de Descargas y obtengo una carpeta llamada icaro-devel. Luego muevo esta carpeta hacia mi directorio Home. Lo hago así porque un error de descomprimir cosas en Home, puede ser algo tedioso de limpiar, mientras que si ocurre en Descargas no será la gran cosa.

Voy a usar la palabra USUARIO que ustedes deberan cambiar por el nombre de su propio usuario. Hasta el momento tenemos /home/USUARIO/icaro-devel/ y posiblemente han usado los beneficios de las herramientas gráficas.

Si no han instalado la version estable, ustedes deben hacer algunas configuraciones, las cuales las realicé desde la terminal

su -c “group add microchip”
su -c “usermod -a -G microchip USUARIO”
su -c “usermod -a -G dialout USUARIO”

Lo siguiente es poner algunos archivos en su sitio, lo mismo esto lo hago desde la terminal

mkdir ~/.icaro
cp -r ~/icaro-devel/hardware/icaro/micro/firmware ~/.icaro/
cp -r ~/icaro-devel/hardware/icaro/micro/conf ~/.icaro/
su -c “mkdir /usr/share/icaro”
su -c “cp -r ~/icarodevel/hardware /usr/share/icaro/”

Para correr la version de desarrollo la ejecutan desde la terminal ubicandose en el directorio de desarrollo:

cd ~/icaro-devel
python lanzador.py

Correr el programa desde la terminal nos permite ver los comentarios que va generando y en caso de error nos puede dar idea de que se trata ese error.

HPLIP configurar impresoras HP en fedora 21

Tengo una impresora o printer multifuncional HP LaserJet 1536 dnf MFP conectada en red a mi nueva instalación de Fedora 21 Work Station.

Esto siempre es un dilema, puesto que añadir impresora desde el panel de administración de impresoras no siempre me deja los resultados deseados. Por ejemplo no tengo acceso al scaner de la impresora multifuncional. Por otra parte desinstalar hplip de fedora e instalarlo desde el sitio del fabricante es una opción válida pero bastante lenta. Inicia por borrar la cache de yum, luego instala paquete por paquete, lo que incluye los paquetes de compilación gcc entre otros. Además incluye la herramienta de scaner xsane, muy poderosa pero mucha gente prefiere la herramienta simple scan. Luego pasa a compilar y finalmente uno debe ejecutar hp-setup.

Para evitarse tanto complicación, la forma fácil de instalar una impresora multifuncional HP en fedora es irse a la terminal y ejecutar de una vez como administrador (root o superusuario) el comando :

hp-setup

Bueno no es tan fácil, eso les va a dar un error porque hay un paquete que no esta instalado. Si leen con atención les va a decir cual es el problema. Pero nadie lee la salida del sistema para encontrar la solución. La computadora no te odia, solo no sabe que hacer y te dice que no te entiende. Muchas veces al decir que no entiende te das cuenta que te falto. Asi que de nuevo como administrador:

yum install hplip-gui

Luego de instalar ese paquete y sus dependencias, entonces si estamos listos para la mágia. Intentamos de nuevo como administrador

hp-septup

Eso les llevara a un panel de configuración que es bien sencillo de seguir. Como resultado tendrán su impresora HP multifuncional instalada en Fedora 21 en el panel de impresoras y además el scaner funcionando. Yo desactive la opción de fax, pero tendrían esa opción también si lo desean.

En fin, normalmente las impresoras o printers se configuran automaticamente en Fedora, pero algunos modelos necesitan un pequeño paso adicional.

UPDATE he tenido problemas en Fedora 22 con el instalador gráfico. Una opción alternativa es usar como administrador el comando:

hp-setup -i

Esto hace la secuencia de instalación en la terminal.

Enviar SMS desde la linea de comando

Como enviar mensajes de texto desde la terminal con el modem 3g ZTE MF636 en Fedora Linux? Como activar un plan prepago de tu modem3g desde la linea de comando?

Yo necesito enviar un mensaje para activar mi plan prepago de movistar (Nicaaragua), luego esperar la respuesta sobre las opciones de tiempo de conexión, contestar con un número de opción y esperar por la confirmación. Poner el SIM card en un telefono para hacer esto y luego ponerlo en el modem es tedioso. Peor aun sería cargar Windows con la suite de la compañía de celular para enviar el mensaje y luego regresar a linux. Cosa que a final no puedo hacer porque no tengo Windows en mi laptop.

Para mi lo ideal era usar una herramienta con interfase gráfica como gnome-phone-manager. En verdad me funcionó para enviar mensajes, luego hubo un conflicto de versión de GTK y ahora no logro que se conecte a un puerto serial, siempre busca un puerto bluetooth. En realidad gnome-phone-manager es una interfase gráfica para gnokii que es el verdadero programa que administra la comunicación con el modem 3g.

Así que lo primero es instalar gnokii y lo podemos hacer desde la terminal.

su -c “yum install gnokii”

Yo uso la sintaxis de fedora. Para usar sudo en fedora deben configurarlo. Y si usan otra distro deben ver el comando de instalación específico para su distro. Igual podemos buscar el paquete para su instalación desde la administración de software.

Lo siguiente es configurar gnokii. Para ellos creamos un archivo llamado .gnokiirc y lo ponemos en nuestra carpeta de usuario.

/home/mi_nombre/.gnokiirc

Donde mi_nombre es el nombre del usuario. El contenido del archivo es simple:

[global]
port=/dev/ttyUSB2
model=AT
connection=serial

Nuestro usuario no tiene permisos de acceso al puerto serial que hemos utilizado. Así que debemos incluir a nuestro usuario en el grupo de dialout.

Desde la linea de comando podemos usar el siguiente comando:

su -c “usermod -a -G dialout mi_nombre”

De nuevo donde mi_nombre es el nombre del usuario. El comando anterior debe ser igual para todas las distribuciones de linux. Otra alternativa es instalar el paquete system-config-users que es una interfase gráfica para administrar los usuarios con más detalles, como por ejemplo hacer un check en el grupo que queremos que nuestro usuario pertenezca. Esto lo encontramos como la aplicación de “usuarios y grupos”. Desde los ajustes de sistema en Gnome Shell solo veremos unas opciones limitadas para administrar usuarios.

Ahora podemos conectar el modem y esperar que este listo. Esto a simple vista se puede verificar con la luz azul que parpadea en el modem ZTE MF636.

La otra alternativa es usar el comando dmesg en la terminal que nos brinda al final aproximadamente las siguientes lineas

[ 824.501063] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[ 824.507774] usbcore: registered new interface driver option
[ 824.507783] option: v0.7.2:USB Driver for GSM modems
[ 829.753101] scsi 5:0:0:0: Direct-Access ZTE MMC Storage 2.31 PQ: 0 ANSI: 2
[ 829.758421] sd 5:0:0:0: Attached scsi generic sg1 type 0
[ 829.766896] sd 5:0:0:0: [sdb] Attached SCSI removable disk

A este punto podemos probar que todo esta bien con el siguiente comando:

gnokii – -identify

la respuesta deberia ser a como sigue:

GNOKII Version 0.6.31
IMEI : 352847029322631
Manufacturer : ZTE INCORPORATED
No flags section in the config file.
Model : MF636
Product name : MF636
Revision : BD_LATMOVP673M2V1.0

Yo debo enviar la palabra ACTIVAME al número 2266, el comando es a como sigue:

echo “activame” | gnokii – -sendsms 2266

La parte dificil es que el modem ZTE MF636 no es compatible con la opción de espera para capturar el mensaje. Asi que debemos consultar el contenido de memoria del modem con el siguiente comando:

gnokii – -showsmsfolderstatus

Lo que nos brinda el siguiente reporte

GNOKII Version 0.6.31
No. Name Id #Msg
========================================================
0 Internal memory ME 0
1 Combined ME and SIM phonebook MT 0
2 SIM card SM 7
3 SMS Status Reports SR 0

Podemos ver que los mensajes se almacenan en la SIM card y que esa memoria es SM. En este caso hay 7 mensajes, en linux eso significa mesnajes del 0 al 6. Si quiero ver los mensajes el comando será:

gnokii – -getsms SM 0 6

puedo consultar solo un mensaje, le doy la posición de dicho mensaje sin especificar inicio y fin, por ejemplo el último mensaje será:

gnokii – -getsms SM 6

lo que me da como resultado algo asi:

6. Inbox Message (Unread)
Date/time: 13/09/2013 21:50:23 -0600
Sender: 2266 Msg Center: +5026099948
Text:
Envia 1 para contratar 2hr de navegacion por CS15, 2 para contratar 12hrs por CS50, 3 para 30min por CS10, 4 para 24hrs por CS90 o 5 para 3 Dias por CS150

Ahora podría repetir los pasos y enviar la respuesta, por ejemplo opción número 1 con el siguiente comando:

echo “1” | gnokii – -sendsms 2266

Y solo me queda esperar la confirmación, que puedo consultar a como he mostrado anteriormente.

Algunas cosas adicionales con el manejo de los mensajes podría ser guardar los mensajes a un archivo de texto

gnokii – -getsms SM 0 6 -f archivo.txt

Donde archivo.txt es el nombre de archivo de su elección.

Tambien pueden borrar los mensajes almacenados en el SIM card. Supongamos que queremos respaldar a nuestra maquina los mensajes y luego borrarlos:

gnokii – -getsms SM 0 6 -f archivo.txt -d

Algo a tener en cuenta es que cuando se conectan a la internet por el modem3g, ya no podrán hacer uso de las opciones de envío y recepción de mensajes.

Espero que esto sea de utilidad para algunas personas con planes de prepago en modem 3g. Sin embargo yo solo tengo el modem que describo. Así que no puedo asegurar como funcionará con otros modem3g, sin embargo esto les podrá servir de guía.

Quiero agradecer a Spot quien me ayudo a encontrar muchos de los detalles de gnokii en particular la siguiente referencia: http://wiki.gnokii.org/index.php/SMS_options (la página esta en inglés)

When in panic …

… Run in circles, extend your arms upward and shout repeatedly.

Estoy en E-banking haciendo algo y se completa, le doy click a imprimir el comprobante y se cierra firefox. Me digo: “Bah! Voy a imprimir las transacciones por separado, más papel pero da lo mismo”

Trato de abrir firefox de nuevo, trata de abrir y se cae sin llegar a abrir. Me digo: “Not good! Reiniciar lo resuelve”

Reinicio y me queda una pantalla negra y me dice que hay fallas en el disco duro: Me digo: “Not good at all!”

Busco un liveCD lo cargo y corro la aplicación de chequear discos. La pantalla dice que no encuentra el disco duro. Inicio a sudar frio. Pienso: “Rayos, el último resplado fue hace 6 meses”

Hago una búsqueda en google y encuentro algo sobre fsck en volúmenes lógicos. Me digo: “Estos volúmenes lógicos son ilógicos”

Ejecuto unos comandos. El disco duro aparece. Suspiro con alivio.

Ejecuto otros comandos. Dice que arreglo el disco. Exhalación absoluta de alivio.

Reinicio la maquina. Todo normal. Risa nerviosa de que te cruzaste la calle sin ver y te pitaron.

Inicio a hacer respaldo del la computadora al disco USB externo. Pienso: “La regla dice, back up and back up often”

MythTV en Fedora de forma fácil

MythTV es una video grabadora digital. Obviamente significa que para que funcione se requiere un sintonizador de TV para la computadora o al menos un dispositivo de captura de video. Aunque hay algunas opciones de TV vía Internet que no están disponibles en Nicaragua.

Siempre pensé que MythTV era algo muy complicado, especialmente cuando veía la wiki de MythTV. Perece como que si uno ya debería saber algunas cosas que no están ahí, al menos no son obvias en la wiki. Pero tampoco resulto nada del otro mundo.

Lo primero es instalar MythTV, ya sea desde la forma gráfica o desde la consola.

su -c “yum install mythtv”

Entre muchas otras dependencias van a encontrar que MythTV instala httpd y MySQL. Uno de las cosas que hay que hacer es poner en marcha estos servicios. Hasta donde entiendo httpd es solo necesario si van a accesar a mythtv desde otra maquina.

su -c “service httpd start”
su -c “service mysqld start”

una forma de garantizar que estos servicios siempre estén disponibles cuando la maquina arranca es usar adicionalmente estos otros comandos:

su -c “chkconfig httpd on”
su -c “chkconfig mysqld on”

Sin embargo ademas hay que configurar MySQL, yo usualmente ocupo el siguiente comando para constar con lo basico de seguridad de la base de datos, como por ejemplo poner password de administrador a MySQL. Es recomendable que esta no sea la misma contraseña de administrador del ordenador.

su -c “mysql_secure_installation”

Luego hay que configurar algunas cosas en MySQL para MythTV.

mysql -u root -p

CREATE DATABASE mythtv_db;
CREATE USER ‘mythtv_user’ @ ‘localhost’ IDENTIFIED BY ‘mythtv_pass’;
GRANT ALL ON mythtv_db.* TO ‘mythtv_user’ @ ‘localhost’;
exti;

Logicamente ustedes deben seleccionar su propio mythtv_db, mythtv_user, y mythtv_pass a usar en su configuración personal. Los que uso son solo un ejemplo.

Luego de eso hay que configurar MythTV para lo cual hay un asistente bastante sencillo. Entre otras cosas les pedira los datos de la base de datos antes creada.

mythtv-setup

Luego de eso estamos listos para poner a andar esto es en dos partes. Primero el backend

mythbackend

Luego la segunda parte buscar el icono de MythTV Frontend o bien en linea de comando

mythfrontend

Para llenar la guia te programas, cosa que se debe hacer luego de crear los canales hay que usar el comando:

mythfilldatabase

Un detalle que me sucedio a mi, es que yo estoy usando un dispositivo de captura de video, o sea que solo tengo entrada de linea. Para poder obtener el audio, tuve que ir a los ajustes de audio y seleccionar el dispositivo de captura de video como hardware de input.

Fotos panorámicas con Fedora

En distintas oportunidades he buscado como lograr captar más con mi cámara, y las fotos panorámicas es una forma de expresar la amplitud ya sea en paisajes o incluso en espacios cerrados.

Hugin es una herramienta que permite hacer estas maravillas. Esta en los repos de fedora, así que instalarla es sencillo.

Mis primeras pruebas con hugin fueron un poco frustrantes porque estaba queriendo crear un panorama a partir de dos imágenes de 180grados. Lo deje por un rato. Mis siguientes pruebas fueron en el segundo Encuentro Centroamericano de Software Libre. Cuando alguien que sabe de cámaras, alguien que sabe de diseño gráfico y alguien que entiende la computadora, cosas intersantes pueden pasar.

Una de las cosas mágicas que puede hacer hugin es colocar de forma automática los puntos de control donde hay coincidencias entre una foto y otra. Encontrar los elementos de traslape. Para esto se requiere una librería adicional que se llama autopano-sift-C. Esta libreria no esta en los repos de fedora, pero se encuentra en los repos de rpmfusion. Ya he escrito sobre como incluir estos repos en fedora, asi que pueden ver los detalles en un post anterior.

Pero veamos un ejemplo rápido … si tomo mi celular y capturo cuatro fotos de la sala de mi casa a como se muestra a continuación …

Luego puedo cargar esas imágenes y pasarlas por hugin y en cosa de unos pocos minutos tener algo asi…

Hugin busca en las imágenes originales toda la información de la cámara. Exposición, apertura, distancia focal, angulo del lente y otras cosas más. Para mi desilución, mi celular no provee información completa sobre la imagen, asi que debí hacer aproximaciones sobre el tipo de lente, y los resultados no fueron óptimos. Aun así se puede venr como algunas lineas verticales si están completamente alineadas.

Espero que a alguien le sirva esta herramienta, aunque solo sea para entretenerse jugando con imágenes.

fsck con LVM

Ayer encendí mi maquina y dijo que mi disco tenia un sector malo y me mando a un shell. Desde ahí logre arrancar pero me quedo la inquietud de verificar mi disco duro. Así que luego arranque la maquina desde un liveCD y me fui a la terminal e hice:

fsck /dev/sda1

Me dijo que no era posible porque no habia encontrado algo relacionado con el volumen lógico. Busque en google, terminé en fedora forum y encontré que tenia que hacer refrencia al volumen lógico como tal.

fsck /dev/vg_maquina/lv_root

Donde maquina es el nombre que ustedes le asignaron de host a su computador

Si el error esta en su swap, o si desean verificar su swap, deben recordar que los livecd usan la partición swap del disco duro, asi que antes de analizarla deben desmontarla. Un livecd puede trabajar sin la swap del disco duro, solo será un poco mas lento.

Espero que esto le sea útil a más de alguno.