|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

___________________________

27D.- Bluetooth y HC-12 SI4463. 433 MHz. App Inventor.

p9AA_bluetooth_radiofrecuencia.aia

- Vamos a enviar un mensaje desde el móvil al Arduino por Bluetooth con una aplicación realizada con App Inventor.

- Cuando el Arduino reciba ese mensaje lo Transmitirá mediante el módulo HC-12 a 433 MHz.

- El otro Arduino Recibirá el mensaje mediante un módulo HC-12 Receptor y lo mostrará en el Monitor Serie.

- Este módulo se denomina HC-12 y contiene los chips SI4463 (transceptor) y STM8S003 (microcontrolador).

- Hoja de datos del HC-12-Datasheet.pdf
- Hoja de datos del SI4463.pdf
- Hoja de datos del STM8S003F3P6.pdf

  • Rango de frecuencia: 433.4 - 473 Mhz.
  • Sensibilidad del receptor máxima: –124 dBm
  • TTL Serie (RX, TX, GND)
  • Tipos de modulaciones (G)FSK, 4(G)FSK, (G)MSK, OOK
  • Máxima potencia de salida: +20 dBm
  • Potencia máxima de transmisión: 100 mW.
  • Sensibilidad del receptor: -117 dBm
  • Consumo de potencia en baja actividad: 10/13 mA RX, 18 mA TX a +10 dBm
  • Modo ultra bajo consumo: 30 nA apagado, 50 nA standby
  • Envío de datos: 100 bps a 1 Mbps
  • Rápido despertar.
  • TX y RX 64 byte FIFOs
  • Control de Auto Frecuencia (AFC)
  • Control Automático de Ganancia (AGC)
  • Detector de batería baja.
  • 100 canales de 400 kHz cada uno.
  • Alimentación: 3,2 V - 5,5 V
  • Cuatro modos de funcionamiento FU1, FU2, FU3 y FU5, por defecto viene en FU3, 9600 bps, canal CH001 (433,4 M)
  • Puede funcionar de uno a uno, de uno a varios, de varios a uno y de varios a varios.
  • Distancia unos 600 m - 1000 m (5000bps) - 1800 m (5000bps FU4)
  • Configuración por defecto de fábrica: FU3, 9600bps (8N1: 8 data bits, no parity, 1 stop bit), CH001 (433.4MHz), 20dBm (100mW)
  • Cuidado con este producto, hay clones de HC-12 que emiten con poco alcance.

- El modo de larga distancia es el FU4, se puede conseguir hasta 1,8 km, pero se deben enviar los datos a menor velocidad.

- Para que funcione eficientemente el modo FU4, debemos configurar su puerto Serie a 1200 bps, lo que hará que los datos se desplacen por el aire a 5000 bps. En este modo el receptor tendrá una sensibilidad de -117 dBm. El consumo 16 mA. El espaciado entre el envío de un dato y otro será de más de 1 segundo.

_____________________________________________
- Comandos AT.

- Mediante estos comandos podemos configurar los parámetros del HC-12

AT
AT+RX
AT+V
AT+C021
AT+B115200
AT+FU3

- Este módulo se puede configurar en varios modos, por defecto viene en el modo FU3 con un alcance teórico de 1.000 m, consume 16 mA y 9600 baudios.

- En el modo FU3, el módulo de transmisión ajustará automáticamente la velocidad de transmisión de datos (baudios) en el aire de acuerdo con la velocidad de transmisión (baudios) del puerto serie.

- En el modo FU4 se puede lograr un alcance de 1.800 m, pero con una velocidad de transmisión menor, 1200 en el puerto serie, que se convertirán en 5000 bps cuando va por el aire. Para enviar 60 bytes se tardará 2 segundos.

___________________________
- Conexiones de Arduino.

___________________________
- Configuración del módulo mediante los comandos AT.

- Para configurarlo el debemos conectar el terminal SET al pin 9 del Arduino.

- Una vez configurado ya no es necesario conectar este terminal.

- Este terminal SET (pin 9) debe estar en estado LOW cuando se configura, luego lo ponemos en HIGH.

AT
AT+RX
AT+V
AT+C021
AT+B115200
AT+FU3

[Cuidado con los Baudios, si el módulo estuviera configurado con otros Baudios (por ejemplo 1200) e intentaras el siguiente Script, no obtendrías respuestas, en ese caso deberías cambiar los Baudio a 1200 en el Script y en el Monitor Serie.] [Si pones el comando AT y no obtienes respuesta del HC12, debes cambiar los baudios]

jConfiguracion_AT.ino

// Juan A. Villalpando
// kio4.com

#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // TX to pin_10. RX to pin_11 of Arduino.

void setup() {
  Serial.begin(1200); // 9600 viene por defecto. 1200 en modo FU4
  HC12.begin(1200);   // 9600 viene por defecto. 1200 en modo FU4
  pinMode(9, OUTPUT); // SET to pin_9 of Arduino.
}

void loop() {
    if(Serial.available()) {   
    String command = Serial.readStringUntil('\n');
    digitalWrite(9, LOW);
    delay(100);
    Serial.println(command); 
    HC12.println(command);
    digitalWrite(9, HIGH);
    }
 
   if (HC12.available()){
   String retorno = HC12.readStringUntil('\n');
   Serial.println(retorno);
   }
}

___________________________
- Códigos de Arduino.

jBluetooth_Transmisor.ino

// Juan A. Villalpando
// kio4.com

#include <SoftwareSerial.h> 
#include <Wire.h> 

SoftwareSerial HC12(10, 11) ; // HC12(TX,RX)

char caracterfinal = '\n';
String texto;

void setup() { 
 Serial.begin(9600);
 HC12.begin(9600); 
 Wire.begin();
}

void loop() { 
  if(Serial.available()) {
    texto = Serial.readStringUntil(caracterfinal);
    Serial.println(texto);
    HC12.println(texto);
  }
} 

 

jBluetooth_Receptor.ino

// Juan A. Villalpando
// kio4.com
	  
#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11);  // HC12(TX,RX)
			
char rx_byte2 = 0;
String rx_str2 = "";

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

void loop() {
  if (HC12.available() > 0) {
  rx_byte2 = HC12.read();
  rx_str2 += rx_byte2;
    if (rx_byte2 == '\n') {    
    Serial.print(rx_str2); 
    rx_str2 = ""; 
    }
 }

}
			   

- Receptor con pantalla LCD.

jBluetooth_Receptor_LCD.ino

// Juan A. Villalpando
// kio4.com
	  
#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

char rx_byte2 = 0;
String rx_str2 = "";

void setup() {
  Serial.begin(9600);
  HC12.begin(9600);
  lcd.begin(16,2);// Columnas y filas de LCD.
}

void loop() {
  if (HC12.available() > 0) {
  rx_byte2 = HC12.read();
  rx_str2 += rx_byte2;
    if (rx_byte2 == '\n') {    
    Serial.print(rx_str2);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(rx_str2);  
    rx_str2 = ""; 
    }
 }

}
			   

___________________________
- Diseño.

___________________________
- Bloques.

- Si en el Temporizador ponemos el bloque falso, escribimos un texto y pulsamos el Botón de EnviarTexto.

- Si ponemos el bloque cierto, automáticamente se irán enviando una secuencia de números 1, 2, 3, 4,...

_______________________________________
2.- Pruebas a larga distancia. 1000 metros.

- Estos códigos están realizados para comprobar la distancia a la que podemos enviar datos.

- En estos códigos no es necesario la aplicación de App Inventor ni Bluetooth.

- Podemos utilizar pilas, para que sean independientes del ordenador.

- El código del Emisor creará números aleatorios del 10 al 99 y los enviará al Receptor.

- Enviará un mensaje de este tipo:

Aleatorio: 34 MMAleatorio: 58 NN

- Las letras MM y NN no tienen ningún significado, solo las he puesto para redondear 16 bytes en cada línea.

- Interesa enviar el mensaje completo, no solo enviar el número, también el texto de Aleatorio ya que de este modo estamos enviando unos 32 bytes (en realidad 34 con el cambio de línea).

- Cargamos el código del Emisor en un Arduino, el código del Receptor en otro Arduino con pantalla LCD, le ponemos pilas a los dos Arduino y salimos al campo a medir distancia. En principio lo hacemos en modo FU3, debemos alcanzar los 1000 metros.

jBluetooth_Emisor_Distancia.ino

// Juan A. Villalpando
// kio4.com
	  
#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11);  // HC12(TX,RX)
		
char caracterfinal = '\n';
String alea1 = "0";
String alea2 = "0";
String texto;

void setup() { 
 Serial.begin(9600);
 HC12.begin(9600); 
 Wire.begin();
}

void loop() { 
    alea1 = (String) random(10,99);
    alea2 = (String) random(10,99);
    texto = "Aleatorio: " + alea1 + " MM" + "Aleatorio: " + alea2 + " NN";
    Serial.println(texto);
    HC12.println(texto);
    delay(1000);
}
			   

 

jBluetooth_Receptor_LCD_Distancia.ino

// Juan A. Villalpando
// kio4.com
	  
#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

char rx_byte2 = 0;
String rx_str2 = "";
String fila1 = "";
String fila2 = "";

void setup() {
  Serial.begin(9600);
  HC12.begin(9600);
  lcd.begin(16,2);// Columnas y filas de LCD.
}

void loop() {
  if (HC12.available() > 0) {
  rx_byte2 = HC12.read();
  rx_str2 += rx_byte2;
    if (rx_byte2 == '\n') {    
    Serial.print(rx_str2);
    // Elimina 2 últimos caracteres, '\n'
    rx_str2 = rx_str2.substring(0, rx_str2.length() - 2);
    fila1 = rx_str2.substring(0,16);
    fila2 = rx_str2.substring(16,32);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(fila1);  
    lcd.setCursor(0,1);
    lcd.print(fila2); 
    rx_str2 = ""; 
    }
 }		   

_______________________________________
3.- Pruebas a larga distancia. FU4. 1800 metros.

- Una vez visto el alcancen en el modo FU3, que debe ser unos 1000 metros, vamos a comprobar el mismo código en el modo FU4, para ver si llegamos a los 1800 metros.

- Para lograr esa distancia deben verse los dos dispositivos, no debe haber árboles, edificios,... entre uno y otro.

- Al configurarlo en el modo FU4 se establecerá automáticamente una velocidad de 1200 bps, lo que hará que los datos se desplacen por el aire a 5000 bps. En este modo el receptor tendrá una sensibilidad de -117 dBm. El consumo 16 mA. Si añadimos al Arduino tendremos un consumo de unos 60 mA. El espaciado entre el envío de un dato y otro será de más de 1 segundo.

- Para ello cargamos en los dos Arduinos el programa de configuración, el que he llamado Configuracion_AT.ino y está al principio de esta página.

- Para ponerlos en el modo FU4, recuerda que debes conectar el terminal SET del módulo HC12 al pin 9 del Arduino.

AT
AT+RX
AT+FU4
AT+RX

Atención, ahora no veremos los datos en el Monitor Serie, ya que el modo FU4 ha cambiado automáticamente sus baudios a 1200. Para volver a verlo, vamos al código de Configuracion_AT.ino y cambiamos estas líneas:

void setup() { 
Serial.begin(1200);
HC12.begin(1200);
}

- Ponemos al Monitor Serie a 1200.

AT+RX
OK+B1200
OK+RC001
OK+RP:+20dBm
OK+FU4

 

- Cuidado con esto de las velocidades, puede ocurrir que no veas nada en el Monitor Serie y es porque no has cambiado correctamente los baudios.

- Ya lo tenemos en modo FU4, ahora modificamos un poco los códigos del Emisor y Receptor, ponemos las velocidades a 1200. Quitamos el cable SET.

- Cargamos el código del Emisor y Receptor en el Arduino correspondiente. Salimos al campo a medir distancia.

- En la aplicación del móvil, en la extensión OTG debemos cambiar la velocidad BaudRate a 1200.

- Recuerda que el módulo viene de fábrica con esta configuración:

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información