Sensori wireless senza arduino!

Sempre nell'intento di giocare con la meteorologia, e con la necessità di voler risparmiare qualche cosa, mi chiedevo se vi fosse la possibilità di connettere sensori all'arduino via wireless:

Sensore + xbee <--> xbee + arduino.

Ora come ora la cosa potrei risolverla interponendo tra il sensore e il modulo xbee un arduino. Vorrei risparmiare questo costo!

Si potrebbero sfruttare gli ingressi dell'xbee. In rete ho trovato un esempio su come collegare in tal maniera un LM35: Wireless Temperature Sensor | Project Lab

Ora, sinceramente questo sensore non mi piace più di tanto, vorrei di meglio, come il DS18b20 oppure, meglio ancora, l'SHT75. Questi due sensori sfruttano una comunicazione digitale duplex.

Da quello che ho capito i moduli xbee possono essere programmati per inviare e ricevere segnali digitali, ma non possono essere configurati per un tipo di comunicazione duplex: o input o output. Sempre che ciò sia connesso, come poter superare questo ostacolo?

1)DS18B20 http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf
Tutta la comunicazione si sviluppa su un solo pin

2)SHT75 http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT7x.pdf

Pin Name Comment
1 SCK Serial Clock, input only
2 VDD Source Voltage
3 GND Ground
4 DATA Serial Data, bidirectional

Che ne pensate voi? Irrealizzabile?

Sí, alla seriale TTL del XBee puoi collegare qualsiasi dispositivo seriale con livelli logici TTL. I moduli Xbee hanno inoltre anche entrate e uscite digitali che possono essere lette e scritte con comandi apositi.
Ciaoo Uwe

Il livello TTL, per definizione, ha la tensione dell'1 logico fino a 5V, i moduli Xbee NON sono 5 V tolerant.
Tutti gli ingressi degli Xbee al massimo accettano una tensione pari a quella di alimentazione del modulo stesso, tipicamente 3.3V, applicare 5V agli ingressi può causare danni irreversibili.
Il modo più semplice per collegarsi all'ingresso DIN (Rx) degli Xbee con una sorgente a livelli TTL è usare un partitore resistivo con rapporto 2/3, vanno benissimo due resistenze da 18k e 10k, la 18k in parallelo a DIN.

Stavo per metterci mano in modo da fare qualche prova, qualche dritta mi è molto utile (grazie!), ovviamente poi vi metterei a conoscenza dei risultati. Non capisco in ogni caso una cosa, i pin di comunicazione digitale dei due sensori, sono vere e proprie seriali?

In ogni caso i due sensori possono funzionare anche a 3,3V, per cui penso che il problema dei 5V è già risolto.

uups, sono stato poco attento; grazie astrobeed per la correzione.
Ciao Uwe

GianfrancoPa:
Non capisco in ogni caso una cosa, i pin di comunicazione digitale dei due sensori, sono vere e proprie seriali?

Anche se la trasmissione è di tipo seriale non seguono il protocollo UART, il primo è di onewire, il secondo è una seriale sincrona compatibile col bus I2C come hardware ma non come protocollo.
Non è possibile in nessun modo collegare i due sensori direttamente ad un Xbee.
Per quanto riguarda LM35 puoi collegarlo direttamente ad un ingresso ADC del Xbee e trasmettere in automatico le letture sia sotto forma di stringa dati, però arriva nel formato API degli Xbee e tocca interpretarla, che sotto forma di segnale PWM che può essere convertito in una tensione analogica o letto direttamente.
Secondo me ti conviene usare un micro per leggere i tre sensori e poi inviare i valori in formato binario o ASCII tramite UART via Xbee.

Proprio questo temevo! In ogni caso non conosco altre maniere se non usare l'arduino. Posso provare a realizzare una configurazione minimale, ma in ogni caso sarebbe un super spreco per il lavoro che deve fare. Penso che in giro ci siano alternative piu' adatte!

In ogni caso vi tengo informati. E grazie!!

Non è che devi usare un Arduino intero, ti basta solo l'ATmega 328, ma anche un modello più piccolo, senza quarzo, (tocca attivare l'oscillatore RC interno), come componenti esterni ti servono solo qualche resistenza e qualche condensatore, il tutto lo monti senza problemi su una mille fori.

Certo!! Avevo intenzione di usare una configurazione del genere. Ci studio su, anche perchè non ho mai realizzato un Arduino di quel tipo, buona scusa per provarci!

In ogni caso usare l'arduino puo' introdurre molti vantaggi, come possibilità di usare più sensori, possibilità di gestire la memoria quando la comunicazione viene persa, etc.

Primo passo: realizzare arduino

Al momento attendo dei pezzi che mi mancano, a giorni dovrebbero arrivare e quindi comincerò a fare delle prove. In ogni caso, per preservare la batteria il più possibile, ho visto con interesse la possibilità di "addormentare" l'arduino a seconda delle proprie esigenze. Qui ho trovato un pò di codice:

http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/

Non l'Arduino, ma l'Atmega. Difatti l'articolo lo dice anche esplicitamente che alcuni componenti dell'Arduino consumano anche se i uC è in sleep mode.

Si, leggendo il datasheet dell'arduino ho visto come vi sono diverse modalità, tutte interessanti, ma un pò ostiche da implementare. La tua osservazione è corretta, spero di fare le opportune verifiche quanto prima

Ma la differenza tra un Arduino corredato di clock esterno a 16k, ed uno che sfrutta il clock interno da 8k, quali differenze ci sono? Se non ricordo male il clock interno è meno preciso ed ovviamente consente di effettuare la metà delle operazioni per unità di tempo. In fondo il clock non costa molto, secondo voi ne vale la pena di ricorrere al clock interno?

Se parliamo di Arduino non credo si possa usare l'oscillatore interno da 8 MHz perché tutto l'Arduino è impostato per lavorare a 16 MHz (anche il micro Atmega8U2 lavora a 16 MHz, ci sarebbero problemi di sincronizzazione fra i 2 micro) e lo stesso bootloader è impostato prendendo come riferimento un clock di 16 MHz.

Se parliamo di Atmega "solitario", allora è possibile usare sia clock esterni (20 MHz max) che l'oscillatore interno, basta impostare i fuse. Ovviamente dipende tutto da quello che uno deve fare: ci sono compiti per i quali anche 8 MHz sono più che sufficienti (ad esempio leggere l'orario da un RTC e visualizzarlo su un LCD), altri in cui non bastano neanche i 20 MHz.

Mi sono espresso male, parlo di ATmega solitario, non tutto il pacchetto Arduino. Basterebbe caricargli il bootloader adatto per farlo andare ad 8 mhz? Sinceramente ho letto che programmare i fuse è rischioso e sbagliare potrebbe rendere inutizzabile l'ATmega, per cui non vorrei rischiare...

Alla fine dovrei utilizzare qualche sensore (temperatura, umidità, pluviometro, anemometro), sfruttare la comunicazione seriale (cavo o Xbee), non credo altro. Penso che gli 8 Mhz possano bastare.

In ogni caso facendolo girare a 8Mhz, consumerebbe di meno?

Sbagliare la programmazione dei fuse richiede solo una nuova riprogrammazione per rimettere le cose a posto. Non è che bruci il micro.