TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: kaneda en 02 de Julio de 2013, 18:57:29
-
Hola Foro :)
Estoy trabajando en un proyecto en el que necesito transmitir comandos (teclas pulsadas) de forma inalambrica a una distancia maxima de unos 70m.
Mi pregunta es: ¿Que modulos me recomiendan? Una opcion es usar modulos XBEE, pero estos son mas complejos y eso los hace mas costosos teniendo en cuenta que no usaria todo su potencial. Mi idea es simplemente trasmitir una señal que indique que tecla se ha pulsado. Por ejemplo, a traves de protocolos rs-232 o algun otro mas sencillo como ppm.
Acepto todo tipo de sugerencias y recomendaciones.
Muchas Gracias!! :)
-
Módulos Bluetooth Clase 1, te alcanza hasta 100 metros, y son muy fáciles de gestionar.
Módulos FSK-GFSK a 2.4Ghz, te los venden los chinos por Ebay, muy baratitos.
-
Gracias por la rapida respuesta :)
Respecto al modulo Bluetooth, para tener ese alcance, deberia comprar un modulo que cuesta casi lo mismo que los XBEE.
Los modulos FSK no los he probado, realmente tienen buen alcance?
Estuve viendo el modulo nRF24L01, y parece ser una buena opcion. Alguien lo ha probado?
-
Para mi los mejores son los Xbee :mrgreen:
si compras lo de la serie 1, que no sean pro son mas economicos, si el precio es aun costoso para voz, entonces puedes comprar por ejemplo estos (http://www.electronica.com.ve//ventas/catalog/product_info.php?cPath=57&products_id=3424) mas un ht12E y un ht12D para manejarlos facilmente ;-)
Saludos
-
Siempre termino en los XBEE jeje ((:-))... son muy confiables, los XBEE PRO me han funcionado muy bien para 70m. Nunca probe con los XBEE comunes. Pero para este proyecto, que consiste en un tablero de anotaciones para basquet, queria usar algo mas economico... los modulitos con los ht12 los probé y no tenian casi nada de alcance :?
-
Bueno Kaneda
El tema del alcance es problematico con esos modulos todo depende del tamaño del a antena que estes utilizando quedebe ser de 17.3cm aproximandamente si usas modulos de 434MHz te presente tambien eso pero con los ht12E y ht12D es la unica forma que he logrado que me funcionen pero la distancia no la probe solo hasta unos 10Mts :?
De todas formas te dejo mas informacion aqui (http://www.bilbaoelectronics.com/radio-modulos-rf.html)
Saludos
-
Gracias por la informacion Ralf, esos módulos no tienen el alcance que necesito, voy a ver si sigo buscando mas opciones, o si sigo usando los Xbee que nunca fallan. Voy a ver si consigo un par de nRF24L01 para probar que alcance tienen. Alguien lo usó en alguna ocasión?
-
La gente de CTM tiene varias opciones a muy buen precio. Son los mismos q anuncian aquí en el foro. Los módulos q les compré funcionan de maravillas. Podés consultarlo a Marcos Tagliani.
http://www.ctmelectronica.com.ar/
-
Oktube esos modulos estan muy buenos, creo que son mas acordes a lo que necesito, voy a investigar un poco para ver si me servirian y pedir algun presupuesto. Muchas Gracias por la informacion ((:-)) :)
-
Los modulos NRF905 cuestan 15€ la pareja, incluido el transporte desde China. Los he probado y funcionan a 100m. perfectamente. El inconveniente es que se comunican por SPI. Si te interesa tengo una libreria en CCS.
Saludos
Miquel
-
Muchas gracias miquel, la libreria me vendria muy bien. Compre una pareja de NRF905 y otra de NRF24L01 para hacer pruebas. Ahora a esperar que lleguen:)
-
Disculpa por la tardanza, pero estaba de viaje. Los modulos NRF24L01 tienen poca potencia y solo sirven para pequeñas distancias, el NRF905 tiene +10dBm .
Esta es la libreria que hize para el NRF905, no contempla todas las posibilidades del modulo. Espero que te sirva.
/*******************************************************************************
CONNECTOR NRF905
---------------
Cable 3 fils:
Vermell PIN_A0 CARR_DETECT
Groc PIN_A1 ADDR_MATCH
Groc PIN_A2 DATA_READY
Cable 3 fils:
Vermell PIN_C0 TX_EN
Verd PIN_C1 PWR_UP
Verd PIN_C2 TRX_CE
Cable 4 fils:
Vermell PIN_B0 SPI_CS
Blau PIN_B1 SPI_CLK
Blau PIN_B2 SPI_OUT MOSI
Blau PIN_B3 SPI_IN MISO
Definició de PIN´S per utilitzar el cable de prova
---------------------------------------------------------
#define SPI_CS PIN_B0
#define SPI_CLK PIN_B1
#define SPI_OUT PIN_B2 // MOSI
#define SPI_IN PIN_B3 // MISO
#define TX_EN PIN_C0
#define PWR_UP PIN_C1
#define TRX_CE PIN_C2
#define CARR_DETECT PIN_A0
#define ADDR_MATCH PIN_A1
#define DATA_READY PIN_A2
///////////////////////////////////////////////////////////////////////////////
----------------------------
CABLE NOU DE PROVA NRF905
----------------------------
Cable 8 fils:
Blanc PIN_B0 SPI_CS
PIN_B1 SPI_CLK
PIN_B2 SPI_OUT MOSI
PIN_B3 SPI_IN MISO
PIN_B4 DATA READY
PIN_B5 PWR_UP
PIN_B6 TRX_CE
Blau PIN_B7 TX_EN
Cable 3 fils:
Blau PIN_C0 CD
Blanc PIN_C1 AM
Groc PIN_C2 UCK
*******************************************************************************/
#ifndef SPI_CS
#define SPI_CS PIN_B0
#endif
#ifndef SPI_CLK
#define SPI_CLK PIN_B1
#endif
#ifndef SPI_OUT
#define SPI_OUT PIN_B2 // MOSI
#endif
#ifndef SPI_IN
#define SPI_IN PIN_B3 // MISO
#endif
#ifndef DATA_READY
#define DATA_READY PIN_B4
#endif
#ifndef PWR_UP
#define PWR_UP PIN_B5
#endif
#ifndef TRX_CE
#define TRX_CE PIN_B6
#endif
#ifndef TX_EN
#define TX_EN PIN_B7
#endif
#ifndef CARR_DETECT
#define CARR_DETECT PIN_C0 // Si s'utilitza el "Carrier Detect"
#endif
#ifndef ADDR_MATCH
#define ADDR_MATCH PIN_C1 // Si s'utilitza el "Address Match"
#endif
#ifndef REG_CFG_0
#define REG_CFG_0 0x01 //0x6C 0x01 = Canal nº 1
#endif
#ifndef REG_CFG_1
#define REG_CFG_1 0x0C //0x00 0x0C = +10dbm 0x08 = +6dbm 0x04 = -2dbm 0x00 = -10dbm [7:6]no utilitzat, [5]AUTO_RETRAN, [4]RX_RED_PWR, [3:2]PA_PWR, [1]HFREQ_PLL, [0]Bit8 CH_NO
#endif
#ifndef REG_CFG_2
#define REG_CFG_2 0x44 //0b01000100 4 bytes RX_ADDRESS y TX_ADDRESS [7]no utilitzat, [6:4]TX_AFW, [3]no utilitzat, [2:0]RX_AFW
#endif
#ifndef REG_CFG_3
#define REG_CFG_3 0x06 //0x20 PAYLOAD de 32 bytes
#endif
#ifndef REG_CFG_4
#define REG_CFG_4 0x06 //0x20 PAYLOAD de 32 bytes
#endif
#ifndef RX_ADDRESS_1
#define RX_ADDRESS_1 0xE7
#endif
#ifndef RX_ADDRESS_2
#define RX_ADDRESS_2 0xE7
#endif
#ifndef RX_ADDRESS_3
#define RX_ADDRESS_3 0xE7
#endif
#ifndef RX_ADDRESS_4
#define RX_ADDRESS_4 0xE7
#endif
#ifndef REG_CFG_9
#define REG_CFG_9 0x58 // 0b01011000 CRC de 8 bits activat y 16MHz XOF [7]CRC_MODE, [6]CRC_EN, [5:3]XOF, [2]UP_CLK_EN, [1:0]UP_CLK_FREQ
#endif
#ifndef BUFF_RX_PL
#define BUFF_RX_PL REG_CFG_3 + 1 // Registre 3 + 1 byte
#endif
#ifndef BUFF_TX_PL
#define BUFF_TX_PL REG_CFG_4 + 1 // Registre 4 + 1 byte
#endif
#define WRITE_CFG 0x00
#define READ_CFG 0x10
#define WRITE_TX_PL 0x20
#define WRITE_TX_AD 0x22
#define READ_RX_PL 0x24
Byte SpiRead(void);
void SpiWrite(byte Data);
void SetConfig();
void TestConfig(void);
void TxPacket(void);
void RxPacket(void);
void SetRxMode(void);
Byte TxBuf[BUFF_TX_PL];
Byte RxBuf[BUFF_RX_PL];
void TestConfig(void)
{
int8 i;
byte tmp[10];
printf("Llegint registres...\r");
delay_ms(50);
printf(" \r");
delay_ms(50);
output_high(PWR_UP);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(READ_CFG);
for (i=0; i<10; i++) Tmp[i]=SpiRead();
output_high(SPI_CS);
for (i=0; i<10; i++)
{
printf("Registre %d = %X\r",(i),tmp[i]);
delay_ms(50);
}
printf(" \r");
delay_ms(50);
}
void SetConfig()
{
output_high(PWR_UP);
output_low(TRX_CE);
output_low(TX_EN);
output_low(SPI_CS);
SpiWrite(WRITE_CFG);
SpiWrite(REG_CFG_0);
SpiWrite(REG_CFG_1);
SpiWrite(REG_CFG_2);
SpiWrite(REG_CFG_3);
SpiWrite(REG_CFG_4);
SpiWrite(RX_ADDRESS_1);
SpiWrite(RX_ADDRESS_2);
SpiWrite(RX_ADDRESS_3);
SpiWrite(RX_ADDRESS_4);
SpiWrite(REG_CFG_9);
output_high(SPI_CS);
printf("Gravats els registres...\r");
delay_ms(50);
printf(" \r");
delay_ms(50);
}
void SpiWrite(byte Data)
{
int8 i;
byte D;
D=Data;
output_bit(SPI_OUT,bit_test(D,7));
for(i=0; i<8; i++)
{
output_high(SPI_CLK);
D=D << 1;
output_low(SPI_CLK);
output_bit(SPI_OUT,bit_test(D,7));
}
output_low(SPI_OUT);
}
byte SpiRead(void)
{
int8 i;
byte D=0;
for (i=0; i<8; i++)
{
D=D << 1;
output_high(SPI_CLK);
if(input(SPI_IN)) bit_set(D,0);
output_low(SPI_CLK);
}
return D;
}
void TxPacket(void)
{
int8 i;
output_high(PWR_UP);
output_high(TX_EN);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(WRITE_TX_AD);
SpiWrite(RX_ADDRESS_1);
SpiWrite(RX_ADDRESS_2);
SpiWrite(RX_ADDRESS_3);
SpiWrite(RX_ADDRESS_4);
output_high(SPI_CS);
delay_us(100);
output_low(SPI_CS);
SpiWrite(WRITE_TX_PL);
for (i=0; i<BUFF_TX_PL; i++) SpiWrite(TxBuf[i]);
output_high(SPI_CS);
output_high(TRX_CE);
delay_us(20);
output_low(TRX_CE);
}
void RxPacket(void)
{
int8 i;
output_high(PWR_UP);
output_low(TX_EN);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(READ_RX_PL);
for(i=0; i<BUFF_RX_PL; i++) RxBuf[i] = SpiRead();
output_high(SPI_CS);
}
void SetRxMode(void)
{
output_high(PWR_UP);
output_low(TX_EN);
output_high(TRX_CE);
delay_us(650);
}
Para utilizarla solo tienes que cambiar los pines de los defines de acuerdo con el PIC utilizado y
1 llamar a la funcion void SetConfig(); para grabar los registros.
2 si quieres comprobar los registros grabados, llama a la funcion void TestConfig(void);
3 llama a la funcion void SetRxMode(void); para colocar al modulo en modo recepcion
4 para transmitir coloca los datos a transmitir en Byte TxBuf[BUFF_TX_PL]; llama a la funcion void TxPacket(void); y despues llama a la funcion void SetRxMode(void);
para colocar al modulo en modo recepcion.
5 para recibir comprueba el estado de DATA_READY y si esta en alto llama a la funcion void RxPacket(void); los datos se cargaran en el bufer Byte RxBuf[BUFF_RX_PL]; y
llama a la funcion void SetRxMode(void); para colocar al modulo en modo recepcion.
Este modulo tienes muchas posibilidades en la hoja de datos lo tienes muy bien detallado.
Saludos,
Miquel