Show Posts
Pages: 1 ... 6 7 [8] 9 10 ... 25
106  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 19, 2013, 04:30:36 am
Rieccomi, fatti gli aggiornamenti suggeriti, mi ero impantanato nelle nidificazioni ma il zio Leouz mi ha salvato  smiley-red

In ogni caso, in allegato l'aggiornamento.

Grazie Lesto.

P. S. File aggiornato anche nel primo post.
107  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 19, 2013, 04:09:26 am
A proposito dei sensori di livello...
Vorrei ricordarvi che un ventina di pagine fa, grazie alla pazienza del buon Menniti in particolare e di altri sono riuscito ad usare questo sensore:

http://www.milonetech.com/uploads/eTape_Datasheet_12110215TC-8_040213.pdf

collegato a questo circuitino



A parte un sensore arrivato difettoso ma sostituito subito con altri due e gratuitamente dalla milonetch stessa (alla fine poi col circuitino di cui sopra si può usare tranquillamente anche quello difettoso  smiley-eek-blue ), si è rilevato ottimo al punto che poi lavorandoci sopra parecchio ho tirato fuori tutte le letture che vedete nel foglio 2 di questo link:

https://docs.google.com/spreadsheet/ccc?key=0Ah2GzeM3ZZu4dFg5cmRxVUVyQ2FpMFBtRklDN1JPd2c&usp=sharing#gid=1

Utilizzando questo semplicissimo sketch:

Code:
byte levelsensor = A0;

void setup() {
   Serial.begin(9600);
   analogReference(INTERNAL);
}

void loop() {

  Serial.println(analogRead(levelsensor));
  delay(50);
           
}

A mio avviso è fino ad ora il più performante, il più semplice e fino ad ora il più affidabile che abbia mai provato, questa estate l’ho usato sull’assolatissimo terrazzo di casa mia con tanto di patinella algale sopra e continuava a fare il suo dovere… purtroppo non è molto economico…
Ma offre lettura analogica in continuo e regolando con il multigiri, anche una precisione se vogliamo anche eccesiva per un’acquario, se leggete il foglio di lavoro linkato sopra, si arriva in analogico ad una rampa più o meno ogni circa 0,016 cm nell’intervallo che va da 3 a 20 cm.
Va da se che poi ci fai sopra il codice che ti pare offrendo la possibilita di schedulare cambi acqua nel tempo e nelle quantità che ti pare offrendo possibilità a iosa all’utente senza stare li a mettere in continuazione le mani in acqua per regolare galleggianti o reed o manutenere in continuo… Ma anche senza improvvisarsi hobbisti estremi impermeabilizzando con resine o usando materiali antiossido come acciaio o simili.
Purtroppo per il momento ho dovuto mettere nel cassetto tutto perché sto rifacendo tutta la vasca a partire dal reincollaggio delle lastre e siccome ho poco tempo libero ci sto mettendo decisamente troppo tempo  smiley-sweat
Ma tent’é a mio avviso personale avviso questo sensore è fino ad ora la soluzione migliore.
Ciaoooo  smiley

Riccardo.
108  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 19, 2013, 02:30:50 am
Ragazzi non sono riuscito a trovare il diodo 1n4... esiste un codice piu specifico?

Hai ragione, la sigla si riferisce come dice Lesto ad una serie di diodi, nel nostro caso è sufficiente un 1n4001.
Grazie per la segnalazione, ho corretto anche l'elenco.

Riccardo.
109  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 16, 2013, 07:54:21 am
Per un amatore che si diverte con Arduino, le dimensioni della versione free (1 schematic sheet, 2 signal layers, 100x80mm routing area) non sono un problema, ci fai tranquillamente gli shield. smiley
Se hai necessità di disegnare piastre più complesse ... non sei già più un amatore che gioca con Arduino ... e comunque hai la versione "EAGLE Hobbyist" (99 schematic sheets, 6 signal layers, 160x100mm routing area) che costa 140 €  ... direi una cifra onestissima per un prodotto professionale ! smiley-wink

Guglielmo

Ciao Guglielmo,
questo è stato il mio hello world con i pcb: http://forum.arduino.cc/index.php?topic=128951.0
 e questo è il risultato:

a causa dei componenti scelti, non stavo nei 100x80 nemmeno se facevo due file da 4...
come vedi a volte anche cose semplici richiedono dimensioni che eccedono le specifiche della versione free di eagle che ti dico mi piace tantissimo bada bene...
Ora poi con i ragazzi che mi aiutano, sempre tempo permettendo, vorremmo arrivare ad una versione definitiva del controller così ho disegnato un abbozzo di come potrebbe essere con l'idea di farlo a piccoli moduli montati verticalmente su una specie di main board, appunto per poter avere la possibilità di sostituire facilmente le parti che si rompono:



E' solo una prima idea e staremmo per orientarci appunto sul Nano perché facilmente lo stacchi lo aggiorni e lo rimonti, ma tant'è se pure intraprendiamo questa strada non credo che pure quì potremo mai rimanere nei 100x80 ecco perché sto cercando di rimanere nel campo open source per il sw dei pcb.

Se hai necessità di disegnare piastre più complesse ... non sei già più un amatore che gioca con Arduino ... e comunque hai la versione "EAGLE Hobbyist" (99 schematic sheets, 6 signal layers, 160x100mm routing area) che costa 140 €  ... direi una cifra onestissima per un prodotto professionale ! smiley-wink
Guglielmo

più che onesta.. sw come autocad e simili le versioni base partono da 1k€

Assolutamente si, il fatto è che bisogna averli... mi finanziate voi???  smiley-lol smiley-lol smiley-lol

Ciaoooo  smiley
110  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 16, 2013, 05:09:39 am
Ricci, come lo collego all'IC5 che trovo nello schema???
allego la foto dei piedini....
grazie...

Dalla foto non capisco cosa sia il piedino Com, ma vedo che c'è un poticello con la GND, in linea di massima in ogni caso a VCC connetti i +12v, a GND non te lo dico nemmeno, attento che ci devi connettere anche la GND di Arduino però, poi ogni piedino è un relé, esattamente come le uscite Yn dell'IC5, rispetta l'ordine ed è fatta.

Lasciate stare Fritzing ... è per giocare ...
... se dovete veramente avete passione per queste cose, imparate ad usare un vero prodotto professionale per il disegno degli schemi e dei circuiti stampati : Eagle.

La versione per uso privato, con alcune limitazioni sulle dimensioni della scheda che potete produrre, è gratuita !

Guglielmo

Sono daccordo su Fritzing, è molto immediato, ma rimane un'utile strumento per i disegni dei tutorial e basta, Eagle è decisamente meglio, ma le limitazioni sulle dimensioni del PCB sono una bella rogna  smiley-confuse

oppure kicad, opensource e gratis

Kicad, lo ho usato fino ad ora per disegnare lo schema, ma quando o provato a passare al PCB, mi sono trovato un pò in difficoltà, mi ci devo dedicare meglio, per poter rimanere in ambito Open Source, vedremo...
111  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 16, 2013, 02:34:47 am
è possibile che dal momento in cui fai la richiesta, e arrivi a chiamare available() siano già arrivati i dati (anzi, molto probabile)

Se avaiiable è così veloce, vale a dire che:

Code:
if (millis()-time > TIMEOUT)
timeout = true;
}

in condizioni normali non si verifica mai, ovvero anche se metto TIMEOUT=0 restituendo anche "millis()-time" sempre 0 non va in errore...
Ho provato allora ad usare il confronto ">=":

Code:
if (millis()-time >= TIMEOUT)
timeout = true;
}

E sempre TIMEOUT=0, stavolta lo sono proprio andato a cercare l'errore, ma continua a funzionare perfettamente, quindi seppure sia probabilmente vero che i dati siano veloci ad arrivare, credo ci sia un'errore logico nel programma che lo fa funzionare a prescindere, ma proprio non riesco a vederlo  smiley-confuse

Quote
come può un'assegnazione contenere un operatore di confronto
no, lui sta assegnando il RISULTATO di un'operazione di confronto, che può essere vera o falsa, ovvero un boolean (che poi è un byte: 0 = false, qualsiasi altro numero = true  smiley-mr-green)

Code:
timeout = millis()-time > TIMEOUT;

Mai vista una cosa del genere  smiley-red
Sarà l'impressione mia ovvero quella di un aspirante programmatore sbarbatello ma è poco chiara e fuorviante...

Ciao e grazie ancora.
112  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 15, 2013, 02:43:13 pm
Allora, fatto i compitini, letto il link e fatta pure qualche divisione binaria, scusa, ma devo toccare ed imparare praticando...
Poi abbiamo apportato le tue modifiche:

Code:
float LM7792::lmread(uint8_t reg){ // To read single internal register or paramenter set point of the sensor

Wire.beginTransmission(_lmind);
Wire.write(reg);
Wire.endTransmission();

Wire.requestFrom(_lmind, fullreg);

unsigned long time = millis();
boolean timeout = false;


while(Wire.available()==0 && !timeout) {
if (millis()-time > TIMEOUT)
timeout = true;
}
if (!timeout) {
_msbyte = Wire.read();
time = millis();
while(Wire.available()==0 && !timeout){
if (millis()-time > TIMEOUT)
timeout = true;
}

if (!timeout) {
_lsbyte = Wire.read();
int16_t ris = _msbyte<<8|_lsbyte;
ris /= 8;
float scanreg = (float)ris * _lsb;
return scanreg;
}
}
return 999; // Return an error value
}

TIMEOUT è dichiarata nelle classi...

Per provare a generare un'errore ho proato a mettere a zero proprio TIMEOUT, ed ha continuato a funzionare alla grande  smiley-eek-blue come è possibile?
Mi ci sono rotto la testa ma sicuramnte sono troppo scarso per capire   smiley-red

Altra domanda:
Come da te suggerito ho usato le if per assegnare timeout,
Code:
if (millis()-time > TIMEOUT)
timeout = true;
Leouz invece ha usato quest'altro tipo di riga di comando (viene compilata senza errore)
Code:
timeout = millis()-time > TIMEOUT;
al posto delle if di cui sopra, ma...
come può un'assegnazione contenere un operatore di confronto?
Come fa a funzionare sta cosa?

Grazie in anticipo...

P.S. Ho messo la libreria aggiornata in allegato.

113  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 14, 2013, 06:01:04 pm
Grazie Lesto,
Ora mi è chiaro, con Leouz ora apporteremo le modifiche che ci hai suggerito.
Ciao e grazie ancora
114  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 14, 2013, 02:03:45 pm
Code:
Wire.requestFrom(_lmind, fullreg);

unsigned long time = millis();
boolean timeout = false;

while(Wire.available()==0 && !timeout){
if (millis()-time > TIMEOUT){
timeout = true;
}
}
if (!timeout){
_msbyte = Wire.read();

        time = millis();
while(Wire.available()==0 && millis()-time < TIMEOUT){
if (millis()-time > TIMEOUT){
timeout = true;
}
}
if (!timeout){
_lsbyte = Wire.read();
float scanreg;
scanreg = (_msbyte<<8|_lsbyte)>>3;
scanreg = scanreg*_lsb;
return scanreg;
}
}
        return ERRORE;
[/quote]

Dunque, se ben capisco usi TIMEOUT per controllare la lettura dei due byte, solo che leggendo i data sheet dei due sensori, pag 5 per LM77 e pag 6 per LM92, intendo le tabelle dei timing non riesco a capire quale dovrebbe essere questo valore.
In pratica occorrono 2,5 us per un ciclo di clock SCL, quindi se vado a vedere i timing di lettura dei registri pag 15 e 16 dei rispettivi sensori vedo che per leggere MSB o LSB occorrono 9 cicli di SCL pari a 22,5us ovvero meno di un millisecondo, vale a dire che TIMEOUT a questo punto può valere solo 1  smiley-eek Ho capito bene o sono partito per la tangente?   smiley-roll-sweat

Quote
mi lascia un pò perplesso al momento
ERRORE è una variabile/costante che devi definire te. per esempio, se il sensore va da -100 a +100 gradi, allora un buona valore di errore può essere -1000 o +1000
Una soluzione più pulità è che la read ritorna l'ultima temperatura letta, e per aggiornala chiami una funzione update() che ritorna 0 se ha successo, e un codice di errore in altri casi.

Scusa ma continuo a non capire  smiley-red ammesso di fare un merge delle caratteristiche dei due sensori e stabilire un range di misurazione unico per entrambi che vada -25 a +125, come può una variabile/costante che può essere + o - un valore, rappresentare un errore? mi spieghi meglio per favore?


115  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 13, 2013, 06:19:38 am
identazione errata; in oltre bruuuuutta cosa usare while infiniti

Ehm... si l'indentazione non è un granché, uso Notepad come editor e le tabulazioni quando si passa allo SPARTANISSIMO IDE di Arduino vanno farsi benedire, ma perché errata?

Sugli while invece mi inchino, mi funzionavano e li ho lasciati così  smiley-red

farò le correzioni che mi hai suggerito, ma
Code:
return ERRORE
mi lascia un pò perplesso al momento, ci ragiono un pò sù... nel caso alzo bandiera bianca e ti chiedo meglio

ok, i due chip non hanno la propria "firma" ma è da specificare lato utente...

però ho controllato, e c'è qualche problema con la converiosne.

prendiamo la temperaatura di -1:
1111111111111000 (i 3 bit più a destra sono allarmi) ( se ti stai chiedendo perchè -1 è tutti 1, vedi come funziona il complemento a due)

col tuo sistema
scanreg = (_msbyte<<8|_lsbyte)>>3;
stai mettendo il valore errato:
(_msbyte<<8|_lsbyte) == 1111111111111000 (ok)
>>3 == 0001111111111111

NON ok! come vedi hai spostato il bit di segno, creando un bel macello (da bit di segno è diventato bit ti potenza, e poi il complemento a due non traslato per i positivi incasina ulteriormente). la cosa migliore è;
1. passare per un int16_t per evitare di fare casini con piattaforme che usano int di diversa dimensione in byte (okok, paranoia mia essendo quelli sistemi a 64bit):
Code:
int16_t ris = _msbyte<<8;
ris |= _lsbyte;
poi a questo punto, abbiamo tenuto conto dei 3 bit balordi... se però sfiftiamo a sinistra incasiniamo il bit di segno... quindi?
bhe, visto che noi sapopiamo che un bit vale quanto 2 elevato alla sua posizione a partire da destra, sappiamo che sciftare a destra equivale ad una divisione; e la divisione tiene conto del bit di segno senza "rovinarlo"! (certo il numero va troncato della parte decimale, che rappresenta i bit eliminati)
ris>>0 = ris/1
ris>>1 = ris/2
ris>>2 = ris/4
ris>>3 = ris/8
quindi
Code:
ris /= 8; //dato che ris è int, la parte decimale viene troncata

ora possiamo convertire gli LSB nella unità di misura desiderata, nel nostro caso moltiplicando per _lsb; però vogliamo conservare la parte decimale, quindi dovremo fare attenzione che una delle due variabili (ris o _lsb) sia float, altrimenti l'operazione avvien tra interi (parte decimale troncata) e POI messa in un float. Poichè nel nostro caso _lsb è già float andiamo tranquilli:
Code:
scanreg = ris * _lsb;

se anche _lsb fosse stata int o long, allora bastava convertire una delle variabili in float;
Code:
scanreg = (float)ris * _lsb;
oppure
scanreg = ris * (float)_lsb;
oppure tutte e due (che poi è quello che succede internamente)
scanreg = (float)ris * (float)_lsb;

maggiori info su questultima parte di cast vedi "conversione di tipo" http://it.wikipedia.org/wiki/Conversione_di_tipo (quella inglese è più particolareggiata e mostra anche le differenza tra vari linguaggi)

Si la firma non la hanno, ed il registro 0x00 è quello della temperatura, altrimenti me lo sarei evitato, per ciò che riguarda invece l'aritmetica binaria invece confesso di aver passato le ultime due settimane a studiarla, compreso il complemento a 2, solo che poi da programmatore (che parolone nel mi o caso) sbarbatello come sono non ho tenuto conto delle temperature negative...
Confesso pure che magari seppure ne avessi tenuto conto, prima di arrivare a scrivere di testa mia i tuoi suggeriementi avrei perso altre due settimane come minimo...
Torno a studiare che è meglio...

Grazie per il tempo che ci hai dedicato  smiley-confuse
116  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 13, 2013, 02:08:12 am
Magari lo saprete anche, ma si risparmiano diverse centinaia di byte usando gli accessi diretti ai registri di sistema al posto delle digitalWrite e delle digitalRead. Per le letture analogiche c'è la possibilità di fare altrettanto, anche se è un pò più complesso che nel precedente caso.

io farei così
un file config.h con dentro le impostazioni dei pin (valori a caso)
Code:
#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    const int pinInput1 = 10;
    const int pinInputSCL = A5;
    const int pinInputSDA = A6;
#else
    // here if not ATmega8 or ATmega128
    const int pinInput1 = 21;
    const int pinInputSCL = A0;
    const int pinInputSDA = A1;
#endif   

ovviamente tutti i pin usati devono essere mappati quì dentro, questo ovviamente è possibile solo se tutte le board eseguono lo stesso codice, e quindi hanno le stesse capacità hardware, solo che è su pin differtenti.

Belle dritte, grazie a tutti e due, approfondirò meglio...
Vi va, senza impegno naturalmente, di dare un'occhiata al volo alla libreria che abbiamo scritto io e Leouz almeno per qualche consiglio su come è stata impostata?

http://forum.arduino.cc/index.php?topic=198456.0

La metto in allegato anche qui.
Grazie in anticipo  smiley


@ Leo72
OT Leggo spesso i tuoi articoli, imparo molto da te grazie per gli insegnamenti e per quel pizzico di allegria che mi hai regalato con l'articolo sulla sindrome di Gundam  smiley-lol  smiley-lol  smiley-lol mi ci sono riconosciuto in pieno, almeno per come ho iniziato un paio di anni fa...  smiley-grin smiley-grin smiley-grin Poi però mi sono messo sotto con risultati non proprio eccellentissimi, ma tant'é a piccoli passi piano piano arrivo pure io  smiley-sweat



Dovrebbe andare bene, in uscita dall'IC inveter (74HC540N) da data sheet abbiamo +/- 35mA sufficienti a pilotare i singoli relé.

Ciao a tutti.

Riccardo
117  International / Software / Re: Liberia per sensori di temperatura T.I. LM 77/92 on: November 12, 2013, 01:59:54 pm
Ne ho fatta un'altra delle mie...
ho messo i link nelle librerie e non nel topic...  smiley-red

Grazie PaoloP
118  International / Software / Liberia per sensori di temperatura T.I. LM 77/92 on: November 11, 2013, 02:15:43 pm
Ciao a tutti,
ho scritto la mia prima libreria...
L'ho scritta insieme a Leouz per i sensori in oggetto, perché mi piacevano e li vorrei utilizzare nel mio progetto.
Sono molto performanti e permettono di far risparmiare un bel pò di codice nei progetti con controllo di temperatura, ovviamente sono I2C... la mia passione!!!
L'ho scitta volutamente per un utilizzo molto easy del sensore, quindi niente letture di pin di interrupt, perché vorrei trasformare il sensore in questione in una sonda waterproof, quindi spero cavarmela con soli 4 pin/fili, ovviamente più avanti posterò anche la parte hardware con I2C expander, ma per questo è presto, ancora non sono ben attrezzato.

Ed ecco le domande che preludono al massacro...

Suggerimenti?
Critiche?
Cestino tutto che e meglio?

Va bhe non la sto a menare tanto a lungo, ma ripeto è la mia prima, quindi andateci piano, ho imparato (forse) cosa è una classe la settimana scorsa (fino ad ora avevo frequentato solo quelle dei miei figli  smiley-red).

Ciao Riccardo

P.S. Il file è in allegato. (per quelli un pò più dummies di me che già porto la bandiera)

119  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 07, 2013, 04:48:14 am
Quanto spazio vi resta libero nella flash?
Se ci fosse almeno qualche KB, si potrebbe implementare uno scheduler semplicissimo che ad un determinato orario si attiva e fa la rampa in salita verso il giorno in un periodo di tempo prestabilito e poi ad un altro orario attiva la rampa di disceva verso la notte.
Ciao Leo, questo lo sketch già lo fa, si parlava piuttosto dell'idea di lesto di far in modo che le rampe somigliassero il più possibile all'andamento della luminosità naturale, mettendole in relazione anche all'andamento delle stagioni.
Solo che per il momento non posso fare altro che sopprassedere almeno finché non finisco il tutto e posso in base ai limiti di Arduino che raggiungo decidere cos'altro implementare...  smiley-neutral

Perche' vuoi usare un'acquario per allevarci topi biologici ?
( smiley-razz smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol )

ROTFL
120  International / Megatopic / Re: Ardu-Acquarium Controller v. 3.0 on: November 06, 2013, 12:51:45 pm
immagino che per le alghe il fotoperiodo sia importante
E non sai quanto, oltre al fatto che tale foto periodo va effettuato con illuminazione atta ad imitare nel modo piu vicino possibile lo spettro solare, cosa impossibile, ma ci si può avvicinare.
Voglio pero aggiungere un concetto che lexip non considera e che di fatto è alla base della filosofia dell'avere un'acquario ed è che un acquario in quanto tale, dovrebbe in tutto e per tutto rappresenare un biotopo, che sia amazzonico, indonesiano africano o quello che si vuole; alla base del concetto di biotopo poi c'è che in tutto e per tutto si cerca nei limiti del possibile di ricrearlo anche nelle condizioni ambientali ed ecco che anche l'andamento della curva dell'illuminazione viene ad avere il suo peso.
Tutto questo per dire che non c'è solo l'aspetto ornamentale o l'effetto ricercato a gusto personale in un acquario e per quanto possano alcune cose sembrare superflue ti assicuro che sul lungo periodo poi non lo sono affatto.
Poche persone si dedicano effettivamente ad un acquario con questo piglio, di fatto in effetti moltissimi acquari sembrano più luna park (forzieri, galeoni colonne e scheletri a più non posso) o piccole babele pescifere con accostamenti di pesci che il più delle volte vivono o vivrebbero agli antipodi del pianeta in condizioni altrettanto diverse, ma se è vero che alla fine, in ogni caso, si deve obtorto collo fare i conti con i limiti di Arduino (detto lo strizzato  smiley-eek ), valutare le possibilità o le strade perscorribili non ha mai fatto male a nessuno, benvengano quindi tutti i suggeriementi, le idee e le considerazioni.

Ciaooooo
Pages: 1 ... 6 7 [8] 9 10 ... 25