Go Down

Topic: MACCHINA TELECOMANDATA CON XBEE AIUTO (Read 1 time) previous topic - next topic

Luca_94

Feb 09, 2013, 01:37 pm Last Edit: Feb 09, 2013, 01:39 pm by Luca_94 Reason: 1
Salve a tutti, da poco ho incominciato a fare dei progettini con arduino. Per ora seguendo delle guide su internet sono riuscito a realizzare una macchinina automatica che cambia direzione quando individua un ostacolo (come quella allegata sotto)  però ora volevo modificarla: premendo un tasto vorrei riusce a comandarla con un pad di un joystick come nell immagine allegata sotto. Per far questo ho letto che mi serve 2 moduli xbee e qualche shield.
Il tutto è possibile o troppo complesso? Mi sapreste dire quali materiali devo comprare per realizzarlo?

sciorty

Non necessariamente degli xbee. Gli xbee costicchiano anche se offrono la possibilità di creare reti abbastanza complesse quindi se vuoi spendere qualcosa un più non c'è problema altrimenti dei semplici moduli radio seriali andranno bene!
Basta configurare i moduli in modo che si vedano (nel caso degli xbee tramite un software chiamato X-CTU), poi ci scrivi sopra come quando scrivi sulla seriale di arduino!

Luca_94

Usando dei moduli xbee di cosa avrò bisogno? Girando per internet ho trovato che servono 2 moduli xbee , 1 XBee USB Adapter , XBee 5V/3.3V Adapter for microcontroller connectione la wifi shield. Serve altro o qualche componente è di troppo?

sciorty

Dipende, l'usb adapter ovviamente ti serve per attaccarlo direttamente al pc ed usarlo come una semplice porta seriale. Lato arduino invece ti serve qualcosa così, cioè una scheda di breakout( la piedinatura del modulo non è quella da 2.54mm) con integrato un regolatore di tensione.

LeonidRusnac

#4
Feb 09, 2013, 04:32 pm Last Edit: Feb 09, 2013, 04:36 pm by LeonidRusnac Reason: 1
ma in questo modo spendi un casino, i moduli xbee costano tanto poi ache adattatori lo stesso, secondo me ti conviene prenderti due moduli NRF24L01+ che li trovi a circa 3$ su ebay, l'unico problema sara che avrai bisogno di due arduino, ma sempre meno di 2 xbee + adattatori :)

Luca_94

Perche servono 2 arduino? e come posso interfacciare e far comunicare tra di loro i moduli NRF24L01+? non ho trovato nessuna guida

LeonidRusnac

#6
Feb 09, 2013, 07:53 pm Last Edit: Feb 09, 2013, 07:57 pm by LeonidRusnac Reason: 1

Perche servono 2 arduino? e come posso interfacciare e far comunicare tra di loro i moduli NRF24L01+? non ho trovato nessuna guida


il primo arduino deve mandare e il secondo deve ricevere, per quanto riguarda la comunicazione è semplicissimo, c'è una libreria già fatta che fa tutto per te, io avevo fatto una piccola prova: http://www.youtube.com/watch?v=kU88DB0dXJE
se vuoi posso farti vedere anche il codice :)

Luca_94

#7
Feb 09, 2013, 08:05 pm Last Edit: Feb 09, 2013, 08:11 pm by Luca_94 Reason: 1
Grazie mi faresti un favore!  XD mi potresti dire dove posso trovare le librerie?

LeonidRusnac

#8
Feb 09, 2013, 08:48 pm Last Edit: Feb 09, 2013, 09:05 pm by LeonidRusnac Reason: 1
ok, una premessa: il codice non è proprio perfetto, era solo una prova per vedere come funziona :)

Trasmettitore
Code: [Select]
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

RF24 radio(9,10);

const uint64_t pipe = 0xF0F0F0F0E1LL;

int triggerPort = 5;
int echoPort = 8;

void setup(){

 pinMode( triggerPort, OUTPUT );
 pinMode( echoPort, INPUT );
 radio.begin();
 radio.openWritingPipe(pipe);

 pinMode(3, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(2, OUTPUT);
 pinMode(6, OUTPUT);
 digitalWrite(7,0);
 digitalWrite(2,0);
 digitalWrite(6,0);
 digitalWrite(3,1);
 delay(200);
 digitalWrite(3,0);
 radio.startListening();
}

void loop(){
 radio.stopListening();
 
 long duration = pulseIn( echoPort, HIGH );
 long r = 0.034 * duration / 2;
 
 if(duration>38000) duration = 0;
 
 bool ok = radio.write( &r, sizeof(long) );
 
 if(ok){
   digitalWrite(3,1);
   delay(200);
   digitalWrite(3,0);
 }else{
   digitalWrite(7,1);
   delay(200);
   digitalWrite(7,0);
 }
 
 radio.startListening();
 delay(50);
}


Ricevitore
Code: [Select]
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

RF24 radio(9,10);

const uint64_t pipe = 0xF0F0F0F0E1LL;

void setup(){
 radio.begin();
 radio.openReadingPipe(1,pipe);
 radio.startListening();
 delay(100);
 Serial.begin(9600);
 printf_begin();
 
 radio.printDetails();
}

void loop(){
 
 if( radio.available() ){
     int got_distance;
     radio.read( &got_distance, sizeof(long) );

       printf("Distance %d\n",got_distance);
 }
 
}


Luca_94

Grazie 1000! Proverò ad utilizzare i NRF24L01+ in quanto meno costosi e da come sembra più facili da utilizzare.

Luca_94

Ultima cosa ho letto che i moduli NRF24L01+ vanno collegati nei pin 12,11,13,8,7 ma nel ricevitore sono occupati dal motor shield come posso fare?

Go Up