21-03-2023, 01:52 AM
Buscando informacion en internet, me he topado con una interesante aplicación para Android y para la raspberry.
Se trata de utilizar un móvil como sensor acelerómetro, enviar los datos a la raspbery y de esa manera visualizar la escora y el cabeceo en OpenCPN.
Esto va para Simbad que tiene una colección de mobiles viejos. Uno de ellos lo puede usar como sensor.
Que necesitamos, un mobil con Android y la raspberry. Para el móvil descargaremos he instalaremos una app que leerá los datos del sensor acelerómetro del móvil y los enviara por red WiFi a la Raspberry.
La app para el móvil se llama Wireles IMU y se encuentra por la app Google Play del móvil Android.
La instalamos y luego la podemos abrir. Donde pone Target IP Address hay que poner la dirección que aparezca en la raspberry cuando la conectemos al móvil o a nuestra red del barco bien via router o via gateway o por punto de acceso.
Luego veremos como obtener esta dirección.
Para la raspberry necesitaremos un script en Python para que pueda leer los datos enviados por el móvil, interpretarlos, convertirlos y finalmente enviarlos a un puerto para que los pueda leer OpenCPN.
Este es el script:
Para poderlo utilizar, teneis que abrir un terminal en la Raspberry y teclear
sudo nano imu_mobil.py
Se os abrira una pantalla en ella copiais el scrip de arriba
Lo guardais con ctrl+x contestais que s luego y enter y queda guardado. Os teneis que fijar en que directorio lo habeis guardado.
Ahora teneis que activar el Mobile Hotspot und Tethering en el mobil para que la raspberry se pueda conectar al mobil via WiFi. Pulsais otra vez en Mobile Hotspot y os aparecera el nombre de rd y la contraseña.
Estos datos son para poner en la raspberry. Pulsais el icono de red. Os aparecera la lista de redes disponible. Buscais y marcais la de vuestro mobil y os pedira la contraseña que visteis al pulsar Mobile Hotspot. A continuacion se debera conectar al mobil.
Para saber direccion de red, habris de nuevo un terminal y tecleais:
sudo ifconfig
Os aparecera la informacion de red de la raspberry. En el ultimo parrafo esta la informacion de red. Ese es el valor que teneis que poner en la app Wireles IMU del mobil.
Esta direccionla teneis que poner en el script de python imu_mobil.py donde pone
y tambien en app de android
Luego pulsais el boton donde donde pone off y comenzara a mandar datos a la raspberry.
En la raspberry arrancais el scripr imu_mobil.py. Si lo habeis guardado en el directorio raiz escribis en una terminal:
sudo python3 /home/pi/imu_mobil.py
Si no os funciona lo más probable es que os falte alguna biblioteca . Las más probable es pynmea2 y socket.
Para instalarlas primero actualizar la Raspberry con :
Sudo apt-get update
Sudo apt-get upgrade.
Cuando se haya actualizado instalar las bibliotecas:
pip3 install pynmea2
pip3 install socket
Ahora solo queda abrir una conexion en OpenCPN.
Pulsar a aplicar, luego OK. En OpenCPN Tendremos que insertar en instrumenos el cabeceo y la escora para visualizar los datos en OpenCPN
Se trata de utilizar un móvil como sensor acelerómetro, enviar los datos a la raspbery y de esa manera visualizar la escora y el cabeceo en OpenCPN.
Esto va para Simbad que tiene una colección de mobiles viejos. Uno de ellos lo puede usar como sensor.
Que necesitamos, un mobil con Android y la raspberry. Para el móvil descargaremos he instalaremos una app que leerá los datos del sensor acelerómetro del móvil y los enviara por red WiFi a la Raspberry.
La app para el móvil se llama Wireles IMU y se encuentra por la app Google Play del móvil Android.
La instalamos y luego la podemos abrir. Donde pone Target IP Address hay que poner la dirección que aparezca en la raspberry cuando la conectemos al móvil o a nuestra red del barco bien via router o via gateway o por punto de acceso.
Luego veremos como obtener esta dirección.
Para la raspberry necesitaremos un script en Python para que pueda leer los datos enviados por el móvil, interpretarlos, convertirlos y finalmente enviarlos a un puerto para que los pueda leer OpenCPN.
Este es el script:
Código:
# -------------------------------------------------------
import socket, traceback
import pynmea2
import math
import time
host = '192.168.71.15'
port = 5555
red = "0.0.0.0"
puerto = 2947
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((host, port))
x = 0
y = 0
z = 0
def dist(a,b):
return math.sqrt((a*a)+(b*b))
def get_y_rotation(x,y,z):
radians = math.atan2(x, dist(y,z))
return -math.degrees(radians)
def get_x_rotation(x,y,z):
radians = math.atan2(y, dist(x,z))
return math.degrees(radians)
while 1:
try:
message, address = s.recvfrom(8192)
#print (message)
x = (message[15:-73])
y = (message[25:-65])
z = (message[33:-57])
x = float((x.decode(("utf-8"))))
y = float((y.decode(("utf-8"))))
z = float((z.decode(("utf-8"))))
pitch = get_x_rotation(x, y, z)
roule = get_y_rotation(x, y, z)
print ("x rotation: " , pitch)
print ("y rotation: " , roule)
ropi=pynmea2.XDR('II','XDR', ('A',str(round(roule,2)),'D','ROLL','A',str(round(pitch,2)),'D','PITCH'))
ropi1=str(ropi)
ropi2=ropi1+"\r\n"
ropi2= bytes(ropi2, 'utf-8')
s.sendto(ropi2, (red, puerto))
time.sleep(0.2)
except (KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
# -------------------------------------------------------
sudo nano imu_mobil.py
Se os abrira una pantalla en ella copiais el scrip de arriba
Lo guardais con ctrl+x contestais que s luego y enter y queda guardado. Os teneis que fijar en que directorio lo habeis guardado.
Ahora teneis que activar el Mobile Hotspot und Tethering en el mobil para que la raspberry se pueda conectar al mobil via WiFi. Pulsais otra vez en Mobile Hotspot y os aparecera el nombre de rd y la contraseña.
Estos datos son para poner en la raspberry. Pulsais el icono de red. Os aparecera la lista de redes disponible. Buscais y marcais la de vuestro mobil y os pedira la contraseña que visteis al pulsar Mobile Hotspot. A continuacion se debera conectar al mobil.
Para saber direccion de red, habris de nuevo un terminal y tecleais:
sudo ifconfig
Os aparecera la informacion de red de la raspberry. En el ultimo parrafo esta la informacion de red. Ese es el valor que teneis que poner en la app Wireles IMU del mobil.
Esta direccionla teneis que poner en el script de python imu_mobil.py donde pone
Código:
host = '192.168.71.15'
Luego pulsais el boton donde donde pone off y comenzara a mandar datos a la raspberry.
En la raspberry arrancais el scripr imu_mobil.py. Si lo habeis guardado en el directorio raiz escribis en una terminal:
sudo python3 /home/pi/imu_mobil.py
Si no os funciona lo más probable es que os falte alguna biblioteca . Las más probable es pynmea2 y socket.
Para instalarlas primero actualizar la Raspberry con :
Sudo apt-get update
Sudo apt-get upgrade.
Cuando se haya actualizado instalar las bibliotecas:
pip3 install pynmea2
pip3 install socket
Ahora solo queda abrir una conexion en OpenCPN.
Pulsar a aplicar, luego OK. En OpenCPN Tendremos que insertar en instrumenos el cabeceo y la escora para visualizar los datos en OpenCPN