Utilizzare Arduino senza il pc

Buongiorno a tutti! Sono nuova e purtroppo inesperta! Volevo chiedervi un aiuto. Volevo utilizzare Arduino per un progetto in collaborazione con l'università di Tor Vergata. Sono una neolaureata in ingegneria medica. L'idea era quella di utilizzare la scheda Arduino per controllare e gestire una serie di sensori in grado di rilevare la pressione. Ho iniziato a scrivere i primi programmi, ma mi chiedevo se fosse possibile memorizzare un programma sulla scheda Arduino e poi svincolarla dal pc. Ho provato a memorizzare un programma di accensione e spegnimento di un led, alimentando la scheda con una batteria da 9V. Si verificano due comportamenti diversi: 1) Programmando direttamente Arduino, la scheda mantiene in memoria il programma anche se stacco il cavo USB di collegamento con il pc e se stacco e attacco di nuovo la batteria. 2) Programmando la scheda tramite l'IDE di Processing, non c'è memorizzazione...appena tolgo il collegamento con il pc il programma memorizzato viene perso (il led rimane nello stato [acceso/spento] in cui era al momento del distacco del collegamento con il pc). Come si spiega? Per memorizzare devo necessariamente programmare direttamente su Arduino senza utilizzare Processing? Questo cosa comporta? Aiutatemi! Grazie a tutti in anticipo!

Ciao, cosa intendi con programmare la scheda tramite l'ide di processing?

Comunque usando l'IDE Arduino, una volta caricato lo sketch, la scheda continua ad eseguire il loop ciclicamente fintanto che c'è alimentazione. Dopo aver caricato lo sketch puoi usare l'usb per la sola alimentazione o anche per ricevere/mandare dati dal/al pc. Se non hai previsto nessuno scambio di dati allora ti basta alimentarlo con un qualsiasi tipo alimentazione, se nel tuo programma è previsto uno scambio di dati allora ci dev'essere qualcosa che faccia comunicare arduino col pc.

Spero di essere stato utile

Ciao! Ti ringrazio,

Scusami,probabilmente mi esprimo male…per IDE di Processing intendevo la programmazione di Arduino utilizzando Processing senza utilizzare l’IDE di Arduino se non per caricare lo standard_firmata.pde che serve per la comunicazione Arduino-Processing.
Il mio programma deve trasferire dati, e programmando tramite l’IDE di Arduino non ho problemi di memorizzazione sulla scheda. I problemi mascono quando per programmare utilizzo Processing. In questo caso non riesco a svincolare la scheda dal pc.
Il mio obiettivo è proprio quello di programmare la scheda e di mantenere in memoria il programma, senza dover tenere il collegamento con il pc per eseguirlo. Ciò è possibile tramite Processing?
Cosa comporta programmare direttamente sull’IDE di Arduino rispetto alla programmazione di Arduino tramite Processing?
…Spero di essere stata più chiara…
Grazie

Il problema è che caricando Firmata sulla scheda Arduino, tu non stai caricando un vero e proprio programma che fa qualcosa ma un protocollo che ti consente di interfacciarti con Processing, le istruzioni della tua applicazione le hai scritte in uno sketch di Processing, che viene eseguito sul tuo pc.....in questo modo la scheda Arduino diventa una sorta di periferica del pc.

So che si possono scrivere versioni personalizzate di Firmata, ma non ho mai provato e non saprei se fa al caso tuo.

Faccio un esempio: scrivi la tua applicazione stand alone con Arduino, tra le varie funzioni ne prevedi una che, una volta attivata scambi dati con Processing usando la seriale. A questo punto decidi tu come e quando vengono scambiati i dati.

Ti ringrazio, sei stato veramente utile! Non riuscivo a capire il perchè di questo comportamneto diverso....Ora è chiaro! Quindi devo cercare di scrivere una funzione che scambi i dati con Processing... questo sarà un po' più complicato... Comunque ti ringrazio ancora!

Un'altra domanda...Programmare la scheda utilizzando Processing apporta qualche vantaggio rispetto alla programmazione della scheda direttamente con l'IDE di Arduino? Ovvero, se io decidessi di scrivere la mia applicazione direttamente con l'IDE di Arduino, quali svantaggi e/o limiti potrei avere rispetto all'utilizzo di Processing? Mi spiace forse le domande sono banali... Grazie!

Se sviluppi la tua applicazione con l’IDE di Arduino, le istruzioni che scrivi saranno svolte interamente dal microcontrollore della scheda (l’ATMega).
Se sviluppi con Processing e Firmata, le istruzioni che scrivi le svolge il microprocessore del tuo pc, Arduino diventa solo “una cosa” che deve capire se deve leggere un ingresso o abilitare un’uscita.

Se la tua applicazione dovrà funzionare anche senza pc, allora devi usare l’IDE Arduino.
Non sono così esperto per dirti se c’è un reale vantaggio o svantaggio nello sviluppare in un modo o nell’altro, perchè anche se portano allo stesso risultato, sono due approcci diversi.
Forse se devi svolgere operazioni matematiche particolari (tipo logaritmi, radici, esponenziali) Arduino è sicuramente molto meno preciso della cpu di un computer.
Potresti sentir parlare anche di problemi di memoria di Arduino ma, provando a caricare sketch te ne accorgerai che è difficilissimo riempire la memoria Flash, oppure potresti sentir parlare di problemi legati alla RAM ma, anche in questo caso riguarda casi particolari, rari (vettori e stringhe lunghissimi e/o centinaia di variabili da gestire).

fede :ciao .. coome faccio ad utilizzare firmata... ciò ho capito come utilizzare lo "ide" o lo sketch .. nn ho capito come lo chiamate... ma nn firmata e quindi lasciare al pc il compito di fare i calcoli ecc... Giorgia: io sto facendo come dice federico un programmino semplice di "lettura" di variabili analogiche o stati digitali, e qunado voglio io le interrogo da pc....

Federico ti ringrazio tantissimo! Pensavo ci fossero dei vantaggi evidenti di cui, per l'inesperienza, non ero a conoscenza... dadebo1: il firmata di cui parlavo con Federico serve per stabilire una comunicazione tra Arduino e Processing. Come spiega bene Federico, scrivendo gli sketch in Processing, Arduino diventa una periferica del tuo pc e le istruzioni vengono eseguite dal microprocessore del tuo pc. Cmq lo standard_firmata.pde lo trovi nel secondo file. zip di questa pagina http://www.arduino.cc/playground/Interfacing/Processing. Per programmare la scheda Arduino utilizzando Processing, dovrai caricare dall'IDE di Arduino standard_firmata.pde e fare l'upload sulla scheda. A questo punto potrai programmare Arduino scrivendo uno sketch in Processing... non so se erano queste le info che cercavi......

Ciao Giorgia e dadebo...

anche io utilizzo arduino per scambiare dati con il pc (uso un programma java per elaborare i dati che arrivano).

Ho utilizzato inizialmente lo scambio dati con USB, ma da poco sono riuscito anche ad utilizzare lo shield ethernet. Se vi servisse qualche consiglio, eccomi a vostra disposizione, ciao ciao.

Francesco

grazie francesco. faccio altro topic per nn intasare quello di giorgia

Non vi preoccupate l'argomento interesserebbe anche a me! Cmq grazie a tutti per la disponibilità!

Buongiorno! Francesco una domanda: sarebbe possibile aggiornare i dati o cmq caricare un nuovo sketch sulla scheda Arduino tramite internet utilizzando lo lo shield ethernet? Grazie in anticipo!

Ciao giorgia,

devo verificare una cosa oggi pomeriggio sul caricamento del programma in arduino lasciando collegato solo il cavo ethernet, poi ti faccio sapere.

Cosa intendi per aggiornare i dati? Ogni volta che modifichi uno sketch, devi ricaricarlo integralmente su arduino.

Un'altra cosa... quando dici "tramite internet" intendi caricare lo sketch stando ad esempio in un altro ufficio o semplicemente usando il cavo ethernet anzichè l'usb?

Ciao! per aggiornare i dati intendevo proprio caricare un altro sketch e con "tramite internet" intendevo proprio la possibilità di caricare lo sketch stando in un altro ufficio...ma mi sa che non è possibile....

Risposta 1: per caricare uno sketch proverò più tardi, ma credo sia possibile caricarlo con la sola ethernet. (devo provare dato che di solito lascio collegato sia l'usb che il cavo ethernet). Il motivo per cui lascio collegato entrambi è per verificare col serial monitor, se i dati che vengono inviati da arduino sono gli stessi.

Serial.println(stringa);   //invio dati su seriale
client.println(sringa);    //invio dati su ethernet

Risposta 2: Non credo si possa, ma non ti dò la certezza della mia risposta. Spero che qualcuno possa darti una risposta + esauriente della mia!

ciao ;)

Francesco abbi piretà... ;D per interfacciare arduino e java hai utilizzato quanto viene detto in questa pagina http://www.arduino.cc/playground/Interfacing/Java? Scusami ma più vado avanti più ho dubbi!

Sono quasi San Francesco :D!!!

Non ho guardato quella pagina, ma qualcosa di utile c'è.

Usi windows o linux? Io linux...

Questo è fondamentale per ricevere i dati da seriale.

import gnu.io.CommPortIdentifier;

import gnu.io.SerialPort;

import java.io.InputStream;

import java.io.OutputStream;

import processing.app.Preferences;

public class Test {

    static InputStream input;
    static OutputStream output;

      public static void main(String[] args) throws Exception{

            Preferences.init();
            System.out.println("Using port: " + Preferences.get("serial.port"));

            CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(
                        Preferences.get("serial.port"));

            SerialPort port = (SerialPort)portId.open("serial madness", 4000);
        input = port.getInputStream();
        output = port.getOutputStream();
        port.setSerialPortParams(
                        Preferences.getInteger("serial.debug_rate"),
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
            while(true){
                  while (input.available()>0)
                        System.out.print((char)(input.read()));
            }
      }

}

Infatti in questo modo vengono configurate le impostazioni in java per comunicare con arduino.

Sappi che se poi vorrai gestire con java i dati provenienti da arduino non via usb, ma via ethernet, queste istruzioni non serviranno più...

il consiglio che ti posso dare comunque è quello di utilizzare dapprima lo scambio dati via usb... Una volta che passi ad usare ethernet inizia il casino... con gli odiati thread.

dimenticavo... vedi tutte le librerie che importa nelle prime righe di codice?

Devi scaricare la libreria librxtx (se hai linux, scrivilo nel gestore pacchetti) e anche alcune altre... che non ricordo + da dove avevo scaricato... ma vedrò di recuperare il sito!!

Dato che ci sono, ti ho recuperato dal mio programma quanto avevo scritto per ricevere dati via usb con arduino:

//Configurazione parametri connessione con arduino
        String portName     = "/dev/ttyUSB0";  //controllare il nome nell'IDE di arduino
        int portRate        = 9600;            //bit per secondo
        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);

Sicuramente ti sarà più di aiuto questo che quello che c'è scritto nel post precedente

Sei proprio San Francesco!!!! ;) Non so come ringraziarti per la disponibilità, cmq ora mi documento e poi inizierò a programmare! Grazie ancora!