anche io sono perito informatico (laureando in ingegneria informatica) e per l'appunto sto facendo un tirocinio che ha alla base proprio arduino e penso proprio che ci farò la tesi.
Cmq per rispondere alla tua domanda è possibile.
Ti spiego in sintesi i vari passaggi di dati che faccio:
Rilevo i dati con arduino relativi a vari sensori.
Invio i dati (inizialmente l'avevo fatta via usb ora via ethernet) da arduino al pc. Ho preparato un programma in java per leggere i dati provenienti da arduino e visualizzarli in una finestra grafica.
Poi i dati elaborati con il programma java, li invio su database (via wireless a un pc su cui vi è un database locale e via ethernet ad un altro pc su cui vi è il server remoto)
Credo che a te basti far arrivare i dati da arduino al pc...
E penso che ti basti inviarli via usb (altrimenti devi prendere lo shield ethernet se vuoi inviarli via cavo ethernet)
So di essere OT, ma vorrei sapere come hai fatto a prelevare i dati di Arduino trasmessi tramite seriale ed Ethernet da Java...
Per ora è una curiosità, ma potrebbe diventare una realtà molto presto!!!
Mi andrebbe benissimo anche una spiegazione via MP.
Grazie mille, ciao!!
i dati giungono da arduino via usb.
Tramite usb infatti alimenti arduino, carichi in memoria il programma e puoi anche inviarli al pc sempre tramite usb.
In java ho dovuto aggiungere delle librerie per permettere la comunicazione tra arduino e pc, ma se ti basta solamente inviare i dati al pc, credo che tu possa fare a meno.
@cecco88:
Potresti dirmi che librerie hai usato? Te ne sarei grato!!
@racingmat:
Se non hai problemi potresti usare anche tu un porting dei dati in java e poi di lì creare il tuo file access.
Alla fine sarebbe una banale scrittura su database e se hai una minima competenza in java riusciresti senza alcun problema in pochissimo tempo!!
Trovi un sacco di materiale online a riguardo!!
in pratica legge in """continuo""" i dati provenienti da 3 pin analogiti (comando in tansione 0/5V)
poi con un seplice programma di lettura porta com ...
lo vedo .. poi farlo benissimo in VBA in acess.. (io acess nn lo conosco ma potrei darti una mano in excel )
cio buon lavoro
Per inviare i dati a un database mysql la libreria da aggiungere è:
mysql-connector-java-5.1.10-bin.jar
Io utilizzo netbeans su linux, non so se ci sia qualche problema per windows, ma non credo.
@racingmat
Per avere il dato di temperatura "in tempo reale" ti scrivo un programmino.
Per poter visualizzare un dato significativo ti conviene fare un campionamento ogni mezzo secondo o ogni secondo (o quello che ti pare)
(Io l'ho fatto per rilevare una velocità di un sensore)
void loop(){
if (millis() - previousMillis > 1000) { //entro nell'if una volta al secondo
previousMillis = millis();
//lettura valore dal sensore
velocita = analogRead(0);
//Preparazione messaggi da visualizzare nel serial monitor
//Velocita
strcpy(msgVEL,"##MSG##");
strcat(msgVEL,"Ricevuto input analogico velocita");
Serial.println(msgVEL);
//Preparazione comandi
//Velocita
strcpy(cmdVEL,"##CMD##<VEL>");
char vel_txt[10] = ""; //stringa che conterrà il valore numerico convertito in caratteri
itoa(velocita, vel_txt, 10);
strcat(cmdVEL,vel_txt);
Serial.println(cmdVEL);
}
Per il momento limitati a visualizzarlo su serial monitor, successivamente potrai preoccuparti di inviarlo al pc
Prova a vedere se questa parte di mio programma può esserti utile, è commentata abbastanza, se c'è qualcosa di non chiaro chiedi pure, ci sono anche i parametri di configurazione per ricevere i dati da usb, ciao ciao
package arduino_01;
import gnu.io.*;
import java.io.*;
public class Main {
//variabili per la ricezione/trasmissione dati da/verso arduino
static InputStream input;
static OutputStream output;
public static void main(String[] args) throws Exception{
String portName = "/dev/ttyUSB0"; //controllare il nome nell'IDE di arduino
int portRate = 9600; //bit per secondo
String carattereDaArduino=""; //carattere letto da arduino
String stringaDaArduino = ""; //insieme di caratteri letti tra ! e $
//Configurazione dispositivo collegato al pc
System.out.println("Using port: " + portName);
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(portName);
SerialPort port = (SerialPort)portId.open("serial talk", 4000);
input = port.getInputStream();
output = port.getOutputStream();
port.setSerialPortParams(portRate,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//Creazione interfaccia grafica
Main_GUI mainGui = new Main_GUI();
mainGui.setVisible(true);
//Creazione oggetto per gestione segnali in ingresso
SignalManager sm = new SignalManager();
sm.setMainGUI(mainGui);
sm.setarduinoOutput(output);
mainGui.setSignalManager(sm);
//Ciclo per la lettura dei dati provenienti da arduino
while(true){
while(input.available()>0) {
//Carattere letto (lettura carattere per carattere)
char carattereLetto = (char)(input.read());
carattereDaArduino = String.valueOf(carattereLetto);
//Interpretazione del carattere letto
//I delimitatori di stringa sono '!' e '
//Verrà processata una volta letto il '
if(carattereDaArduino != ""){
switch(carattereLetto){
//Carattere di inizio stringa: '!'
//Inizio nuova stringa di dati
case '!':
stringaDaArduino = "";
break;
//Carattere di fine stringa: '
si... mi accorgo di essere MOLTO pigro rispetto a ciccio.....
beh .. in pausa pranzo ho fatto una prova di "monitor seriale" in VBA ... excel
e funziona...
se vi servirà lo metto giù meglio e ve lo mando ...
usa pero lo mscomm.ocx ... che è un filinino scomodo ... ma va....