SKETCH 1 - prove di comunicazione I
Prima di iniziare procuriamoci il protocollo di comunicazione LX200.
Cos'è un protocollo di comunicazione? Si tratta di un insieme di procedure o comandi standard di comunicazione che permette a due o più dispositivi di "intendere le stesse cose" quando dialogano tra loro. Passiamo ora allo sketch vero e proprio.
ATTENZIONE: per affrontare questa parte, do per acquisite le conoscenze di base per la programmazione di arduino, è impensabile iniziare un progetto di questo tipo senza aver mai programmato arduino. Pertanto se vi fossero delle lacune in merito, è opportuno iniziare un corso di base sulla programmazione di arduino. Nel web ci sono molti corsi gratuiti.
Qui di seguito c'è il primo sketch che farà simulare ad arduino un telescopio orientato verso un punto fisso avente coordinate AR: 0h 00m 0.0s e DEC: +45 00' 00.0''
In fondo allo Sketch c'è la possibilità di scaricarlo direttamente nel formato .ino, mentre poco più in basso è possibile scaricare una copia del file di log generato da stellarium. Preciso subito che tutti gli Sketch presentati in questo sito sono con licenza libera, quindi potete copiarli, modificarli a vostro piacimento e diffonderli. Gli Sketch hanno solo scopo didattico e non commerciale, non mi rendo pertanto responsabile di eventuali malfunzionamenti, danni a cose o persone derivanti da un loro uso.
Prima di iniziare procuriamoci il protocollo di comunicazione LX200.
Cos'è un protocollo di comunicazione? Si tratta di un insieme di procedure o comandi standard di comunicazione che permette a due o più dispositivi di "intendere le stesse cose" quando dialogano tra loro. Passiamo ora allo sketch vero e proprio.
ATTENZIONE: per affrontare questa parte, do per acquisite le conoscenze di base per la programmazione di arduino, è impensabile iniziare un progetto di questo tipo senza aver mai programmato arduino. Pertanto se vi fossero delle lacune in merito, è opportuno iniziare un corso di base sulla programmazione di arduino. Nel web ci sono molti corsi gratuiti.
Qui di seguito c'è il primo sketch che farà simulare ad arduino un telescopio orientato verso un punto fisso avente coordinate AR: 0h 00m 0.0s e DEC: +45 00' 00.0''
In fondo allo Sketch c'è la possibilità di scaricarlo direttamente nel formato .ino, mentre poco più in basso è possibile scaricare una copia del file di log generato da stellarium. Preciso subito che tutti gli Sketch presentati in questo sito sono con licenza libera, quindi potete copiarli, modificarli a vostro piacimento e diffonderli. Gli Sketch hanno solo scopo didattico e non commerciale, non mi rendo pertanto responsabile di eventuali malfunzionamenti, danni a cose o persone derivanti da un loro uso.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Created 19 March 2014 * * by EDC * * http://epsilonphoto.weebly.com/ * * * * This program is free software, you can redistribute it and/or modify. * * Is in the public domain, it only has a didactic purpose and you can modify it * * to your liking. I do not provide any guarantee for any damage it may cause * * to property or persons. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ String inputString = ""; //dichiaro una stringa vuota per memorizzare i dati in entrata void setup() { Serial.begin(9600); } void loop() { while (Serial.available()>0){ // ottiene byte in entrata char inChar = Serial.read(); // legge il byte e lo memorizza nella variabile inChar inputString += String(inChar); // aggiunge il byte corrente a inputString delay(5); } if (inputString == "#:GR#"){ // se il comando ricevuto da stellarium è #:GR# (coordinata di AR) Serial.print ("00"); // invia a stellarium il valore della coordinata AR: 00h Serial.print (":"); Serial.print ("00"); // invia a stellarium il valore della coordinata AR: 00m Serial.print (":"); Serial.print ("00"); // invia a stellarium il valore della coordinata AR: 00s Serial.print ("#"); inputString = ""; // cancella la stringa } if (inputString == "#:GD#"){ // se il comando ricevuto da stellarium è #:GD# (coordinata di DEC) Serial.print ("+"); // invia a stellarium il segno della coordinata DEC Serial.print ("45"); // invia a stellarium il valore della coordinata DEC: 45° Serial.print ((char)223); // char(223) si usa al posto di * per indicare il grado ° altrimenti ci sarà un errore nel file di log. Serial.print ("00"); // invia a stellarium il valore della coordinata DEC: 00' Serial.print (":"); Serial.print ("00"); // invia a stellarium il valore della coordinata DEC: 00'' Serial.print ("#"); inputString = ""; // cancella la stringa } }
primo_sketch.ino | |
File Size: | 2 kb |
File Type: | ino |
log_telescopeserver1.txt | |
File Size: | 21 kb |
File Type: | txt |
Cerchiamo ora di capire come avviene la comunicazione tra stellarium e un telescopio, in modo da programmare arduino in modo adeguato.
Non commenterò ciascuna riga del programma perché i commenti sono già presenti nelle righe stesse dello Sketch.
In questo sketch si capisce subito l'utilità dell'adozione di un protocollo di comunicazione, in questo caso LX200 della Meade.
Appena connesso Arduino a stellarium, quest'ultimo chiede al telescopio (arduino) le coordinate a cui sta puntando in quel momento. Questa operazione avviene inviando prima il comando #:GR# del protocollo LX200 con il quale chiede la coordinata di Ascensione Retta. La risposta che stellarium si aspetta è del tipo: HH:MM.T# oppure HH:MM:SS# (leggete il pdf del protocollo LX200). Nello sketch i valori delle componenti della coordinata di AR sono inviati singolarmente.
Una volta ottenuti dei valori che stellarium reputa validi, chiede successivamente la coordinata di DEC inviando il comando #:GD#. La risposta che si aspetta è del tipo sDD*MM# oppure sDD*MM’SS# dove "s" è il segno "+" o "-". Qui bisogna fare attenzione con l'asterisco: ho provato ad inviarlo come simbolo, ad esempio +45*00:00#, anche se sembrava funzionare tutto correttamente, leggendo il file di log trovavo scritto questo errore:
Lx200CommandGetDec::readAnswerFromBuffer: error: degree sign expected.
Con l'aiuto degli amici del forum astrofili italiani, è stato risolto il problema: c'era un errore nella codifica del simbolo del grado ° nella coordinata di DEC. Stellarium si aspetta in realtà, l'invio del simbolo in codice ASCII 223 (che corrisponde al carattere ß) attraverso char (vedi sketch).
Perché proprio 223 se il protocollo LX200 chiede un asterisco il cui codice ASCII è 42?
Si tratta probabilmente di un bug dell'attuale versione di stellarium (sto usando la 0.12.4) e già segnalato. Infatti osservando la parte del codice sorgente di stellarium alla riga 496, si nota che il programma si aspetta proprio il codice 223. Bisognerà tenerne conto nelle prossime versioni di stellarium, perché se l'errore verrà corretto bisognerà modificare gli Sketch per arduino.
Ricordo che è importante leggere sempre il file di log perché si vede cosa avviene durante la comunicazione tra i due dispositivi soprattutto se ci sono degli errori. Una copia del mio file di log, come già detto, è scaricabile in questa pagina poco sotto lo Sketch, ma è molto importante che leggiate il vostro file di log. Nella pagina precedente ho spiegato dove viene salvato questo file.
Se stellarium non riceve alcuna risposta, oppure riceve qualcosa di sbagliato, non apparirà sul planetario il mirino arancione del telescopio.
Dopo aver ricevuto la coordinata di DEC, stellarium, per rimanere aggiornato sulla situazione, chiede nuovamente la coordinata di AR e poi ancora quella di DEC e così via a ciclo continuo...
Dopo aver compilato il programma, avviate stellarium, se nella configurazione del telescopio (come indicato nella pagina precedente) avete impostato "Avvia/inizia all'avvio del programma" non serve cliccare sull'icona del telescopio posta in basso, la connessione sarà automatica. Vedrete dopo qualche istante apparire il mirino arancione del telescopio nel punto individuato dalle coordinate che abbiamo imposto nello sketch. Cliccando su di esso appariranno in alto a sinistra le coordinate inviate da arduino.
Ricordo che nei nostri esperimenti di comunicazione tra arduino e stellarium, possiamo usare anche il monitor seriale nell'IDE di arduino, ma non contemporaneamente a stellarium, perché la porta seriale accetta solo un dispositivo alla volta.
Non commenterò ciascuna riga del programma perché i commenti sono già presenti nelle righe stesse dello Sketch.
In questo sketch si capisce subito l'utilità dell'adozione di un protocollo di comunicazione, in questo caso LX200 della Meade.
Appena connesso Arduino a stellarium, quest'ultimo chiede al telescopio (arduino) le coordinate a cui sta puntando in quel momento. Questa operazione avviene inviando prima il comando #:GR# del protocollo LX200 con il quale chiede la coordinata di Ascensione Retta. La risposta che stellarium si aspetta è del tipo: HH:MM.T# oppure HH:MM:SS# (leggete il pdf del protocollo LX200). Nello sketch i valori delle componenti della coordinata di AR sono inviati singolarmente.
Una volta ottenuti dei valori che stellarium reputa validi, chiede successivamente la coordinata di DEC inviando il comando #:GD#. La risposta che si aspetta è del tipo sDD*MM# oppure sDD*MM’SS# dove "s" è il segno "+" o "-". Qui bisogna fare attenzione con l'asterisco: ho provato ad inviarlo come simbolo, ad esempio +45*00:00#, anche se sembrava funzionare tutto correttamente, leggendo il file di log trovavo scritto questo errore:
Lx200CommandGetDec::readAnswerFromBuffer: error: degree sign expected.
Con l'aiuto degli amici del forum astrofili italiani, è stato risolto il problema: c'era un errore nella codifica del simbolo del grado ° nella coordinata di DEC. Stellarium si aspetta in realtà, l'invio del simbolo in codice ASCII 223 (che corrisponde al carattere ß) attraverso char (vedi sketch).
Perché proprio 223 se il protocollo LX200 chiede un asterisco il cui codice ASCII è 42?
Si tratta probabilmente di un bug dell'attuale versione di stellarium (sto usando la 0.12.4) e già segnalato. Infatti osservando la parte del codice sorgente di stellarium alla riga 496, si nota che il programma si aspetta proprio il codice 223. Bisognerà tenerne conto nelle prossime versioni di stellarium, perché se l'errore verrà corretto bisognerà modificare gli Sketch per arduino.
Ricordo che è importante leggere sempre il file di log perché si vede cosa avviene durante la comunicazione tra i due dispositivi soprattutto se ci sono degli errori. Una copia del mio file di log, come già detto, è scaricabile in questa pagina poco sotto lo Sketch, ma è molto importante che leggiate il vostro file di log. Nella pagina precedente ho spiegato dove viene salvato questo file.
Se stellarium non riceve alcuna risposta, oppure riceve qualcosa di sbagliato, non apparirà sul planetario il mirino arancione del telescopio.
Dopo aver ricevuto la coordinata di DEC, stellarium, per rimanere aggiornato sulla situazione, chiede nuovamente la coordinata di AR e poi ancora quella di DEC e così via a ciclo continuo...
Dopo aver compilato il programma, avviate stellarium, se nella configurazione del telescopio (come indicato nella pagina precedente) avete impostato "Avvia/inizia all'avvio del programma" non serve cliccare sull'icona del telescopio posta in basso, la connessione sarà automatica. Vedrete dopo qualche istante apparire il mirino arancione del telescopio nel punto individuato dalle coordinate che abbiamo imposto nello sketch. Cliccando su di esso appariranno in alto a sinistra le coordinate inviate da arduino.
Ricordo che nei nostri esperimenti di comunicazione tra arduino e stellarium, possiamo usare anche il monitor seriale nell'IDE di arduino, ma non contemporaneamente a stellarium, perché la porta seriale accetta solo un dispositivo alla volta.
Siamo pronti a passare al prossimo Sketch...