La Arduino e' contenuta nella scatolina bianca |
Per leggere i dati della porta seriale di Arduino ho collegato un cavo OTG alla USB di Android usando la libreria https://github.com/felHR85/UsbSerial. I dati poi sono stati inviati in HTTP Get tramite OKHttp. Il progetto della applicazione Android si trova sul mio GitHub https://github.com/c1p81/Seriale (si tratta di una modifica dell'esempio della libreria UsbSerial)
Questo e' invece lo skecth Arduino
=========================================================
#include <Arduino_LSM9DS1.h>
#include <Arduino_HTS221.h>
#include <Arduino_LPS22HB.h>
#include <Arduino_APDS9960.h>
int conteggio;
void setup() {
conteggio = 0;
Serial.begin(9600);
while (!Serial);
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
if (!HTS.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1);
}
if (!APDS.begin()) {
Serial.println("Error initializing APDS9960 sensor.");
}
}
void loop() {
float x, y, z;
double dx,dy,dz;
double mx,my,mz;
double fx,fy,fz;
double pitch,roll = 0.0;
double mpitch,mroll = 0.0;
const float alpha = 0.5;
float pressure = BARO.readPressure();
float temperature = HTS.readTemperature();
float humidity = HTS.readHumidity();
while (! APDS.colorAvailable()) {
delay(5);
}
int r, g, b, light_int;
APDS.readColor(r, g, b, light_int);
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(x, y, z);
dx = (double)x;
dy = (double)y;
dz = (double)z;
mx = mx + dx;
my = mx + dy;
mz = mx + dz;
fx = (dx*alpha) + (fx*(1-alpha));
fy = (dy*alpha) + (fy*(1-alpha));
fz = (dz*alpha) + (fz*(1-alpha));
conteggio++;
}
if (conteggio > 10000)
{
mx = mx /conteggio;
my = my /conteggio;
mz = mz /conteggio;
roll = atan2(fy,fz)*57.29577;
pitch = atan2(-fx,sqrt((fy*fy)+(fz*fz)))*57.29577;
mroll = atan2(my,mz)*57.29577;
mpitch = atan2(-mx,sqrt((my*my)+(mz*mz)))*57.29577;
Serial.println(String(mpitch)+";"+String(mroll)+";"+String(pitch)+";"+String(roll)+";"+String(temperature)+";"+String(humidity)+";"+String(pressure)+";"+String(light_int));
conteggio = 0;
fx = fy = fz = 0;
mx = my = mz = 0;
}
delay(10);
//delay(5000);
}
=========================================================
I dati sono plottati sul server mediante JSCanvas. Gli script si trovano qui https://github.com/c1p81/Seriale/tree/master/app/seriale_html