Muy buenas, en otra revisión de hoy veremos el módulo Bluetooth 4.0 Bluno Beetle Ble de la empresa DFROBOT, un interesante dispositivo con el que podremos darle vida a nuestros proyectos, en un tamaño muy compacto y con bajo consumo de energía, sin duda algo que encanta en el mundo Maker.
Por otro lada ademas de integrar Bluetooth 4.0 tambien viene con un arduino uno, con menos pines por supuesto, pero en un tamaño muy reducido que nos recuerda al de una tarjeta SD.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagrama
¿Que es el Bluno Beetle Ble?
El Beetle Ble, es una placa Arduino Uno con bluetooth 4.0 (BLE). Es probablemente la placa Arduino BLE más pequeño en el mercado. Utiliza IDE estándar de Arduino para cargar códigos sin necesidad de biblioteca y controladores adicionales. Este Beetle BLE es otro hito en la línea Beetle, lo que hace que los usuarios de bricolaje tengan más opciones en el diseño del proyecto. Es totalmente compatible con Bluno en instrucciones y procedimientos. Soporta los modos Bluetooth HID e ibeacon.
El Beetle BLE ofrece un super pequeño y de bajo costo Arduino con bluetooth 4.0. El Beetle BLE se puede utilizar para proyectos, tales como bricolaje, talleres, wearable E-Textiles y educativo. Para los estudiantes y los fabricantes que no pueden permitirse demasiado en la compra de hardware, Beetle puede ser una gran solución.
Al igual que una placa Arduino nativa , pero con Bluetooth 4.0. Un APP llamado Play Bluno está disponible en IOS y Android, lo que da un acceso rápido a este pequeña placa.
No sólo soporta la programación USB, sino también el método de carga inalámbrica.
CARACTERISTICAS
- ATmega328 @ 16MHz
- Bluetooth baja energía (BT 4.0)
- Puerto micro USB
- Tamaño Super Compacto
- Soporta Bluetooth HID e ibeacon
- Comaptible con todas las series Bluno de DFRobot
- Soporte de programación inalámbrica
ESPECIFICACIÓN
- Chip Bluetooth: CC2540
- Sensibilidad: -93dBm
- Temperatura de trabajo: -10 ℃ ~ +85 ℃
- Distancia máxima: 50m (1968.50 “) (campo abierto)
- Microcontrolador: ATmega328
- Frecuencia de reloj: 16 MHz
- Tensión de funcionamiento: 5V DC
- Voltaje de entrada: <8V (Vin <8V)
- Pin digital x4
- Pin analógico x4
- Salida PWM x2
- Interfaz UART x1
- Interfaz I2C x1
- Interfaz micro USB x1
- Puerto de alimentación x2
- Tamaño: 28.8mm X 33.1mm (1.13 “x 1.30”)
- Peso: 10g
Lista de Materiales
Bluno Beetle Ble
Módulo receptor infrarrojo, con el cual capturaremos los códigos del control remoto
Sensor TSOP1838
Resistor 330 ohm
Transistor NPN BC548
Diodo emisor infrarrojo
Lo primero que debemos hacer es subir el siguiente skecht, al beetle ble, con este ejemplo vamos a capturar los códigos del control remoto que queremos clonar, recordemos que el ejemplo por defecto utiliza el pin número 11 el cual el beetle ble no posee pero simplemente cambiamos por el pin número 5, y este problema ya está solucionado
Abrimos el terminal serial, apretamos el botón del control que queremos capturar, ahora observaremos algo parecido a lo siguiente
La información que nos interesa es el Encoding en este ejemplo el RC5, el code el número 820 y los bits que son 12 para el ejemplo que se muestra.
Código fuente para capturar códigos del control remoto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
//------------------------------------------------------------------------------ // Include the IRremote library header // #include <IRremote.h> //------------------------------------------------------------------------------ // Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) // int recvPin = 5; IRrecv irrecv(recvPin); //+============================================================================= // Configure the Arduino // void setup ( ) { Serial.begin(9600); // Status message will be sent to PC at 9600 baud irrecv.enableIRIn(); // Start the receiver } //+============================================================================= // Display IR code // void ircode (decode_results *results) { // Panasonic has an Address if (results->decode_type == PANASONIC) { Serial.print(results->address, HEX); Serial.print(":"); } // Print Code Serial.print(results->value, HEX); } //+============================================================================= // Display encoding type // void encoding (decode_results *results) { switch (results->decode_type) { default: case UNKNOWN: Serial.print("UNKNOWN"); break ; case NEC: Serial.print("NEC"); break ; case SONY: Serial.print("SONY"); break ; case RC5: Serial.print("RC5"); break ; case RC6: Serial.print("RC6"); break ; case DISH: Serial.print("DISH"); break ; case SHARP: Serial.print("SHARP"); break ; case JVC: Serial.print("JVC"); break ; case SANYO: Serial.print("SANYO"); break ; case MITSUBISHI: Serial.print("MITSUBISHI"); break ; case SAMSUNG: Serial.print("SAMSUNG"); break ; case LG: Serial.print("LG"); break ; case WHYNTER: Serial.print("WHYNTER"); break ; case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ; case PANASONIC: Serial.print("PANASONIC"); break ; case DENON: Serial.print("Denon"); break ; } } //+============================================================================= // Dump out the decode_results structure. // void dumpInfo (decode_results *results) { // Check if the buffer overflowed if (results->overflow) { Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN"); return; } // Show Encoding standard Serial.print("Encoding : "); encoding(results); Serial.println(""); // Show Code & length Serial.print("Code : "); ircode(results); Serial.print(" ("); Serial.print(results->bits, DEC); Serial.println(" bits)"); } //+============================================================================= // Dump out the decode_results structure. // void dumpRaw (decode_results *results) { // Print Raw data Serial.print("Timing["); Serial.print(results->rawlen-1, DEC); Serial.println("]: "); for (int i = 1; i < results->rawlen; i++) { unsigned long x = results->rawbuf[i] * USECPERTICK; if (!(i & 1)) { // even Serial.print("-"); if (x < 1000) Serial.print(" ") ; if (x < 100) Serial.print(" ") ; Serial.print(x, DEC); } else { // odd Serial.print(" "); Serial.print("+"); if (x < 1000) Serial.print(" ") ; if (x < 100) Serial.print(" ") ; Serial.print(x, DEC); if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one } if (!(i % 8)) Serial.println(""); } Serial.println(""); // Newline } //+============================================================================= // Dump out the decode_results structure. // void dumpCode (decode_results *results) { // Start declaration Serial.print("unsigned int "); // variable type Serial.print("rawData["); // array name Serial.print(results->rawlen - 1, DEC); // array size Serial.print("] = {"); // Start declaration // Dump data for (int i = 1; i < results->rawlen; i++) { Serial.print(results->rawbuf[i] * USECPERTICK, DEC); if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one if (!(i & 1)) Serial.print(" "); } // End declaration Serial.print("};"); // // Comment Serial.print(" // "); encoding(results); Serial.print(" "); ircode(results); // Newline Serial.println(""); // Now dump "known" codes if (results->decode_type != UNKNOWN) { // Some protocols have an address if (results->decode_type == PANASONIC) { Serial.print("unsigned int addr = 0x"); Serial.print(results->address, HEX); Serial.println(";"); } // All protocols have data Serial.print("unsigned int data = 0x"); Serial.print(results->value, HEX); Serial.println(";"); } } //+============================================================================= // The repeating section of the code // void loop ( ) { decode_results results; // Somewhere to store the results if (irrecv.decode(&results)) { // Grab an IR code dumpInfo(&results); // Output the results dumpRaw(&results); // Output the results in RAW format dumpCode(&results); // Output the results as source code Serial.println(""); // Blank line between entries irrecv.resume(); // Prepare for the next value } } |
Con este código vamos a enviar el código capturado, hay que tener en cuanta que esta librería no soporta todos los controles remotos que existen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#include <IRremote.h>//Librería para controles remotos infrarrojos IRsend irsend; //Variables char a; int led13=13; int i=0; void setup() { pinMode(led13, OUTPUT);//Led 13 como salida para generar un destello Serial.begin(115200); //Velocidad del puerto serial } void loop() { //Leemos los caracteres que ingresan al puerto serial if (Serial.available()) { a=Serial.read();//Le asignamos a la variable "a" el caracter leido del puerto serial Serial.write(a);//Reenviamos el mismo valor al puerto serial Serial.println(); //Enviamos el caracter de nueva linea //-----canal arriba------- if(a=='a'){ digitalWrite(led13, HIGH); //Enciende el led al enviar un comando al televisor if(i==0){ irsend.sendRC5(0x820, 12);//Código para cambiar el canal i=1; } if(i==1){ irsend.sendRC5(0x20, 12);//En esta caso si se vuelve a paretar el mismo botón envía este código i=0; } delay(200); digitalWrite(led13, LOW);//Apaga el led } //-----canal abajo------- if(a=='b'){ digitalWrite(led13, HIGH); if(i==0){ irsend.sendRC5(0x821, 12); i=1; } if(i==1){ irsend.sendRC5(0x21, 12); i=0; } delay(200); digitalWrite(led13, LOW); } //-----Subir volumen------ if(a=='c'){ digitalWrite(led13, HIGH); if(i==0){ irsend.sendRC5(0x810, 12); i=1; } if(i==1){ irsend.sendRC5(0x10, 12); i=0; } delay(200); digitalWrite(led13, LOW); } //-----Bajar volumen----- if(a=='d'){ digitalWrite(led13, HIGH); if(i==0){ irsend.sendRC5(0x811, 12); i=1; } if(i==1){ irsend.sendRC5(0x11, 12); i=0; } delay(200); digitalWrite(led13, LOW); } } } |
Bluno Basic Demo
Bluno Basic Demo es una aplicación desarrollada por DFROBOT y está para descargar para Andrioid y IOS, es de código abierto, así qu e podemos adaptarla a nuestras necesidades y gustos.
Esta aplicación escanea en busca de nuestro Bluno, y una vez que nos aparezca lo seleccionamos, y en el caso de que nunca hubiésemos puesto la contraseña la misma por defecto es 000000 (seis ceros), esta puede ser modificada por comandos At de ser necesario.
Para descargar la aplicación Android puedes hacerlo de aquí BlunoBasicDemo
Y para IOS debes compilar el código para descargarlo https://github.com/DFRobot/BlunoBasicDemo/tree/master/IOS/BlunoBasicDemo
Nota importante: No todos los celulares, tables y pc soporta bluetooth 4.0, esto hay que tenerlo en cuenta y ver las características del dispositivo que vamos a usar, antes de probar, si no estaremos perdiendo el tiempo.
Armado del circuito
La conexión del circuito es muy simple, el pin número 5 del Bluno Beetle se conecta al pin de señal de modulo Sensor TSOP1838, este módulo se alimenta con 5 voltios obtenidos del mismo Bluno. El pin 3 del bluno va conectado a un resistor de 330 ohm, el cual se conecta a la base del transistor BC548, el colector se conecta directamente a 5 voltios del bluno, el emisor va conectado al ánodo del diodo emisor infrarrojo y cátodo de este diodo a tierra
Pint Out
Atención la contraseña por defecto del Bluno Beetle Ble es 000000
Circuito
Puedes comprar a Bluno Blettle Ble en este link
Para más información visita la página de DFRobot con su Wiki
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagrama
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]