Portero inhalambrico con nrf24l01 y arduino

Hola comunidad:

Soy un autodidacta en esto de la programación y de la electrónica, voy aprendiendo a medida que surgen la situaciones y gracias a las distintas comunidades que hacen maravillosa a internet sigo explorando.

Quisiera en esta mi primera vez, participar en el foro con una iniciativa. La idea es construir un videoportero inhalámbrico con 2 nrf24l01 y 2 arduino. Un Arduino Uno y un Pro Mini 5 Volts

El sistema constaría de dos módulos (como receptor y emisor ambos),uno en la calle y otro en el interior de la propiedad. Lo haría de forma progresiva:

1° Etapa: Conexión de los módulos de radio con los arduinos y verificación de la conectividad entre Emiso-Calle con Receptor-Casa. Esta verificación la realizaría "a pedido" (de manera que no sobrecarge el controlador mostrando el estado a travez de un led que prende y apaga) desde el módulo Receptor-Casa a travez de un pulsador.

2° Etapa: Implementación del subsistema de "llamado", el cual consistitía en un pulsador y led en el módulo Emisor-Calle y un buzzer y led en el módulo Receptor-Casa. La ídea es que al pulsar el botón en el Emiso-Calle se encienda un led en este módulo y encienda otro led y active el buzzer con una melodía en el módulo Receptor-Casa.

3° Etapa: Implementación del subsistema "apertura de puerta", el cual consistiría en una una cerradura eléctrica de 12v accionada por un relay conectado al módulo Emisor-Calle quién recibiría la orden del módulo Receptor-Casa al presionar el boton correspondiente para la apertura de la mísma. Al mismo tiempo encendería el led indicativo en ambos módulos.

Es intención de implementar luego las etapas de comunicación de audio entre los módulos para que se pueda establecer un diálogo entre las personas en los dos extremos del portero, como así también la transmisión de vidéo desde el módulo de calle a una pantalla en el módulo de la casa.

Me permito recordarles que mis conocimientos son muy básicos por lo que ruego paciencia y comprensión en este proyecto, seguramente habrá muchos errores o programación no adecuada, sientansen en total libertad de corregir y sugerir todo lo que consideren, no encontraran objeción de mi parte, y por supuesto desde ya mi sincero agradecimiento por todos los aportes que realicen.

Bienvenido al foro.

Lo que quieres hacer será un gran reto. Los puntos de 1 a 3 no llevan mucha dificultad. Lo del audio ya veo más complicado a través del nrf24, lo del vídeo veo imposible.

Para el video es mejor emplear una solución analógica con 5,8Ghz y solo activarlo y desactivarlo con el Arduino.

Lo del audio ya veo más complicado a través del nrf24

Esta resuelto en las librerías de Tmrh20, busca Tmrh20 audio.

Me permito recordarles que mis conocimientos son muy básicos por lo que ruego paciencia

Paciencia tenemos, porque ya verás que si no respondemos es porque estamos ocupados.
El problema es que es un proyecto demasiado ambicioso para alguien que no ha trabajado con Arduino y esta programación pero... muchos me han sorprendido y porque tu no?

La descripción que das me huele a un proyecto que te han encargado y has tomado el desafío. Entonces veo que tienes motivación por lo menos.

Según avance el proyecto tal vez lo mueva a la sección proyectos, pero ya veremos, el 99% empieza con mucha furia y luego abandonan todo.

Agradezco la atención que mostraron y espero ser útil para la comunidad como lo son uds. para mi.

En realizad es un proyecto que me propuse para uso personal, comencé con Arduino el año pasado prendiendo y apagando LEDs y sigo avanzando en la medida que mi tiempo lo permite. Pretendo que sea un proyecto aplicable desde el primer momento, que se vaya transformando desde un timbre inalámbrico hasta el videoportero al que aspiro. Con respecto a Audio y Video, también considere la posibilidad de agregarle una cámara IP si es que se torna imposible la implementación desde Arduino puro.

Realizada esta aclaración pongo a consideración la 1er Etapa que consistía en comprobar visualmente la comunicación entre ambos módulos.


Módulo Emisor-Calle

/*************************************************************************
 *Módulo externo (CALLE) del Portero utilizando el NRF24L01 conectado a un 
 *Arduino PRO MINI
 */
/*
 DESCRIPCIÓN DEL PROGRAMA

 1 Etapa Modulo Emisor-Calle  
   Este módulo a travez de la función Baliza envía al módulo Receptor-Casa
   un texto cualquiera, lo que provocará el encendido intermitente del LED en 
   el receptor en caso de confirmarse la conectividad, si no se estableciera la
   conexión el LED se encendería en forma permanente.
*/   

 
// Incluimos las librerías necesarias
  #include <SPI.h> // Librería para la comunicación SPI
// Librerías para el funcionamiento del módulo NRF24L01
  #include <nRF24L01.h>
  #include <RF24.h>
 
// Definimos los pines de control del módulo NRF24L01
  #define CE 9
  #define CSN 10
 
// Se crea el objeto tipo RF24
  RF24 radio(CE, CSN);
 
// Se declaran los canales de comunicación entre los RF
  const uint64_t canal[2] = {0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};
 
void setup()
{
  //Serial.begin(9600);
    
  radio.begin();                  
    
  radio.openWritingPipe(canal[0]); // Abro el canal "0" para escribir
  radio.openWritingPipe(canal[1]); // Abro el canal "1" para leer
    
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();   
}
 
void loop()
  {
    Baliza();      
}


void Baliza()
{
  radio.stopListening();    //Paramos la escucha para poder hablar

  const char texto[] = "Hola"; 
  radio.write(&texto, sizeof(texto));

  delay(1000); // Un segundo de espera entre envío y envío
}

Módulo Receptor-Casa

/*************************************************************************
*Módulo interno (CASA) del Portero utilizando el NRF24L01 conectado a un 
*Arduino UNO R3
**************************************************************************/

/*
 DESCRIPCIÓN DEL PROGRAMA

 1 Etapa Modulo Receptor-Casa  
   Este módulo utiliza un pulsador para activar la verificación de conexión con
   el módulo Emisor-Calle; si se comprueba la conexión el LED encenderá de forma
   intermitente, si no se estableciera la conexión el LED se encenderá en forma
   permanente. Esta comprobación solo se realiza a pedido del usuario para no
   sobrecargar al Arduino y sería útil para comprobar sobre todo que el módulo 
   Emisor-Calle no se encuentre apagado por batería agotada.
*/

// Incluimos las librerías necesarias
#include <SPI.h> // Librería para la comunicación SPI
// Librerías para el funcionamiento del módulo NRF24L01
#include <nRF24L01.h>
#include <RF24.h>
 
// Declaramos los pines de control del módulo NRF24L01
#define CE 9
#define CSN 10
 
// Se crea el objeto tipo RF24
RF24 radio(CE, CSN);
 
// Se declaran los canales (64 bits en hexadecimal) para transmisión RF
const uint64_t canal[2] = {0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};

int pulsador1 = 8; // Pin digital 8 para el pulsador
int LED_Conect = 7; // Pin digital 7 para el LED de Conectividad

int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val



void setup()
{
  Serial.begin(9600);
  pinMode(pulsador1, INPUT); // Pin digital 8 como entrada
  pinMode(LED_Conect, OUTPUT); // Pin digital 7 como salida
  
  digitalWrite(LED_Conect, LOW); // Inicialmente el LED se apaga

  radio.begin();  // Inicialización de la comunicación RF
     
  // Establece el retardo y el número de reintentos tras fallo en la comunicación RF
  radio.setRetries(15,15);
     
  radio.openWritingPipe(canal[1]); // Abro el canal "1" para escribir
  radio.openReadingPipe(1,canal[0]); // Abro el canal "0" para leer

  radio.startListening();
}

void loop()
{
  val= digitalRead(pulsador1); // lee el estado del Boton de Conectividad
  if ((val == LOW) && (old_val == HIGH)){
    state=1-state;
    delay(10);
  }
  
  old_val = val; // valor del antiguo estado
  if (state==1){
     //En esta seccion se coloca lo que debe hacer para verificar la conectividad
     //Serial.println("Encendido");
     if (radio.available()) {
       char texto[32] = "";
       radio.read(&texto, sizeof(texto));

       //Serial.println(texto);
       digitalWrite(LED_Conect, LOW);
       delay(500);
       }
       else{
         digitalWrite(LED_Conect, HIGH);
      }  
     }
  else{
    // En esta seccion se realiza todo las otras tareas del Modulo_Casa  
    digitalWrite(LED_Conect,LOW); // apagar el LED
    //Serial.println("Apagado");    
  }
}

Entiendo que puede ser un código muy básico pero me funciona, sin embargo acepto agradecido toda sugerencia para mejorarlo.

Gracias

Pasa por Como visualizar las Imagenes Adjuntas en Arduino.cc para aprender a postear las imagenes.

El problema es si pretendes conlos mismos nRF24 hacer ese control y además enviar Audio.

La librería es esta TMRh20s Project Blog Wireless Audio
O mas directamente esta Github RF24 Audio

surbyte:
Pasa por Como visualizar las Imagenes Adjuntas en Arduino.cc para aprender a postear las imagenes.

El problema es si pretendes conlos mismos nRF24 hacer ese control y además enviar Audio.

La librería es esta TMRh20s Project Blog Wireless Audio
O mas directamente esta Github RF24 Audio

Vamos por parte, aprendi a insertar imagenes, gracias amigo surbyte, con respecto a si implementaría el audio con los mismo nrf24l01, pensaba hacerlo de un modo no simultaneo, o sea, cuando se está enviando y recibiendo audio, no está enviando otra cosa, ni comando ni nada. Es una idea, quizas no sea posible.

Aparentemente si. No lo probé, veo que comparte librerías ademas de la de audio, asi que tal vez sea posible usarlas. Los ejemplos son muy buenos y espero no tengas inconvenientes para ponerlos en marcha.
Requiere hardware asi que ya veremos como armarlo.