Mostrando las entradas con la etiqueta NRF24L01. Mostrar todas las entradas
Mostrando las entradas con la etiqueta NRF24L01. Mostrar todas las entradas

martes, 25 de agosto de 2015

Placa de desarrollo

Hoy les traigo una pequeña placa de desarrollo que realicé para un arduino nano, cuenta con borneras macho para conectar servos, una configuración para conectar un nrf24l01 y borneras hembra. Se puede acceder a cualquier pin de la placa nano (sea o no un pin programable ya sea tanto de entrada como de salida). En principio tiene un puerto USB tipo A, pero por problemas de espacio no pude conectarlo a la placa y quedó soldado para un "futuro" mejoramiento.


Así es la "etapa" final, como se puede ver el USB tipo A está bien ubicado, pero si quiero poner un cable para sacar los datos del mini (para no soldar en la plaqueta de la nano) no me dejaría espacio para conectarlo a la pc.

En la siguiente foto se puede apreciar como es la placa, en este caso puse un diodo con una resistencia para obtener los 3,3v necesarios por la placa del nrf24l01 (me había olvidado que el arduino nano entrega esa tensión, pero decidí dejárselo para no saturar el pin de los 3,3v)


En la siguiente foto (se puede agrandar si hacen click en la foto) se puede apreciar el conexionado entre la bornera del nrf24l01 y las borneras donde va el arduino nano, el dibujo lo puse para no tener que aplicar el circuito del diodo con la resistencia, por lo que se obtienen los 3,3v del arduino.


Y por último para que se pueda apreciar bien, la tira de pines que está más a la derecha es el GND, la que le sigue a la izquierda es el positivo y la tercera línea de pines es el "espejo" de los pines del arduino, así como las borneras hembra que están en la 4º línea, todo esto se repite al otro lado del arduino, siendo la 1º línea la tierra, la 2º línea el postivo y la 3º y 4º líneas son los espejos del arduino.


Como último comentario, si se usa el nrf24l01 no se pueden usar los pines encargados del spi como entradas o salidas normales, esto es porque justamente las está usando el transceptor. Los pines que no se pueden usar son: D13, D12, D11, D10 y D9.



viernes, 7 de agosto de 2015

Proyecto: integración de módulos (1)

Hoy les quiero mostrar un proyecto en el que llevo trabajando un poco más de 6 meses y sigo ampliándolo casi todos los días.


Se trata de un "dispositivo" a falta de un mejor nombre, que consta de un arduino MEGA 2560, la pantalla de mcufriend (hablé anteriormente en esta otra entrada), el transceptor NRF24L01 y el sensor de temperatura y humedad DTH11.








El proyecto lo realicé porque quería ver cuantas cosas podía integrar en un solo arduino, y como los arduino UNONANO y LEONARDO tenían pocos pines I/O decidí pasar al MEGA, con el cual puedo disponer de 53 pines I/O y 15 entradas analógicas. El sistema cuenta con: una comunicación con otro dispositivo (las direcciones todavía no se pueden cambiar) llamado "serv1", un reloj configurable, una linterna en pantalla y sensor de temperatura y humedad. A futuro estoy pensando en agregar un control remoto de domótica y un "generador de ondas" que serviría para generar señales cuadradas con ciertos patrones o frecuencias.






De momento el dispositivo solo puede establecer comunicación inalámbrica con la computadora (por puerto serie) con un arduino NANO y un tranceptor como interfaz (para recibir estoy usando el programa del chat que está en esta otra entrada), pero estoy seguro que si se obtiene el mismo equipo y realizando cambios mínimos (como la dirección de recepción y la dirección de emisión) se debería poder tener ambos equipos con una comunicación entre ellos.


En algunos días, subiré el programa y las librerías. Cuando yo considere que está terminado, voy a crear una página dedicada al proyecto completo para que se pueda ver sin tener que buscar viejas entradas.

domingo, 26 de julio de 2015

módulo NRF24L01

En esta ocación voy a demostrar como se usan los módulos NRF24L01.




Se alimenta con 3,3V (es algo a destacar) pero tolera los 5V de un arduino como señal. Utiliza la interfaz "SPI" para comunicarse y tienen un bajo consumo (se consiguen los NRF24L01+ que tienen significativamente más potencia) que para trabajos de domótica son ideales, además de las librerías (que vienen con algunos ejemplos) les voy a dejar un programa mio que sirva para "chatear" entre 2 computadoras inalámbricamente a través del puerto serie que ofrece el ide de arduino. 

La librería que uso es la MIRF.

El chat es un programa simple, está pensado para comunicar un arduino nano y un mega

También les dejo unos programas para mandar y recibir datos fijos, además del chat en un archivo comprimido.

La idea es que descomenten las partes del código necesarios para el arduino mega o el nano

/*
  Este programa sirve para transmitir y recibir mensajes entre
  2 arduinos, el ejemplo este sirve para un arduino mega a un
  arduino nano. Descomentar según sea el caso.
  V2.5
*/

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

int incomingByte;
byte mensaje[33];

void setup(){
  Serial.begin(9600);

/*
  Mirf.cePin = 48;                          //para arduino mega
  Mirf.csnPin = 49;
*/

/*
  Mirf.cePin = 10;                          //para arduino nano
  Mirf.csnPin = 9;
*/

  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  
/*
  Mirf.setRADDR((byte *)"mega");            //para arduino mega
  Mirf.setTADDR((byte *)"nano");
*/

/*
  Mirf.setRADDR((byte *)"nano");            //para arduino nano
  Mirf.setTADDR((byte *)"mega");
*/

  Mirf.payload = 1;
  Mirf.config();
}

void loop(){
  
  if (Serial.available() > 0)               //emisor 
  {
    Serial.print("yo -> ");
    char mensaje_letra;
    while (Serial.available())
    {
      incomingByte = Serial.read();
      mensaje_letra = incomingByte;
      Serial.print(mensaje_letra);
      Mirf.send((byte *)&incomingByte);
      while(Mirf.isSending());
      delay(3);
    }
    Serial.println(" ");
  }
  
  if(Mirf.dataReady())                      //receptor
  {
    Serial.print("el -> ");
    char mensaje_letra;
    int i = 0;
    byte c;
    while (Mirf.dataReady())
    {
      Mirf.getData(&c);
      mensaje[i] = c;
      mensaje_letra = mensaje[i];
      Serial.print(mensaje_letra);
      i++;
      delay(4);
    }
    i = 0;
    Serial.println(" ");
  }
}





Descargas:


Mirf:




Ejemplos: