|     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:

https://github.com/rkl099/Appinventor-SerialOTG/blob/main/com.SerialOTG.aix

___________________________
- 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 FU4 con 1200, canal 050.

- En este modo podremos conseguir la máxima distancia (1800 m), aunque solo podremos enviar paquetes de unos 32 bytes cada 2 segundos.

- Al configurarlo como FU4 automáticamente se establece en 1200.

AT
AT+RX
AT+V
AT+FU4
AT+C050
AT+B1200

- Mediante el siguiente programa podemos configurar con los comandos AT.

- Inicialmente está puesto a 9600, en el momento que cambies a modo FU4 se cambiará a 1200, por lo cual si quieres modificar la configuración deberás cambiar en este programa los 9600 a 1200.

- Para configurar el Monitor Serie debe estar en "Ambos NL & CR"

jConfiguracion_AT.ino Para HC-12

// 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(9600); // 9600 viene por defecto. 1200 en modo FU4
  HC12.begin(9600);   // 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); // Importante println
    digitalWrite(9, HIGH);
    }
 
   if (HC12.available()){
   String retorno = HC12.readStringUntil('\n');
   Serial.println(retorno);
   }
}

- Código para configurar el Bluetooth HC-06.

- Para configurar el Monitor Serie debe estar en "Nueva Línea"

jConfiguracion_AT.ino Para Bluetooth HC-06

// 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(9600); // 9600 viene por defecto. 1200 en modo FU4
  HC12.begin(9600);   // 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.print(command); // Importante print
    digitalWrite(9, HIGH);
    }
 
   if (HC12.available()){
   String retorno = HC12.readStringUntil('\n');
   Serial.println(retorno);
   }
}

 

___________________________
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

- He puesto dos códigos, el de la derecha está más simplificado.

jReceptor_OLED.ino

// Juan A. Villalpando
// kio4.com

#include <SoftwareSerial.h>
SoftwareSerial HC12(10,11); // HC12(TX,RX)
#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 = ""; 
    }
 }

}
jReceptor_OLED.ino


// Juan A. Villalpando
// kio4.com

#include <U8g2lib.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); 

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

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

   u8g2.begin();
   u8g2.clearBuffer();
   u8g2.setFont(u8g2_font_logisoso28_tr);
   u8g2.drawStr(30,31,"****");
   u8g2.sendBuffer();
}

void loop() {
    if(HC12.available()) {
    String texto = HC12.readStringUntil('\n');
    // Serial.print(texto);

    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_logisoso28_tr);
    u8g2.drawStr(30,31,texto.c_str());
    u8g2.sendBuffer();
    // String retorno = "R: " + texto;
    // HC12.println(retorno); // Return
    }
 }

_________________________
- 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 <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á 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 sus baudios automáticamente 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.

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

p10A_OTG_CP2102_HC12.aia

- El móvil envía mediante el cable OTG y el conversor una secuencia de números al Arduino con el Emisor.

- El Receptor toma esos números y los muestra en la pantalla OLED.

 

jEmisor_OLED.ino

#include <SoftwareSerial.h>

SoftwareSerial HC12(10, 11) ; // HC12(TX,RX)
SoftwareSerial FTDI(2,3); // FTDI(TX,RX)

String texto;
String retorno;
int x = 100;

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

void loop() {
 if(FTDI.available()) {
    texto = FTDI.readStringUntil('\n'); // from App by FTDI
    HC12.println(texto);
 }
 /** // Retorno
 if(HC12.available()> 0) {
    retorno = HC12.readStringUntil("\n"); // from App by FTDI
    Serial.println(retorno);
   // FTDI.println(retorno);
  }
*/
  // x = x + 1;
  // String t = (String) x + "            "; // Debe tener 15 bytes. 12 espacios.
  // HC12.println(t);
  // delay(1000);
}

 

jReceptor_OLED.ino


// Juan A. Villalpando
// kio4.com

#include <U8g2lib.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); 

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

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

   u8g2.begin();
   u8g2.clearBuffer();
   u8g2.setFont(u8g2_font_logisoso28_tr);
   u8g2.drawStr(30,31,"****");
   u8g2.sendBuffer();
}

void loop() {
    if(HC12.available()) {
    String texto = HC12.readStringUntil('\n');
    // Serial.print(texto);

    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_logisoso28_tr);
    u8g2.drawStr(30,31,texto.c_str());
    u8g2.sendBuffer();
    // String retorno = "R: " + texto;
    // HC12.println(retorno); // Return
    }
 }

- Corrientes en el Arduino

https://electronics.stackexchange.com/questions/67092/how-much-current-can-i-draw-from-the-arduinos-pins#:~:text=According%20to%20the%20v2.,max%20current%20rating%20of%2050mA.

 

 

________________________________

- 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