En este tutorial veremos como crear un sistema que nos permite medir el nivel de agua en forma remota, con módulos lora DRF1278DM/DRF1276DM (sx1276) y arduino mini pro, además se incluye el circuito impreso para crear la sonda de agua. Veremos los circuitos, también los códigos fuentes y el funcionamiento del sistema.
Acerca del circuito medidor de nivel de agua
El circuito integrado ULN2803 se emplea como una interface de potencia para circuitos con tecnología CMOS y TTL. Este integrado tiene en su interior 8 transistores NPN en configuración Darlington con diodos de protección, para poder controlar motores, cargas inductivas ,relés, y más. Cada salida puede controlar hasta 500 mA por lo que puede controlar diferentes tipos de cargas. Las salidas pueden conectarse en paralelo cuando es necesario manejar cargas más altas, no obstante conviene no sobrepasar la potencia total del circuito.
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
Características:
-
- 8 transistores NPN Darlington en emisor común
- 8 diodos de supresión de voltajes inversos para manejar cargas inductivas, con conexiones de cátodo común
- Salidas de 0.5A (500mA) max.
- Los transistores pueden ser conectados en paralelo para mayor capacidad de corriente
- Voltaje de sostenimiento a la salida: -0.5V a 50V
- Potencia max: 1.47 W
- Resistencia de entrada a la base: 2.7kΩ
- Voltaje de entrada: -0.5V a 30V
- Entradas compatibles TTL y CMOS de 5V
- Encapsulado: DIP 18 pines
Aplicaciones:
- Comando de relés, lámparas, ó displays (LED o de descarga de gas), etc.
- Buffers lógicos
- Drivers de línea
- Entre otras aplicaciones
Funcionamiento
Para activar cada salida de este circuito integrado, el agua, no debe ser pura, en su contenido deberá tener algunas sales, que ayudan a conducir la electricidad, que al alcanzar cada uno de los niveles en el recipiente, cierra el circuito eléctrico de las entradas del ULN2803, que detectan el nivel alto de tensión y enciende el LED correspondiente a cada salida. En cada salida podemos conectar por ejemplo un relay, un buzzer e inclusive la bomba de un motor para volver a llenar un tanque de agua, de ser necesario, hasta cierto nivel y desconectar la bomba de agua al alcanzar el límite deseado.
La siguiente figura muestra el pinout de ULN2803. Viene con 8 pines de entrada y 8 pines de salida.
La siguiente figura muestra el diagrama lógico de ULN2803. Es una representación visual y disposición de cómo se conectan los diodos en el componente.
La siguiente figura muestra el diagrama esquemático de cada par de Darlington.
Materiales
8 resistores de un 1K
8 resistores de 10K
Pines macho
Un circuito integrado uln2803apg
Un zócalo de 18 pines
Un circuito impreso
Descargar archivo gerber Gerber_circuito medidor de nivel de agua
Diagrama
Acerca de los módulos lora
El módulo de radio LoRa es un tipo de módem de radio de datos de baja velocidad de datos de largo alcance basado en Sx1276 de Semtech. Es un módulo transceptor de bajo costo de menos de 1 GHz diseñado para operaciones en las bandas ISM (Industrial Scientific Medical) y LPRD sin licencia. La modulación / demodulación del espectro de frecuencia, la operación multicanal, la alta eficiencia de ancho de banda y el rendimiento antibloqueo hacen que los módulos LoRa sean fáciles de realizar gracias al enlace inalámbrico robusto y confiable.
El módulo puede funcionar en dos modos diferentes: modo estándar y modo de red Star. En el modo estándar, actúa como módem de radio de datos transparente que se comunica con el host en el formato de datos preestablecido sin necesidad de codificación / decodificación. En el modo de red de inicio, un módulo se configurará para el nodo central y otros módulos se configurarán como módulos de nodo. La comunicación entre el módulo central y el módulo de nodo es bidireccional, pero los módulos de nodo no pueden comunicarse entre sí. Tenga en cuenta que el módulo no contiene el protocolo lorawan. Por lo tanto, la función de red en estrella de este módulo se utiliza con el protocolo en sí mismo, por lo que no es compatible con lorawan.
CARACTERÍSTICAS
- Espectro de frecuencia LoRa
- Banda de frecuencia 433 / 490Mhz ISM
- -137 dBm recibir sensibilidad
- 20 dBm máx. potencia de salida
- Puerto serie de activación
- Despertador inalámbrico
- Capacidad de red en estrella
- Tensión de alimentación 3.4 ~ 5.5V
ESPECIFICACIÓN
- Voltaje de funcionamiento: 2.1 ~ 3.6V (alimentado por batería) o 4.5 ~ 5.5V
- Banda de frecuencia de trabajo: 433 MHz
- Modulación: espectro extendido LoRa
- Potencia de salida: ≤ 20dBm
- Sensibilidad de recepción: -148dBm
- Corriente de emisión: ≤120mA
- Recibiendo corriente: ≤15.2mA
- Corriente del sueño: ≤ 3.9uA
- Tiempo de sueño: opcional 2S, 4S, 6S, 8S, 10S
- Tiempo de respiración: opcional 2ms, 4ms, 8ms, 16ms, 32ms, 64ms
- Hora de despertarse: despertarse inmediatamente
- Interfaz de comunicación: comunicación serial TTL
- Velocidad de transmisión en serie: 1200 ~ 57600,9600bps (predeterminado)
- Verificación de puerto serie: 8E1,8O1,8N1 (opcional)
- Temperatura de funcionamiento: -40 ° C – + 80 ° C
- Tamaño del producto: 34,2 * 18,4 mm / 1,35 * 0,72 pulgadas
Hojas de Datos
PIN OUT
Conexión Módulo con adaptador USB Serial
CONFIGURACIÓN
Para algunas aplicaciones, los parámetros predeterminados pueden no ser la mejor opción, por lo que los usuarios pueden necesitar
para cambiar los parámetros Hay dos formas de ajustarlos: por MCU o por PC. En
modo de configuración, el pin EN debe estar conectado a GND y luego la herramienta de configuración o
los comandos pueden funcionar de manera efectiva
Por PC: DORJI ofrece una herramienta de configuración basada en PC que se puede usar para cambiar
parámetros a través de la interfaz gráfica. Los usuarios pueden insertar el módulo DRF1278DM en
adaptador usb serialy conéctelos a la computadora y ejecute la herramienta de configuración.
DRF TOOL
Esta herramienta nos permite configurar los módulos LoRa DRF1278DM y DRF1276DM
Descargar—>DRFTOOL
Descripción del programa
UART -> Los valores se fijan en 9.6k bps y sin verificación de paridad
RF frequency–> Indica la frecuencia central de la portadora RF
RF Mode–> Modo estándar, modo central y modo nodo
RF_Factor–> Factor de dispersión de Lora. Un Mayor valor significa mayor sensibilidad pero mayor
tiempo de transmisión de aire . Solo los usuarios pueden cambiarlo en modo estándar
RF_BW–> Ancho de banda de Lora. Un Mayor valor significa menor sensibilidad. Valor recomendado: 125K. Solo los usuarios pueden cambiarlo en modo estándar.
ID de nodo–> Solo se usa para módulos en modo nodo: 0 ~ 65535
Net ID–> Solo los módulos con la misma ID de red (0 ~ 255) pueden comunicarse
entre sí. Puede evitar interferencias de módulos
Power–> Se utiliza para configurar la potencia de salida del DRF1278D. Hay 7 niveles de potencia. El 7 significa el máximo. una potencia de salida: 20dBm y 0 significa la potencia de salida más baja
Breath–> El período de activación para el módulo en modo nodo. Solo disponible para firmware 2.0 o superior
Wake timer–> El tiempo para detectar la señal inalámbrica durante el período de break, solo está disponible para
firmware 2.7 o superior
Velocidad de transmisión en serie–> Define la velocidad de datos entre DRF1278DM y el host (pc o microcontrolador)
Paridad en serie–> Define la verificación de paridad entre DRF1278DM y el host (pc o microcontrolador)
MODO ESTANDAR
El modo estándar también se denomina modo transparente en el que el módulo recibe o envía
datos al host a través del puerto serie (UART) en el formato de datos preestablecido y los usuarios no necesitan preocuparse sobre el proceso de datos dentro del módulo. El pin AUX de DRF1278DM dará
Indicación acerca de los datos IN / OUT del puerto serie con 2 ms de anticipación, que se pueden usar para despertar el anfitrión. En este modo, el pin EN debe establecerse en lógica baja en caso de que el módulo ingrese
sueño profundo.
En el modo ESTANDAR o transparente, los nodos pueden funcionar con una conexión punto-a-punto (P2P) la principal característica de este modo es que no se requiere un dispositivo intermediario que administre la comunicación, los dispositivos pueden enviar entre ellos información directamente, esto es perfecto para comunicaciones simples como por ejemplo el encendido de una luz.
La otra forma es con un tipo red de estrella donde encontramos un nodo central que se encarga de administrar la red, sus desventaja es que esta limitada a 255 redes de 255 nodos* y a que el nodo coordinador solo puede escuchar un nodo a la vez.
MODO DE RED DE ESTRELLA
En este modo, un módulo DRF1278DM necesita establecer un módulo como módulo central y
otros módulos deben ser módulos nodo para redes en estrella. Para el módulo central, funciona en
el rendimiento completo por lo que su consumo de energía es el mismo que en el modo estándar y el EN
el pin debe estar conectado a la lógica baja. El nivel lógico del pin SET para el módulo central
debe ser el mismo que el módulo de nodo.
Circuito transmisor
Código fuente del transmisor
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 |
//Transmisor de nivel de agua con módulo lora //Más proyectos en http://www.rogerbit.com //Suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 //Grupo en Facebook https://www.facebook.com/groups/RogerBit/ //declaración de variables int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin6 = 6; int pin7 = 7; int pin8 = 8; int pin9 = 9; //// int lpin2 = 0; int lpin3 = 0; int lpin4 = 0; int lpin5 = 0; int lpin6 = 0; int lpin7 = 0; int lpin8 = 0; int lpin9 = 0; int transistor = 10; void setup() { Serial.begin(9600);//Velocidad dle puerto serie debe ser la misma del módulo lora //Configuramos estos pines como entrada para la sonda de agua pinMode(pin2, INPUT_PULLUP); pinMode(pin3, INPUT_PULLUP); pinMode(pin4, INPUT_PULLUP); pinMode(pin5, INPUT_PULLUP); pinMode(pin6, INPUT_PULLUP); pinMode(pin7, INPUT_PULLUP); pinMode(pin8, INPUT_PULLUP); pinMode(pin9, INPUT_PULLUP); //Pin 10 como salida pinMode(transistor, OUTPUT); } void loop() { //Activamos el transistor durante un tiempo corto para evitar la electrolisis del agua y ahorrar energía digitalWrite(transistor, HIGH); delay(100); //Lectura de la sonda tiene en total 8 niveles lpin2 = digitalRead(pin2); lpin3 = digitalRead(pin3); lpin4 = digitalRead(pin4); lpin5 = digitalRead(pin5); lpin6 = digitalRead(pin6); lpin7 = digitalRead(pin7); lpin8 = digitalRead(pin8); lpin9 = digitalRead(pin9); delay(100); //Desactivamos el transistor y con ello el uln2803 digitalWrite(transistor, LOW); //Comparamos el valor de cada pin y en base ha eso enviaremos un dato al puerto serie if(lpin2 == LOW && lpin3 == LOW && lpin4 == LOW && lpin5 == LOW && lpin6 == LOW && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("9"); } if(lpin2 == HIGH && lpin3 == LOW && lpin4 == LOW && lpin5 == LOW && lpin6 == LOW && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("8"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == LOW && lpin5 == LOW && lpin6 == LOW && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("7"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == LOW && lpin6 == LOW && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("6"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == HIGH && lpin6 == LOW && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("5"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == HIGH && lpin6 == HIGH && lpin7 == LOW && lpin8 == LOW && lpin9 == LOW){ Serial.print("4"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == HIGH && lpin6 == HIGH && lpin7 == HIGH && lpin8 == LOW && lpin9 == LOW){ Serial.print("3"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == HIGH && lpin6 == HIGH && lpin7 == HIGH && lpin8 == HIGH && lpin9 == LOW){ Serial.print("2"); } if(lpin2 == HIGH && lpin3 == HIGH && lpin4 == HIGH && lpin5 == HIGH && lpin6 == HIGH && lpin7 == HIGH && lpin8 == HIGH && lpin9 == HIGH){ Serial.print("1"); } delay(1000); } |
Circuito receptor
Código fuente del receptor
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 |
//Receptor nivel de agua con módulo lora //Más proyectos en http://www.rogerbit.com //Suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 //Grupo en Facebook https://www.facebook.com/groups/RogerBit/ //declaración de variables String cadena; int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin6 = 6; int pin7 = 7; int pin8 = 8; int pin9 = 9; void setup () { Serial.begin(9600);// setea la velocidad del puerto serial según la velocidad del módulo lora //Pines declaraods como salidas pinMode(pin2, OUTPUT); pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); pinMode(pin8, OUTPUT); pinMode(pin9, OUTPUT); } void loop () { //lee las cadenas que ingresan al puerto serie if (Serial.available()) { cadena = String(""); while (Serial.available()) { cadena = cadena + char(Serial.read()); delay(1); } if (cadena == "9") {//compara el valor de la cadena obetinada //Enciende todos los led indicando el tanque de agua al 100 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,HIGH); digitalWrite(pin6,HIGH); digitalWrite(pin7,HIGH); digitalWrite(pin8,HIGH); digitalWrite(pin9,HIGH); } if (cadena == "8") {//compara el valor de la cadena obetinada //Enciende 7 led indicando el tanque de agua al 87 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,HIGH); digitalWrite(pin6,HIGH); digitalWrite(pin7,HIGH); digitalWrite(pin8,HIGH); digitalWrite(pin9,LOW); } if (cadena == "7") {//compara el valor de la cadena obetinada //Enciende 6 led indicando el tanque de agua al 75 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,HIGH); digitalWrite(pin6,HIGH); digitalWrite(pin7,HIGH); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } if (cadena == "6") {//compara el valor de la cadena obetinada //Enciende 5 led indicando el tanque de agua al 63 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,HIGH); digitalWrite(pin6,HIGH); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } if (cadena == "5") {//compara el valor de la cadena obetinada //Enciende 4 led indicando el tanque de agua al 50 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,HIGH); digitalWrite(pin6,LOW); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } //Activa la bocina if (cadena == "4") { //Enciende 3 led indicando el tanque de agua al 37 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,HIGH); digitalWrite(pin5,LOW); digitalWrite(pin6,LOW); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } //Desactiva la bocina if (cadena == "3") { // Enciende 2 led indicando el tanque de agua al 25 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,HIGH); digitalWrite(pin4,LOW); digitalWrite(pin5,LOW); digitalWrite(pin6,LOW); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } //Enciende la luz if (cadena == "2") { //Enciende 1 led indicando el tanque de agua al 12 porciento digitalWrite(pin2,HIGH); digitalWrite(pin3,LOW); digitalWrite(pin4,LOW); digitalWrite(pin5,LOW); digitalWrite(pin6,LOW); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } //Apaga la luz if (cadena == "1") { //Todos los led apagados, indicando el tanque de agua vacio digitalWrite(pin2,LOW); digitalWrite(pin3,LOW); digitalWrite(pin4,LOW); digitalWrite(pin5,LOW); digitalWrite(pin6,LOW); digitalWrite(pin7,LOW); digitalWrite(pin8,LOW); digitalWrite(pin9,LOW); } Serial.print(cadena); } } |
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]
VIDEO RECOMENDADO
Un comentario en “Medidor de nivel de agua remoto con módulos lora DRF1276DM/DRF1278DM y Arduino”