Introduction: Surfboard Data Feeder

O projeto visa acoplar dispositivos eletrônicos numa prancha de surf com intuito de coletar dados que contribuem com a experiência do surfista, processo fabril e com o meio ambiente. Experiência com o surfista por disponibilizar informações sobre as características dele durante prática do surf, informações relevantes em tempo real sobre a área em que está, entre outras. No processo fabril, pois com os dados da característica do surfista é possível construir pranchas com a distribuição da flutuação e flexibilidade adequada para um determinado surfista, de acordo com a maneira que surfa. Do meio ambiente, pois sensores acoplados na prancha podem coletar dados ambientais durante a prática do esporte para cientistas, governo e cidadãos.

É possível coletar o trajeto com o GPS, a flutuação pode ser calculada com o valor da pressão atmosférica, a flexibilidade pode ser coletada por meio de sensores flexíveis, o posicionamento do surfista e a pressão podem ser coletados com sensor resistível a força e as característica do mar podem ser coletadas por meio de sensores analíticos, entre outros.

Referência

SmartFin: O projeto SmartFin , apoiado pela fundação Surfrider, tem por objetivo coletar dados do oceano por meio de sensores acoplados
nas quilhas da prancha. Estes dados permitem identificar o pH, salinidade, características das ondas, temperatura, localização do GPS, oxigênio, clorofila do oceano em determinada localidade.Surfsens (Pukas + Tecnalia): O projeto em parceria com Pukas e Tecnalia instala sensores na prancha para coletar informação durante o surf, o projeto é descrito no link: http://pukassurf.com/surfboards/surfsense/ . O vídeo do projeto pode ser assistido em: http://pukassurf.com/surfboards/surfsense/ Opifex: O Opifex é um projeto brasileiro que tem por finalidade coletar informação do surf por meio de um dispositivo acoplado na prancha. Instrumented Surfboard (ISurf): Projeto de estudantes da universidade Virginia Tech que coloca sensores na prancha de surf, o vídeo do projeto está disponível em: http://pukassurf.com/surfboards/surfsense/ Samsung Galaxy Surfboard: A Samsung lançou no ano passado uma prancha de surf conceito nomeada de Galaxy Surfboard em parceria com Gabriel Medina. O link do vídeo da divulgação pode ser assistido em: http://pukassurf.com/surfboards/surfsense/ Generate your perfect surfboard from data: Rob Renn, em sua tese em projeto industrial, projeta sistema de coleta e análise dos dados para projetar o formato da prancha ideal para o surfista. Isto está publicado de maneira resumida no instructables no link: http://pukassurf.com/surfboards/surfsense/ OnboardComputer:Projeto de estudantes da universidade de San Diego na California adiciona um computador de bordo em uma prancha de surf http://pukassurf.com/surfboards/surfsense/ Rastreador de movimentos: Existem diversos dispositivos que permitem rastrear os movimentos durante prática do esporte. Entre eles estão os Smartband/Smart Watches e outros dispositivos que são fixados na prancha como o Trace Up e Xensr Air 3D GPS

Step 1: Configuração Do Ambiente/Enviroment Configuration

Para chegar na arquitetura representada pela imagem, deve-se primeiro configurar o ambiente da seguinte maneira:

  1. Instalar Debian Linaro
  2. Habilitar SPI no firmware conforme, https://www.instructables.com/id/Habilitando-SPI-V...

Step 2: GPS

Instalar GPS e inicializar o serviço

sudo apt-get install gpsd-clients gnss-gpsd
sudo systemctl start qdsp-start.service sudo systemctl start gnss-gpsd.service sudo systemctl start qmi-gps-proxy.service sudo systemctl restart gpsd

Colocar a DragonBoard 410c com vista para o céu.

Executar o comando:

gpsmon

Executar o código disponibilizado em

http://www.danmandle.com/blog/getting-gpsd-to-work-with-python/

Step 3: I2C - BNO055 Com Java

BNO055
A instalação do mraa e upm permitem que seja possível acessar sensores via java. Como existe a biblioteca do BNO055 em java, então utilizou-se dessa linguagem para a leitura deste sensor. Logo, este módulo é responsável pela leitura do sensor, armazenamento e somente a operação GET é exposta na na camada da Surfboard Data Feeder REST API.

Seguem os passos que permitiram codificar o módulo de orientação em java:

Instalar Java SDK

sudo apt-get install default-jdk

Adicionar JAVA_HOME=usr/lib/jvm/default-java em /etc/enviroment

Gerar libmraajava.so

git clone  https://github.com/intel-iot-devkit/mraa.git
cd mraa
mkdir build; cd build
cmake -D BUILDSWIGNODE=OFF -D BUILDSWIGPYTHON=OFF -D BUILDSWIGJAVA=ON ..
make mraajava 
cd src/java
cp libmraajava.so /usr/lib/
cp mraa.jar ${JAVA_HOME}/jre/lib/

Se aparecer algum erro, talvez resolva instalando

sudo apt-get install software-properties-common
sudo apt install dirmngr

Executar o mesmo procedimento acima, mas no repositório do upm. É necessário passar o argumento no cmake para habilitar o java (-D BUILDSWIGJAVA=ON)

sudo cmake -DBUILDSWIGNODE=OFF -D BUILDSWIGJAVA=ON BUILDEXAMPLES=ON .. 

sudo java -Djava.library.path=/home/linaro/upm/build/src/bno055/ -jar upm-test2.jar

A referência utilizada para rodar o mraa e o upm com java pode ser acessada em:

https://software.intel.com/en-us/iss-iot-edition-...

Após importar as dependências do upm e mraa no projeto java, então basta instanciar a classe upm_bno055.BNO055 passando como argumento o I2C e o endereço no I2C.

Segue o comando para localizar o I2C em que o sensor está conectado e o endereço do sensor no barramento:

sudo i2cdetect -y -r 0
sudo i2cdetect -y -r 1
sudo i2cdetect -y -r 3

Neste caso o i2c é o 1 e o endereço do sensor é 0x28.

Step 4: FSR Matrix

Arduino

int pinOutS0 = 8;
int pinOutS1 = 9; int pinOutS2 = 10; int pinInMux = A0; int muxState[8] = {0}; String msg; void setup() { pinMode(pinOutS0,OUTPUT); pinMode(pinOutS1,OUTPUT); pinMode(pinOutS2,OUTPUT); Serial.begin(9600); } void loop() { updateMux(); msg = ""; for(int i = 0; i < 8; i++){ if (i == 7){ msg = msg + muxState[i]; } else { msg = msg + muxState[i] + ","; } } Serial.println(msg); delay(100); } void updateMux(){ for (int i = 0; i < 8; i++){ digitalWrite(pinOutS0, HIGH && (i & B00000001)); digitalWrite(pinOutS1, HIGH && (i & B00000010)); digitalWrite(pinOutS2, HIGH && (i & B00000100)); muxState[i] = analogRead(pinInMux); } }

Código DragonBoard 410c (python)

import time
import serial import re import requestsser = serial.Serial('/dev/tty96B0',baudrate=9600,timeout=0.0) urlFsr = 'http://linaro-alip:8080/rest/fsrmatrix'while 1: dataReceived = ser.readline() #if (re.match(r'^d',dataReceived)): responseFsr = requests.post(urlFsr,data=dataReceived.strip(),headers={"Content-Type": "application/json"}) time.sleep(0.05) ser.close()

Step 5: SPI - Linker Mezzanine

Para utilizar o SPI na DragonBoard410c é necessário que o firmware seja alterado.

Após isso basta instalar o libsoc e a partir daí é possível ler os dados dos sensores analógicos pela Linker Mezzanine. As portas da Mezzanine corresponsem aos seguintes endereços: A0(0x80), A1(0x90), A2(0xA0) e A4(0xB0)

Referência

https://contest.embarcados.com.br/topico/comunicac...