|     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

- Este tutorial es la continuación de 27D_BT_HC-12_SI4463.htm, en este caso vamos a conectar el módulo HC-12 al móvil mediante un cable OTG y un módulo conversor USB-UART.

- También necesitaremos la extensión SerialOTG.aix que podemos obtener en:

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

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

- Vamos a configurar el módulo a FU3 con 9600, canal 050.

AT
AT+RX
AT+V
AT+FU3
AT+C050
AT+B9600

jConfiguracion_AT.ino

// Juan A. Villalpando
// kio4.com

#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
// Terminal SET al pin 9.

char rx_byte = 0;
String rx_str = "";
char rx_byte2 = 0;
String rx_str2 = "";

void setup() {
  Serial.begin(9600);
  HC12.begin(9600); // Cambiar segun este configurado
  pinMode(9, OUTPUT); // Terminal SET al pin 9.
}

void loop() {
  if (Serial.available() > 0) {
  rx_byte = Serial.read();
  rx_str += rx_byte;
    if (rx_byte == '\n') {
    digitalWrite(9, LOW); // Para configurar   
    delay(100);
    Serial.print(rx_str); 
    HC12.print(rx_str);
    digitalWrite(9, HIGH); // Quitamos configurar.
    rx_str = ""; 
    }
  }

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

}

- Vamos poco a poco.

___________________________
1.- El móvil con el HC-12 envía una secuencia de números. Arduino los muestra en una pantalla OLED y en el Monitor Serie.

- Creamos una aplicación para el móvil que genera un secuencia de números.

- Mediante la extensión SerialOTG enviamos esos números al puerto USB del móvil.

- En el puerto USB del móvil conectamos un cable OTG, éste lo conectamos a un conversor USB - UART y este conversor lo conectamos a un módulo HC-12 que actuará como transmisor.

- En el Arduino conectamos el otro módulo HC-12 que actuará como receptor.
___________________________
- Conversores USB - UART (Rx/Tx). Cable OTG.

- Aquí tenemos varios conversores USB - UART, nos servirán para convertir la información USB que sale del móvil a UART (Rx/Tx) para suministrársela al módulo HC-12.

- Vamos a utilizar el CP2102. También necesitaremos un cable OTG como indico en la imagen.

___________________________
- Conexiones con pantalla OLED.

- Podemos alimentar al Arduino receptor con una batería, pilas,.... y de esta manera podemos salir a un campo para comprobar distancias.

- También podemos conectarlo al ordenador.

- Si no tienes pantalla OLED, conecta el Arduino al ordenador y observa los números en el Monitor Serie.

___________________________
- Código para el receptor con pantalla OLED.

- Utilizaremos la librería U8g2.zip

jReceptor_OLED.ino

// Juan A. Villalpando
// kio4.com

#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
#include <Wire.h>
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);

char rx_byte2 = 0;
String rx_str2 = "";

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

void loop() {
  if (HC12.available() > 0) {
  rx_byte2 = HC12.read();
  rx_str2 += rx_byte2;
    if (rx_byte2 == '\n') {    
    // Serial.print(rx_str2);
    // Elimina  último caracter, '\n'
    rx_str2 = rx_str2.substring(0, rx_str2.length() - 1);

    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_logisoso28_tr);
    u8g2.drawStr(5,32,rx_str2.c_str()); // 31,24
    u8g2.sendBuffer();
   // int doble =  2 *  rx_str2.toInt();
   // HC12.println(doble); // Devuelve el valor.
    rx_str2 = ""; 
    }
 }

}

_________________________
- Código para el receptor con pantalla LCD.

- Si en vez de poner una pantalla OLED quieres poner una LCD, este sería el código.

- Las pantallas LCD se ven mejor que las OLED pero consumen más energía.

- En este código, si el mensaje enviado tiene más de16 caracteres, se muestran en dos filas.

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 = "";
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  último caracter, '\n'
    rx_str2 = rx_str2.substring(0, rx_str2.length() - 1);
    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); 
    // HC12.println(rx_str2); // Devuelve el valor.
    rx_str2 = ""; 
    }
 }

}
			   

___________________________
- Diseño.

___________________________
- Bloques.

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

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

___________________________
___________________________
___________________________
2.- El Arduino con el HC-12 envía una secuencia de números. El móvil con otro HC-12 recibe esos números y los muestra en su pantalla.

- Las conexiones de los elementos son las mismas que las que hemos visto anteriormente.

jEmisor_OLED.ino

// Juan A. Villalpando
// kio4.com

#include SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
#include <Wire.h>
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);

char rx_byte2 = 0;
String rx_str2 = "";

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

void loop() {
  if (HC12.available() > 0) {
  rx_byte2 = HC12.read();
  rx_str2 += rx_byte2;
    if (rx_byte2 == '\n') {    
    // Serial.print(rx_str2);
    // Elimina  último caracter, '\n'
    rx_str2 = rx_str2.substring(0, rx_str2.length() - 1);

    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_logisoso28_tr);
    u8g2.drawStr(5,32,rx_str2.c_str()); // 31,24
    u8g2.sendBuffer();
   // int doble =  2 *  rx_str2.toInt();
   // HC12.println(doble); // Devuelve el valor.
    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á 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 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.

________________________________

- 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