Todas las entradas de: pruebas

Como descubrir el puerto arduino con Python

[singlepic id=20 w=320 h=240 float=right]Cuando desconecto y vuelvo a conectar el Arduino (Arduino Uno R3), el Ubuntu dependiendo si se ha enterado o no que lo he desconectado, al volver a conectarlo me lo instala en otro puerto, con lo que tengo que decirle al programa cual es el nuevo puerto. Para solucionar esto y aprovechando la librería PySerial y la función «try», podemos descubrir donde esta instalado el puerto Arduino. Para ello solo tenemos que probar los puertos que posiblemente pueda estar utilizando el Arduino. Si al intentar abrir el puerto arduino nos da error, eso es que el Arduino no esta instalado en ese puerto. Gracias a la función «try», controlamos ese error que se ha producido y podemos seguir con el funcionamiento normal de nuestro programa. Cuando al abrir el puerto no nos da error, eso quiere decir que en ese puerto hay algún dispositivo instalado. si solo tenemos el Arduino instalado ya tendremos el puerto Arduino y podemos salir del bucle y guardar el puerto.

Descubrir el puerto arduino

Código de ejemplo en Python:

#! /usr/bin/env python

# Importamos la libreria PySerial
import serial

# Varialbe para saber si hemos encontrado el puerto o no
bEncontrado = False
# Hacemos un bulce para recorrer los puertos que queremos comprobar
for iPuerto in range(0, 4):
    try:
        # Puerto que vamos a probar
        PUERTO = '/dev/ttyACM' + str(iPuerto)
        # Velocidad 
        VELOCIDAD = '9600'
        # Probamos ha abrir el puerto
        Arduino = serial.Serial(PUERTO, VELOCIDAD)
        # si no se ha producido un error, cerramos el puerto
        Arduino.close()
        # cambiamos el estado del la variable para saber si lo hemos encontrado
        bEncontrado = True
        # Salimos del bucle
        break
    except:
        # Si hay error, no hacemos nada y continuamos con la busqueda
        pass

# Si encontramos el puerto?
if bEncontrado:
    # Mostramos el puerto donde esta el arduino
    print('el puerto del arduino es: ' + '/dev/ttyACM' + str(iPuerto))
else:
    # Si no lo encotramos mostramos el mensaje de no encontrado
    print('No se ha encontrado Ardunio')

Aunque este código es de Python, el portarlo a cualquier otro lenguaje es muy sencillo, por lo básico de su planteamiento, lo único que podrida complicar el código seria las funciones que se tengan que utilizar para la apertura del puerto serie, por lo demás, el resto de funciones están disponibles en cualquier lenguaje.

Conectarse a MySQL con Python

Siguiendo con el Python, he estado probando como funciona la conexión con bases de datos. Ya que tengo un servidor con MySQL instalado he probado con él.

Para poder conectar el Python con el servidor MySQL nos hace falta instalar la librería que hará de intermediario entre el MySQL y Python, por la red hay varias, pero me he decantado por la propia que distribuye Oracle. Elegimos el fichero para nuestro sistema y lo instalamos. Para Ubuntu / Debian podemos bajar el ficheros de la pagina o instalarlo a través del repositorio de Ubuntu, con el siguiente comando.

sudo apt-get install python-mysql.connector

Instalada la librería ya solo queda programar el código en Python, para ello importamos la librería.

import mysql.connector

Crearemos un variable que sera la encargada de manejar la conexión con el servidor de MySQL. Esto se puede hacer de dos maneras, poniendo toda los datos de la conexión en la función, o utilizar cuna variable con los datos como intermediaria.

1º Forma

conexion_mysql = mysql.connector.connect(user='usuario', password='contraseña', host='DireccionServidor', database='BaseDeDatos')

2º Forma, para decirle a la función que los datos están dentro de la variable hay que poner «**» (2 asteriscos) delante de la variable.

# Variable con la configuracion de la conexion
config_mysql = {
    'user': 'usuario',
    'password': 'contraseña',
    'host': 'DireccionServidor',
    'database': 'BaseDeDatos',
}

# conectamos al servidor MySql
conexion_mysql = mysql.connector.connect(**config_mysql)

Si esto no ha producido ningún error, ya estaremos conectados al servidor de MySQL. Ahora solo nos queda empezar ha trastear con las tablas. Para ello tendremos que crear otra variable que se encargara de realizar las consultas SQL y contendrá la información para esa consulta.

cursor = conexion_mysql.cursor()

Una vez creada esta variable, solo nos queda pasarle la sentencia de SQL que queramos ejecutar.

cursor.execute("SELECT Campo1, Campo2, Campo3 FROM Tabla1")

Ahora ya tenemos la información en la variable, y podremos hacer con ella lo que nos de la gana, para mostrar todos los datos de la consulta, por ejemplo, solo tendríamos que hacer lo siguiente:

for (Campo1, Campo2, Campo3) in cursor:
    print("Campo1: " + Campo1 + ", Campo2: " + Campo2 + ", Campo3: " + Campo3)

Una vez que ya hemos obtenido la información deseada, solo nos queda cerrar las conexiones, tanto de la variable que se encarga de procesar las consultas de SQL, como la encargada de la conexión con el servidor.

# Cerramos la variable encargada de las consultas
cursor.close()

# Cerramos la conexión
conexion_mysql.close()

Y con esto ya valdría para conectarnos ha una base de datos en MySQL y consultar la información de una tabla.

 

Código completo del ejemplo.

#! /usr/bin/env python

# Importamos el conector de MySQL
import mysql.connector

# Variable con la configuracion de la conexion
config_mysql = {
    'user': 'usuario',
    'password': 'pass',
    'host': 'localhost',
    'database': 'prueba',
}

# conectamos al servidor MySql
conector = mysql.connector.connect(**config_mysql)

# cursor, clase para el manejo del SQL ???
cursor = conector.cursor()

# Creamos la consulta SQL
query = ("SELECT Nombre, Telefono FROM prueba")

# Ejecutamos la consula SQL
cursor.execute(query)

# Mostramos todos los datos de la consulta
for (Nombre, Telefono) in cursor:
    print("Nombre: " + Nombre + ", Telefono: " + Telefono)

# Cerramos cursor
cursor.close()

# Cerramos la conexion
conector.close()

 

 

 

Leer el puerto serie de Arduino con Python y PySerial

[singlepic id=20 w=320 h=240 float=right]Desde hace ya un tiempo he hoy buenos comentarios sobre Python y lo «fácil» que es programar con él, su potabilidad entre sistemas, etc. Me he puesto ha ello, y la verdad es que es muy fácil programar con él, después de un rato, se le coge el tranquillo a esa forma tan peculiar de escribir el código que tiene, solo utilizando tabulación, sin puntos y comas, llaves o cualquier otra forma de indicar el inicio y el fin de las lineas,  a la declaración de las variables, mejor dicho a la no declaración, la formar de trabajar con las funciones, etc. En general es un lenguaje muy fácil de trabajar y encima puedes hacer verdaderas locuras con el. Me ha recordado mucho al Basic que aprendí ya hace muchas lunas.

Para empezar, que mejor que trabajar con Arduino. Lo primero que he hecho es leer del puerto serie la información que escribe el Arduino.

Para el Arduino solo le he metido un código muy simple, genera un numero aleatorio, de -100 a 100,  y lo escribe en el puerto serie.

Codigo para Arduino

int x = 0;    // variable

void setup() {
  Serial.begin(9600);      // abre el puerto serie a 9600 bps:    
}

void loop() {

  Serial.println(random(-100, 100)); // Escribe en el puerto un numero aleatorio de -100 a 100
  delay(2000);
}

Y en Python lo que he hecho es aprovechar la librería PySerial que hay para Python para leer el puerto y leer los datos que escribe el Arduino.  Para instalar la librería PySerial es muy fácil, solo tenemos que seguir los pasos que hay en la propia pagina de PySerial.

El código en Python es muy simple, este mismo código en Java, me llevo bastante tiempo pelearme con la librería RxTx, en cambio en Python es tan sencillo como escribir el siguiente código.

Código Pytho

#!/usr/bin/python

# Importamos la libreira de PySerial
import serial

# Abrimos el puerto del arduino a 9600
PuertoSerie = serial.Serial('/dev/ttyACM0', 9600)
# Creamos un buble sin fin
while True:
  # leemos hasta que encontarmos el final de linea
  sArduino = PuertoSerie.readline()
  # Mostramos el valor leido y eliminamos el salto de linea del final
  print "Valor Arduino: " + sArduino.rstrip('\n')

Después de este código tan simple, ya tenemos un programa que nos lee los datos del puerto serie y lo muestra en pantalla. Esto con cualquier otro lenguaje te lleva un buen rato. Esto no me ha llevado mas de media hora de buscar por internet como se programa en Python y como funciona la libreria PySerial.

Que opinas de ello???

Como crear una imagen con el comando DD

[singlepic id=19 w=320 h=240 float=right]Ya hemos visto como instalar una imagen a un dispositivo conectado a nuestro ordenador con el comando de Linux «DD». Ahora vamos hacer el paso contrario, como crear nuestras propias imágenes con el mismo comando. Con el comando «DD», podemos crear imágenes tanto en formato ISO como en BIN. Este proceso están fácil, como cuando copiamos una imagen, solo le tendremos que indicar:

  1. donde esta montado el disco, partición o dispositivo que queremos hacer la imagen.
  2. ruta y nombre del fichero donde vamos ha guardar la imagen.
  3. el tamaño del bloque de datos que vamos ha utilizar. Como en el caso anterior esto es opcional. 

El comando quedaría de la siguiente manera:

sudo dd if=/dev/hda of=/ruta/donde/guardamos/fichero.iso bd=1M

Explicaión del comando:

  • «if=» Ruta donde esta montada la unidad o particion que queremos hacer la imagen.
  • «of=» Ruta donde vamos a grabar nuestro fichero de imagen ISO o BIN
  • «bd=» Tamaño del bloque de datos en que se va hacer la copia. 

Por ejemplo, si queremos hacer un copia de nuestro disco (/dev/sda1) y copiarlo a un dispositivo usb, solo tendremos que escribir

sudo dd if=/dev/sda of=/media/ruta/montaje/usb/fichero.iso db=1M

Para hacer una imagen de un cd o dvd (/dev/sr0).

sudo dd if=/dev/sr0 of=/home/usuario/Ficheros_Iso/fichero.iso db=1M

Y así con cualquier otro disco, partición o dispositivo que tengamos instalado en nuestro equipo.

Ejecutar Android en un Raspberry Pi

Actualizado el 4 de Junio de 2014, leer hasta el final del post.

[singlepic id=18 w=320 h=240 float=right]Como era lógico, alguien ya ha conseguido ejecutar Android, el sistema de Google para moviles en un Raspberry Pi. Aunque de momento esta en una fase muy precaria, nos permita a mucha gente poder probarlo he intentar mejorarlo.

Ejecutar Android en un Raspberry Pi

Para poder instalar y ejecutar Android en un Raspberry Pi solo tenemos que descargar el fichero de imagen que queramos instalar, para ello, tenemos disponible 3 versión de la imagen en los siguientes enlaces:

Una vez descargada la imagen que queramos probar, solo tendremos que copiar la imagen en nuestra tarjeta SD mediante el comando DD, en Linux, o desde cualquier otro programa tanto ya sea en  Windows, como Linux o en Mac que nos permita instalar imágenes en un USB o disco duro, y una tarjeta SD de al menos 2 Gb.

Una vez instalada la imagen en nuestra tarjeta SD (Samsung Evo MB-MP16DA/EU – Tarjeta de memoria Micro SDHC de 16 GB (UHS-I Grade 1 Clase 10, con adaptador SD)), solo tenemos que insertar la tarjeta el la ranura SD del Raspberry Pi.

Encendemos nuestro Raspeberry Pi y ya tendremos un sistema Android ejecutándose en nuestro Raspberri Pi.

Solo una aclaración  tendremos que tener nuestro Raspberry Pi enganchado a una pantalla mediante el conector HDMI, ya que si lo tenemos conectado mediante el conector de RCA, no nos funcionara, mejor dicho, si funcionara, pero en cuanto entre el entorno gráfico no veremos nada.

Por lo demás, siempre teniendo en cuenta que es una versión muy básica y reciente, tendremos un sistema Android corriendo en nuestro Raspberry Pi, lo que nos permitirá trastear con el , y empezar  a realizar nuestros propios proyectos con estos dos sistemas.

En este es un vídeo grabado por los creadores de la imagen donde se  ve el Raspberry Pi corriendo el Android.

ACTUALIZACIÓN

Varia gente me a comentado que no funcionaba que, que la pantalla se queda con la mensaje de «Sin señal». Lo he revisado y en principio funciona correctamente. Yo he probado a ejecutar android con una SD del tipo SDHC de 8Gb ( comprada en un chino, así que la calidad de la tarjeta no es muy buena).  La imagen la creado en un Ubuntu 14.04, con el siguiente comando.

sudo dd if=Gingerbread+EthernetManager.img of=/dev/sdf bs=1M

Probé a ejecutar android y sin problemas, para comprobar por que había gente que no le funcionada, lo probé con otra tarjeta esta es de 2Gb de tipo SD de SanDisk, y utilizando el mismo comando. Y aquí fallo, pero no es problema de la imagen, ni del Raspberry, el problema debe ser que la tarjeta no es suficiente para grabar la imagen en ella, con la de 8Gb, el Ubuntu la abre como un unidad que tiene 3 particiones. En cambio con la de 2Gb, el Ubuntu ni la reconoce.

Así que para probar instarla la imagen en una tarjeta superior a 2 Gb, no igual, sino superior.

La versión CyanogenMOD 9 (versión con Android 4.0) no esta disponible, por lo que podido leer en varias paginas, el proyecto esta suspendido.

No esperéis milagros, es una cosa muy básica, lo único que podréis sacar de ello, es que habéis conseguido instalar y ejecutar Android 2.3 en un Raspberry Pi, y nada mas. Tenia muy buena pinta al principio, pero si han parado el proyecto se ha quedado en una cosa muy básica.

Como actualizar Ubuntu 12.10 a Ubuntu 13.10

Para actualizar la versión de nuestro Ubuntu 12.10 Quantal Quetzal,  a la ultima versión, en la actualidad Ubuntu 13.04 Raring Ringtail, podemos hacerlo de dos formas.

1º Forma de actualizar Ubuntu 12.10 a Ubuntu 13.03

Para ello solo tendremos que ir al aplicaciones instaladas. Ejecutar el programa «Actualización de Software» en el escritorio del Unity, o escribir lo siguiente en un terminal.

update-manager -d

Esto nos abrirá el programa de actualización de software, buscara si hay nuevas versiones y nos dirá si queremos actualizarnos a la nueva versión. En el caso de que no nos muestre que hay una nueva versión, pulsaremos sobre el botón de «Configuración», y en pestaña de «Actualizaciones», en la opción de «Notificarme una versión nueva de Ubuntu» seleccionamos la opción de «Para cualquier versión nueva», y tecleamos la clave de root. Pulsamos el botón de «Cerrar», y cerramos el programa de «Actualización de software». volvemos ha ejecutar el programa, y ahora si, nos tiene que aparecer que ha encontrado una nueva versión. Pulsamos sobre le botón de «Actualizar», nos identificamos como root, introduciendo la clave, y seguimos las instrucciones que se nos muestra en pantalla.

2º Forma de actualizar Ubuntu 12.10 a Ubuntu 13.04

Este método se basa en utilizar comandos  de consola, es el recomendado para actualizar servidores que estén basados en Ubuntu. Aunque si en una versión de escritorio, tenemos problemas para actualizar de la 1º forma, podemos utilizar esta.

Para empezar abrimos un terminal y ejecutamos el siguiente comando.

do-release-upgrade -d

Si no tenemos instalado este programos lo podemos instalar de la siguiente manera

sudo apt-get install update-manager-core

 

Como instalar una imagen con el comando DD

[singlepic id=19 w=320 h=240 float=right]Para instalar una imagen ISO o BIN, en linux podemos utilizar el comando que viene por defecto «DD».

Este comando nos permite copiar imágenes ISO o BIN en cualquier dispositivo que tengamos montado en nuestro sistema, ya sea un disco duro, CD/DVD, como unidades USB o tarjetas de memoria.

Para utilizar este comando solo tendremos que pasarle como parámetros la ruta donde se encuentra el fichero que vamos a instalar, la ruta donde se encuentra el dispositivo donde vamos ha instalar la imagen, y el tamaño del bloque de los datos, esto ultimo no es obligatorio pero si recomendable.

Ejemplo de copia de una imagen en un dispositivo USB:

sudo dd if=/ruta/del/Fichero.iso of=/dev/sdh bs=4M

Explicación del ejemplo:

  • «if=» : ruta donde se encuentra el fichero ISO o BIN que vamos ha instalar en el dispositivo deseado.
  • «of=» : Ruta donde esta montado el dispositivo donde vamos ha copiar la imagen ISO o BIN.
  • «bs=» : tamaño del bloque de datos que se va ha utilizar, no es obligatorio, pero en algunos copias, da problemas el no utilizarlo.

En este ejemplo el dispositivo USB esta montado en «/dev/sdh» pero en cada caso puede ser diferente. Para saber donde tenemos nuestras unidades montadas, solo tenemos que utilizar el comando «fdisk» como root:

sudo fdisk -l

Este comando nos muestra la ruta y mas información de como están montadas nuestras unidades.

Para copiar la imagen a un disco duro lo haríamos de la siguiente forma:

Para un Ata:

sudo dd if=/ruta/del/Fichero.Iso of=/dev/hdb bs=1M

Para un serial Ata

sudo dd if=/ruta/del/Fichero.Iso of=/dev/sdb bs=1M

En los dos ejemplos copiaríamos el fichero Iso a la unidad montada en «/dev/hdb/ para el Ata y en «/dev/sdb» para el Serial Ata, con un tamaño de bloque de datos de 1M.

Para copiarla en una unidad  de cd, lo haríamos de la siguiente forma:

sudo dd if=/Ruta/del/Fichero.Iso of=/dev/cdrom

Y esto seria todo lo que necesitamos para copiar nuestras imágenes en cualquier unidad montada en nuestro sistema.

Problemas con el puerto de Arduino en Ubuntu (Linux)

[singlepic id=1 w=320 h=240 float=right]En un sistema linux, no todos los usuario pueden tender acceso a poder manejar los puertos. Solo los usuarios que estén en el grupo «dialout» tiene permiso para manejar los puertos. Lo normal es que nuestro usuario no este dentro de ese grupo, por lo que tendremos problemas para poder acceder al puerto que crea el arduino. Para solucionar este problema solo tendremos que añadir nuestro usuario al grupo «dialout» de la siguiente manera.

sudo usermod -a -G dialout <NombreDeUsuario>

Nos pedirá la contraseña de root. y con esto, nuestro usuario ya sera miembro del grupo «dialout».

Ya solo nos queda cerrar la sesión para que los cambios efectuados tenga efecto y podamos acceder al puerto del Arduino desde nuestro usuario.

Obtener la temperatura con Arduino y un termistor

En este proyecto vamos ha ver como podemos obtener la temperatura mediante la utilización de un termistor. Lo primero, que es un termistor, esta es una simple resistencia que varia según la temperatura que tenga, con el valor devuelto por la resistencia y una pequeña formula podemos calcular que temperatura hace.

Esquema del circuito:

El esquema de este circuito es muy sencillo, esta basado en un simple divisor de tensión, en este caso quedaría de la siguiente manera.

[singlepic id=3 w=320 h=240 float=center]

Este esquema es el utilizado en la mayoría de sensores, simplemente cambiando el termistor, por un lcr, por ejemplo, tendríamos un sensor para detectar la luminosidad.

En mi caso el termistor no es de 10 k, como se muestra en el esquema, sino que es de 100k (NJ28 NTC Thermistor,2.8mm,100K,1%), esto no varia mucho lo fundamental del sistema, ya que en el código para el arduino , le diremos tanto el valor de resistencia del termistor, como el valor de la resistencia secundaria.

Esquema de la conexión en al arduino:

[singlepic id=10 w=320 h=240 float=center]

Para calcular la temperatura necesitamos saber el valor beta de nuestro termistor, normalmente, este valor lo suele facilitar el fabricante de la resistencia, pero si el fabricante no nos lo da o no sabemos el fabricante, lo podremos calcular sabiendo la temperatura a la que esta el termistor, apuntamos el valor de resistencia ha esa temperatura y la temperatura en grados Kelvin, después elevamos la temperatura y volvemos a puntar la resistencia y la temperatura. Cuanto mas diferencia de temperatura mas fiable sera el calculo.

Por ejemplo, ponemos el termistor sobre un hielo, con otro termómetro miramos la temperatura, por ejemplo T1 = 3º + 273,15 y resistencia R1 = 34500 Ohm. Luego lo metemos el agua caliente y hacemos la misma comprobación T2 = 80º + 273,15 y R2 = 134 Ohm. Con esos datos aplicamos la siguiente formula:

beta=(log(RT2/RT1))/((1/T2)-(1/T1))

Quedando de la siguiente manera:

beta = (log(143 / 345000)) / ((1/353,15)-(1 / 276,15))

beta = 4283,9970482988 = 4284

Código para el Arduino.

#include <stdio.h>
#include <math.h>

int analogPin=0;     // Pin donde esta conectado el divisor de tension en el Arduino

float Vin=5.0;       // [V]       Voltage de entrada en el divisor de tension
float Raux=10000;    // [ohm]     Valor de la resistencia secundaria del divisor de tension
float R0=100000;     // [ohm]     Valor de resistencia nominal del termistor (NTC) a 25ºC
float T0=298.15;     // [K] (25ºC)

float Vout=0.0;      // [V]        Voltage given by the Voltage-Divider
float Rout=0.0;      // [ohm]      Resistencia actual del Termistor (NTC)

// Valores para calcular el valor Beta, si no lo sabemos
// float T1=273;     // [K]        Temperatura del 1º punto del test (en grados Kelvin)
// float T2=373;     // [K]        Temperatura del 2º punto del test (en grados Kelvin)
// float RT1=19750;  // [ohms]     Resistencia a 273K grados Kelvin (0ºC)
// float RT2=2150;   // [ohms]     Resistencia a 373K grados Kelvin (100ºC)

float beta=0.0;      // [K]        Parametro Beta
float Rinf=0.0;      // [ohm]      Parametros Rinf
float TempK=0.0;     // [K]        Temperatura de salida en grados Kelvin
float TempC=0.0;     // [ºC]       Temperatura de salida en grados Celsius

int iCont;            // Contador de ciclos, par el calculo de la temperatura media
float cTemp1;         // Variable temporal para acumular las temperaturas leidas 

void setup() {
  // Configuramos el puerto Serie
  Serial.begin(9600);

  // Configuramos el pin del Arduino en entrada
  pinMode(analogPin, INPUT);

  // Parametros generales para el calculo
  // Formula para calcular el valor beta si no disponemos de el
  // beta=(log(RT1/RT2))/((1/T1)-(1/T2));
  // Valor beta, los fabricantes suelen disponer ya de este valor, 
  // mirar en la tabla de carateristicas del termistor
  beta = 4380;
  Rinf=R0*exp(-beta/T0);
}

void loop()
{
  cTemp1=0;  
  for (iCont = 1; iCont <= 500; iCont ++)
  {
    // Cálculo del valor de la resistencia termistor (NTC) actual (a través de Vout)
    Vout=Vin*((float)(analogRead(analogPin))/1024.0); 
    Rout=(Raux*Vout/(Vin-Vout));

    // Calculo de la temperatura en grados Kelvin
    TempK=(beta/log(Rout/Rinf));
    // Calculo de la temperatura en grados Celsius
    TempC=TempK-273.15; 
    // Almacenamos la temperatura (grados Celsuis) actual para despues obtener la media
    cTemp1 = cTemp1 + TempC; 
    // Hacemos una pausa de 10 milisegundos    
    delay(10);
  }

  // Calculamos la temperatura media
  TempC = cTemp1/iCont;

  // Mostramos la temperatura media en grados Celsius
  Serial.println(TempC);

  // Hacemos una pausda de 1 seg.
  delay(1000);
}

Y con esto ya tendríamos un termómetro digital con nuestro Arduino.

Problema con el USB y VirtualBox en Ubuntu 12.10

[singlepic id=7 w=320 h=240 float=right]Normalmente trabajo con Ubuntu, y cuando necesito probar algún otro sistema, o necesito trabajar con Windows, lo hago a través de un sistema virtual con VirtualBox, normalmente no tengo ningún problema con el, pero después de una actualización del programa, en los sistemas instalados dejo de funcionar la detención de los dispositivos conectados por usb, como el arduino, las impresoras, etc. Después de dar muchas vueltas por la configuración del VirtualBox, y no encontrar nada raro, me puse a buscar por Internet, y  encontré este mismo problema pero con la versión 11.10 del Ubuntu. Y como por probar no se pierde nada, lo probé en mi Ubuntu 12.10, y problema resuelto.

Por lo visto el fallo viene por no tener el usuario con el que se ha abierto la sesión dentro del grupo que crea el VirtualBox cuando se instala.

Para solucionar este problema solo tendremos que añadir nuestro usuario dentro del grupo «vboxusers» de la siguiente manera:

1º.- Abrimos una terminal de consola, seguramente se pueda hacer mediante algun programa grafico, pero cuando se trata de configuraciones me gusta hacerlo mediante una consola.

2º .- Comprobamos que el grupo «vboxusers» existe, una mandera fácil de hacerlo es tecleando «groupmod» y pulsamos varias veces la tecla tabulador, y esto nos mostrara la lista de grupos actuales.

3º.- Si no existe los creamos. Para crearlo solo tenemos que poner en la terminal de la consola «sudo addgroup vboxusers«. Nos pide la clave de root y listo. Ya tenemos el grupo «vboxusers» creado.

4º.- Para añadir nuestro usuario al grupo «vboxusers» tecleamos en la terminal de la consola «sudo usermod -a -G vboxusers NombreDeUsuario». Esto añadira nuestro usuario al grupo «vboxusers».

Después de estos paso, solo tendremos que reiniciar la sesión. Y los sistemas instalados con VirtualBox ya reconocerán nuestros dispositivos conectados por usb.

Un problema tonto, pero que te hace perder mucho tiempo. Espero que os haya servido de ayuda.