En este tutorial veremos como fabricar un circuito para conectar a nuestro handy, en este caso un baofeng UV-5R (aunque también sirve para otras marcas y modelos) para control a larga distancia de motores, luces, bombas de agua sin la necesidad de utilizar una red celular, o en lugares que esta no exista. Veremos el armado del circuito electrónico, estudiaremos el código fuente y finamente testearemos todo el dispositivo para comprobar su funcionamiento.
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 diagramas
Componentes electrónicos
Cristal de 3,58 Mhz
Dos resistores de 100 K Ohm
Dos capacitores de disco cerámico de 100 nF
Un resistor de 300 K Ohm
Un arduino mini pro
Dos handy baofeng o similar
Módulo hc-05 (opcional)
Sólo en el caso que quieras ver los datos recibidos en tu celular podrás conectar este módulo, por eso es opcional y no obligatorio
- Funciona como dispositivo maestro y esclavo bluetooth
- Configurable mediante comandos AT
- Bluetooth V2.0+EDR
- Frecuencia de operación: 2.4 GHz Banda ISM
- Modulación: GFSK (Gaussian Frequency Shift Keying)
- Potencia de transmisión: <=4dBm, Class 2
- Sensibilidad: <=-84dBm @ 0.1% BER
- Seguridad: Autenticación y encriptación
- Perfiles Bluetooth: Puerto serie bluetooth.
- Distancia de hasta 10 metros en condiciones óptimas
- Voltaje de Operación: 3.6 VDC a 6 VDC
- Consumo Corriente: 30 mA a 50mA
- Chip: BC417143
- Versión o firmware: 3.0-20170609
- Baudios por defecto: 38400
- Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- Interfaz: Serial TTL
- Antena: Integrada en el PCB
- Seguridad: Autenticación y encriptación (Contraseña por defecto: 0000 o 1234)
- Temperatura de trabajo (Max): 75°C
- Temperatura de trabajo (Min): -20°C
- Dimensiones: 4.4 x 1.6 x 0.7 cm
Pines hembra
Ficha macho jack de 2.5
Circuito integrado MT8870de
Pinout del MT8870DE
Hoja de datos
Display oled con driver SSD1306
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también un menor consumo.
Especificaciones:
IC del controlador: SSD1306
Tamaño: OLED de 0,91 pulgadas
Resolución: 128 x 32
Tamaño: 38 * 12 mm
Número de pines: 4 pines
Tipo de interfaz:
interfaz IIC
Color de la pantalla: Blanco / azul
Descripción de los pines:
GND: Power Ground
VCC: Power + (DC 3.3 ~ 5v)
Temperatura de funcionamiento: -40 ~ 85 ℃
SCL: Línea de reloj
SDA: Línea de datos
Pantalla OLED, sin necesidad de retroiluminación, autoiluminación, Color de la pantalla: azul.
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también menor consumo; IIC (comunicaciones I2C) simplifica las conexiones.
Úselo con Arduino, ESP8266, ESP32, STM32, etc. 3.3 a 5v de voltaje
Pines macho
Zócalo para el arduino mini pro
Zócalo para el circuito integrado MT8870de
Circuito
PCB
Descargar pcb –> dtmf duino
Código Fuente
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 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 |
#include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Display SSD1306 de 128x32 int codigo; const int Pin12 = 12; const int Pin11 = 11; const int Pin10 = 10; const int Pin9 = 9; const int Pin8 = 8; const int Pin7 = 7; const int Pin6 = 6; const int Pin5 = 5; const int Pin4 = 4; const int Pin3 = 3; const int Pin2 = 2; int EstadoPin2 = 0; int EstadoPin3 = 0; int EstadoPin4 = 0; int EstadoPin5 = 0; int EstadoPin6 = 0; void setup() { Serial.begin(9600);//Velocidad del puerto serial u8g2.begin();//Inicializamos el display // Ponemos los pines 2 al 6 como entradas para el circuto integrado MT8870DE pinMode(Pin2, INPUT); pinMode(Pin3, INPUT); pinMode(Pin4, INPUT); pinMode(Pin5, INPUT); pinMode(Pin6, INPUT); //Salidas control de luces, motores, relay, triac, etc pinMode(Pin7, OUTPUT); pinMode(Pin8, OUTPUT); pinMode(Pin9, OUTPUT); pinMode(Pin10, OUTPUT); pinMode(Pin11, OUTPUT); pinMode(Pin12, OUTPUT); //Inicializamos el display con la leyenda "Preparado" codigo = 17; displayOled(); } void loop() { // Leemos el estado de los pines 2 al 6 EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); delay(110); //Boton 1 10001 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("1"); while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); codigo = 1; digitalWrite(Pin7, HIGH); displayOled(); } } //Boton 2 01001 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("2"); while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin7, LOW); codigo = 2; displayOled(); } } //Boton 3 11001 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("3"); while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin8, HIGH); codigo = 3; displayOled(); } } //Boton 4 00101 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("4"); while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin8, LOW); codigo = 4; displayOled(); } } //Boton 5 10101 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("5"); while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin9, HIGH); codigo = 5; displayOled(); } } //Boton 6 01101 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("6"); while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin9, LOW); codigo = 6; displayOled(); } } //Boton 7 11101 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("7"); while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin10, HIGH); codigo = 7; displayOled(); } } //Boton 8 00011 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("8"); while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin10, LOW); codigo = 8; displayOled(); } } //Boton 9 10011 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("9"); while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin11, HIGH); codigo = 9; displayOled(); } } //Boton 0 01011 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("0"); while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin11, LOW); codigo = 0; displayOled(); } } //Boton * 11011 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("*"); while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == LOW && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin12, HIGH); codigo = 11; displayOled(); } } //Boton # 00111 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("#"); while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); digitalWrite(Pin12, LOW); codigo = 12; displayOled(); } } //Boton MENU 10111 if (EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("MENU"); while(EstadoPin6 == HIGH && EstadoPin5 == LOW && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); codigo = 13; displayOled(); } } //Boton ALTO 01111 if (EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("UP"); while(EstadoPin6 == LOW && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); codigo = 14; displayOled(); } } //Boton BAJO 11111 if (EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ) { Serial.print("DOWN"); while(EstadoPin6 == HIGH && EstadoPin5 == HIGH && EstadoPin4 == HIGH && EstadoPin3 == HIGH && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); codigo = 15; displayOled(); } } //Boton EXIT 00001 if (EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ) { Serial.print("EXIT"); while(EstadoPin6 == LOW && EstadoPin5 == LOW && EstadoPin4 == LOW && EstadoPin3 == LOW && EstadoPin2 == HIGH ){ EstadoPin2 = digitalRead(Pin2); EstadoPin3 = digitalRead(Pin3); EstadoPin4 = digitalRead(Pin4); EstadoPin5 = digitalRead(Pin5); EstadoPin6 = digitalRead(Pin6); codigo = 16; displayOled(); } } } //Visualización el display void displayOled(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); if(codigo == 1){ u8g2.drawStr(0,24,"Codigo: 1"); } if(codigo == 2){ u8g2.drawStr(0,24,"Codigo: 2"); } if(codigo == 3){ u8g2.drawStr(0,24,"Codigo: 3"); } if(codigo == 4){ u8g2.drawStr(0,24,"Codigo: 4"); } if(codigo == 5){ u8g2.drawStr(0,24,"Codigo: 5"); } if(codigo == 6){ u8g2.drawStr(0,24,"Codigo: 6"); } if(codigo == 7){ u8g2.drawStr(0,24,"Codigo: 7"); } if(codigo == 8){ u8g2.drawStr(0,24,"Codigo: 8"); } if(codigo == 9){ u8g2.drawStr(0,24,"Codigo: 9"); } if(codigo == 0){ u8g2.drawStr(0,24,"Codigo: 0"); } if(codigo == 11){ u8g2.drawStr(0,24,"Codigo: *"); } if(codigo == 12){ u8g2.drawStr(0,24,"Codigo: #"); } if(codigo == 13){ u8g2.drawStr(0,24,"Codigo: MENU"); } if(codigo == 14){ u8g2.drawStr(0,24,"Codigo: UP"); } if(codigo == 15){ u8g2.drawStr(0,24,"Codigo: DOWN"); } if(codigo == 16){ u8g2.drawStr(0,24,"Codigo: EXIT"); } if(codigo == 17){ u8g2.drawStr(0,24,"Preparado"); } } while ( u8g2.nextPage() ); } |
PROYECTOS RECOMENDADOS