Pages: [1]   Go Down
Author Topic: Cambiar canal de modulo rf  (Read 790 times)
0 Members and 1 Guest are viewing this topic.
Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas, soy principiante en tema y quisiera ver si podrían ayudarme con una duda. La tarea es enviar bits de un arduino a otro con un kit RF para accionar cargas, y después el otro arduino al leer algunos sensores transmita por un kit diferente de rf al primer arduino, mi problema es que no se como cambiar el canal de transmisión para que no choquen ambos kits debido a que manejan la misma frecuencia. Agradecería si alguien puede darme una pista sobre donde leer o cual comando podría ayudarme
Logged

Maracaibo
Offline Offline
Jr. Member
**
Karma: 2
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos
para comunicacion bidireccional es mejor usar nRF24L01, asi usas el mismo canal y envias y recibes por el
Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por tu respuesta, con los modulos que "genericos" por asi decirlos de uso comun no se puede? esque ya cuento con ellos y para ver si se pueden aprovechar, Gracias
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola.
Yo también neceito usarlos, pero aún no he probado.
En la placa del receptor aparecen impresas 3 frecuencias diferentes, pero no sé  si se pueden cambiar.
Creo que una manera de usar los TX y RXsin que interfieran es en modo half duplex. Cuando lo pruebe te comento.
Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Según leí se podía cambiar el canal mediante un código, pero no logro saber cual es
Logged

Offline Offline
Full Member
***
Karma: 6
Posts: 249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no se encuentra en español, busquen en inglés. Ya esta casi todo hecho.

Además como siempre digo, que cuesta decir (y no lo tomen a mal) estoy usando el modulo RF XXXXX comprado acá, con esta librería, ponen el código, y demás.

Asi tiran un dato tan genérico que no se puede ayudar. Yo no trabajo con esos módulos, si con el nRF24L01 pero mas allá de eso si dices.. uso tal módulo miro las especificaciones y puedo sugerirte.
« Last Edit: August 14, 2014, 12:17:02 pm by surbyte » Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Utilizo un modulo como este http://articulo.mercadolibre.com.mx/MLM-453833478-modulo-rf-emisorreceptor-433mhz-arduino-micro-hd-12e-ht-12d-_JM
Y pues tengo algo de duda en cuanto solo el codigo de cambio de canal en emisor y receptor, ya que no se como se cambia eso.
Logged

Offline Offline
Full Member
***
Karma: 6
Posts: 249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahora si, ves que facil se hace cuando se explica detenidamente el problema
Bueno este link te será de ayuda
Esta librería VirtualWire es tu salvación
http://www.airspayce.com/mikem/arduino/VirtualWire/
La libreria tiene ejemplos

acá como usarla (en inglés), busca en google en castellano
http://www.airspayce.com/mikem/arduino/VirtualWire.pdf

Aca un ejemplo, esta en inglés pero podras seguir el código
http://forum.arduino.cc/index.php/topic,44660.0.html

No veo un solo ejemplo donde se pueda cambiar la frecuencia a la que haces mención.
« Last Edit: August 14, 2014, 02:50:29 pm by surbyte » Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias por tu respuesta y aportaciones, no es cambiar frecuencia, solo el canal de transmisión para que no choquen ambos módulos en el envió de información por estar en "default" en el mismo canal
Logged

Offline Offline
Full Member
***
Karma: 6
Posts: 249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donde dice (pasa el link) que tienes canales para cambiar.
Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Creo que sonara tonto, pero me lo dijo el vendedor del modulo. Me siento estafado xD
Logged

Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Encontre este codigo en un foro, pero no logro hacer que el receptor reciba algun dato

Quote
#define BAUD_RATE       1200        // Tasa de transmision

// Definicion de bytes para el protocolo
#define BYTE_SINC       0xAA    // Byte de sincronia
#define BYTE_INICIO     0x7E    // Byte delimitador de inicio
#define BYTE_DIR_RX     0x11    // Dirección asignada al nodo receptor
#define TAM_TRAMA       4       // Cantidad de bytes en una trama

// Definicion de entradas/salidas
#define LED_ACTIVIDAD       8     // LED indicador de recepcion
#define LED_ACTUADOR        4     // LED que indica la activacion de un actuador

/* Declaracion de funciones */
void Recibir();    //Funcion de recepcion serial
void Parpadear( int veces, int periodo);    // Funcion para parpadear un LED

unsigned char estado_led = 0;

void setup(void)
{
  /* Inicializar puertos digitales */
  pinMode(LED_ACTIVIDAD, OUTPUT);
  pinMode(LED_ACTUADOR, OUTPUT);
 
  /*Inicializar comunicacion serial */
  Serial.begin(BAUD_RATE);
 
  /* Parpadeo de inicio */
  Parpadear(2, 1000);
}
/* Funcion principal del programa */
void loop(void)
{   
    Recibir();       // Funcion de recepcion
}
void Recibir()
{
    // Variables para almacenamiento de bytes de la trama
    static unsigned char dir, dato;

    // Ejecutar solo si se recibieron la cantidad minima de caracteres por trama
    if (Serial.available() >= TAM_TRAMA)   
    {
        // Buscar un byte de inicio, si se lo encuentra procesar los bytes
        // siguientes (son parte de la trama)
        if (Serial.read() == BYTE_INICIO)
        {
            dir = Serial.read(); // Leer el byte de direccion
            // Verificar que la trama este dirigida a nosotros
            if (dir == BYTE_DIR_RX) 
            {
                dato = Serial.read();    // Leer el byte de datos
                if (Serial.read() == (dir + dato))  // Verificar el checksum
                {
                    /* En este punto podemos estar seguros que la informacion no
                       contiene errores */
                    // Cambiar estado LED de actividad para visualizacion externa
                    if(estado_led)
                      digitalWrite(LED_ACTIVIDAD, HIGH);
                    else
                      digitalWrite(LED_ACTIVIDAD, LOW);
                     
                    estado_led = ~estado_led;
                   
                    /* Aplicar el bit correspondiente recibido en los datos
                    para activar/desactivar el actuador.
                    En este ejemplo solo estamos usando el bit 0 pero se
                    podrian usar mas bits */
                    digitalWrite(LED_ACTUADOR, (dato & 0b00000001));
                   
                    // Para usar más bits recibidos para el control de
                    // actuadores:
                    // digitalWrite(LED_ACTUADOR_1, ( (dato >> 1) & 0b00000001) );
                    // digitalWrite(LED_ACTUADOR_2, ( (dato >> 2) & 0b00000001) );
                    // digitalWrite(LED_ACTUADOR_3, ( (dato >> 3) & 0b00000001) );
                    // ... y asi sucesivamente
                }
            }
        }
    }
}


y este el transmisor

Quote
#define BAUD_RATE       1200        // Tasa de transmision

#define BYTE_SINC       0xAA    // Byte de sincronia
#define BYTE_INICIO     0x7E    // Byte delimitador de inicio
#define BYTE_DIR_RX     0x11    // Dirección asignada al nodo receptor
#define TAM_TRAMA       4       // Cantidad de bytes en una trama

#define LED_ACTIVIDAD       13     // Pin de salida para LED de actividad
#define PIN_SENSOR          4     // Pin de entrada para sensor digital

/* Declaracion de funciones */
void Transmitir();    //Funcion de transmisión serial
void setup(void)
{

    pinMode(LED_ACTIVIDAD, OUTPUT);
    pinMode(PIN_SENSOR, INPUT);
    Serial.begin(BAUD_RATE);

}

void loop(void)
{
    Transmitir();    // Funcion de transmision
    Transmitir();
    delay(250);
}

void Transmitir()
{
    unsigned char dato_tx = 0x00;  // Variable auxiliar para el byte a transmitirse
    dato_tx = dato_tx | digitalRead(PIN_SENSOR);   
    Serial.write(BYTE_SINC); // Enviar el byte de sincronia
    Serial.write(BYTE_INICIO);   // Enviar el byte delimitador de inicio
    Serial.write(BYTE_DIR_RX);   // Mandar la direccion del receptor
    Serial.write(dato_tx);       // Mandar el byte de dato
    Serial.write(BYTE_DIR_RX + dato_tx); // Calcular y mandar el checksum (direccion + datos)
}

Prove con serialprint y el transmisor si envia dato, pero el receptor no recibe
Logged

Offline Offline
Full Member
***
Karma: 6
Posts: 249
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Porque no usas la librería que te sugerí? VirtualWire la usa todo el mundo para esos transmisores-receptores.
Esta probada, tiene todas las actualizaciones.
Yo comenzaría por ahi.
La descargas, agregas la librería a la carpeta Arduino->Libraries.-> VirutalWire

Y luego ejecutas el demo del link.
Logged

Pages: [1]   Go Up
Jump to: