Go Down

Topic: DOMOTICA: Comunicazione tra arduini tramite RF lowcost (Read 19168 times) previous topic - next topic

GianfrancoPa

Per resettare l'ATmega, necessario prima di caricare gli sketch, infatti dovrai fare un piccola procedura (tenere premuto il pulsante quando carichi il codice, e rilasciarlo non appena vedi che ti mostra la dimensione del codice).

Se non lo metti poi devi giocare con un cavetto "leva e metti", in modo da simulare la pressione del pulsantino
Gianfranco

cavde

ma io avevo pensato: costruisco il nodo, e ci metto lo zoccoletto (se riesco a trovarlo) come sull'arduino, così se ci devo caricare lo sketch stacco il uC e lo metto dentro all'arduino e lo carico, poi rimetto il uC nella millefori del nodo e bon
Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

GianfrancoPa

Ah, in questo modo il problema non si pone ovviamente!

In ogni caso non so quale tutorial stia usando, ma qui ne trovi uno completo: http://arduino.cc/en/Main/Standalone
Gianfranco

cavde

dove trovo lo zoccoletto per l'atmega???
comunque stavo seguendo proprio quello :)
Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

GianfrancoPa

Io li ho presi su ebay se non sbaglio, in quanto robot-italy, dove solitamente acquisto, non li aveva quando ho fatto l'ordine.
Gianfranco

dr4gone

io gli zoccoletti li ho presi su ebay..  1.50 - 5pz.

ho preso dallo stesso venditore anche altre cose tipo pulsantini morsettiere e contenitori in abs.

P.S. per quanto riguarda i modulini RF di Sparkfun mi sono arrivati ... Il problema è che sono fuori casa gia da una settimana e ritorno Martedì. Li proverò appena possibile  ;)

leo72

Un consiglio ai neofiti: quando acquistate gli zoccoli, assicuratevi che siano larghi 300mils o 0.3", e non 600 mils o 0.6". La prima è la larghezza dei chip Atmega, la seconda è quella dei comuni chip DIP da 40 piedini.

Sembra una cavolata ma se non si trovano immagini a corredo dell'articolo che si sta comprando, è facile sbagliare l'acquisto. Ecco la differenza:

dr4gone

Giusta osservazione!!
Quando sono andato in un negozio fisico, mi hanno propinato quelli da 0.6 che ovviamente non andavano bene...

Quindi ho ordinato QUESTI

cavde

grazie per la precisazione!
dai che voglio sapere qualcosa di questi moduli RF XD
Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

dr4gone

Come detto devi pazientare un po :D . Sono a 1000 km da casa :D
Martedí dovrei tornare e in settimana faró le prove :D

dr4gone

Ok prime prove concluse senza molto sucesso.
Mi capita che il ricevitore scriva geroglifici in modo costante appena lo collego se tolgo il cavo ad arduino ovviamente non scrive più nulla.
Se elimino i modulini e metto il cavo funziona nuovamente tutto.

Potrebbero essere delle interferenze?

sul primo arduino (TX) uso questo codice
Code: [Select]

#include <NewSoftSerial.h>

NewSoftSerial mySerial(2, 3);

void setup()  
{
 Serial.begin(2400);
 Serial.println("=================================================");
 Serial.println("Ciao sono Arduino");
 Serial.println("Dimmi cosa devo fare!");
 Serial.println("---------------------------------------------");
 Serial.println("|        I COMANDI DISPONIBILI SONO:        |");
 Serial.println("---------------------------------------------");
 Serial.println("L o l per accendere la luce!");
 Serial.println("=================================================");
 Serial.flush(); // svuoto il buffer di ricezione seriale
 mySerial.begin(2400);
 mySerial.flush(); // svuoto il buffer di ricezione seriale
}

void loop()
{
 if (mySerial.available()) {
     Serial.print((char)mySerial.read());
 }
if (Serial.available()) {
    mySerial.print((char)Serial.read());
 }
}


Sul secondo (RX) uso questo
Code: [Select]

#include <NewSoftSerial.h>
#define luce 6

byte rx = 0;    // variabile per contenere il carattere ricevuto

NewSoftSerial mySerial(2, 3);

void setup()  
{
 
 pinMode(luce, OUTPUT);
 Serial.begin(2400);
 Serial.println("Ciao sono Luigino328");
 Serial.flush(); // svuoto il buffer di ricezione seriale
 mySerial.begin(2400);
 mySerial.flush(); // svuoto il buffer di ricezione seriale
}

void loop()
{
 if (mySerial.available()) {
     Serial.print((char)mySerial.read());
 }
 if (mySerial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
rx = mySerial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
               mySerial.flush(); // svuoto il buffer di ricezione seriale

if (rx=='L' || rx=='l') //
{

if (digitalRead(luce) == HIGH) // il led era acceso?
{
digitalWrite(luce,LOW); // lo spengo
                               Serial.println("OFF");
                               delay(250);
}
else  // il led era spento
{
digitalWrite(luce,HIGH); // lo accendo
                               Serial.println("ON");
                               delay(250);
}

}

                   }
                 }

Ho preso spunto da questo documento per i collegamenti http://www.sparkfun.com/datasheets/RF/KLP_Walkthrough.pdf
I collegamenti sono  fatti così
TX

RX

marchino65

Ciao,
da quello che riesco a vedere, i moduli sono i TLP/RLP 434-A e qui dovrebbero lavorare a 4800 e non a 2400 (questo spiegherebbe i caratteri geroglifici)

Saluti

dr4gone

non va comunque, ho appena provato.
Comunuqe basta settare òa velocità della seriale e della consolle, in maniera identica..
E non credo che sia quello il problema.. infatti credo che selezionando una velocità inferiore non ci siano problemi, che magari al contrario si possono verificare selezionando una velocità maggiore.

Altre idee?

cavde

non c'è modo per essere sicuri che le interferenze non rompano??? tipo se schermi la zona in cui stai trasmettendo...non so come però XD
Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

dr4gone

Ok, ho cambiato radicalmente approccio e ho usato un 'altra libreria per far comunicare un tx e un rx .

La libreria si chiama "virtualwire" che sembra davvero funzionare...
Ora ci vuole il tempo per adattare il codice per la gestione di luci e altro...

Per ora sono riuscito a far si che quando sull' arduino con trasmettitore si preme un pulsante, sull'altro arduino con ricevitore viene stampato un comando sul serial monitor.

Work in progress  ;)

Go Up