Net Portal
Controls
Properties
Availability & Pricing
Distributor | Qty 1 |
---|
Assets
Simulation
Image
Image
Proyecto
Image
Image
Image
Descripción de funcionamiento del Modo control:
Explicación paso a paso:Python
import RPi.GPIO as GPIO import time # Configuración de pines (sustituye X por el pin GPIO correcto de tu montaje) PIN_LCD = X PIN_BOTON_SIGUIENTE = X PIN_BOTON_ANTERIOR = X PIN_BOTON_OK = X PIN_BOTON_REGRESAR = X PIN_SENSOR_HUMEDAD = X PIN_SENSOR_TEMPERATURA = X PIN_BOMBA_TANQUE_1 = X PIN_BOMBA_TANQUE_2 = X # Inicializamos la librería GPIO.setmode(GPIO.BCM) # Configuración de pines GPIO.setup(PIN_LCD, GPIO.OUT) GPIO.setup(PIN_BOTON_SIGUIENTE, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_BOTON_ANTERIOR, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_BOTON_OK, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_BOTON_REGRESAR, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_SENSOR_HUMEDAD, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_SENSOR_TEMPERATURA, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(PIN_BOMBA_TANQUE_1, GPIO.OUT) GPIO.setup(PIN_BOMBA_TANQUE_2, GPIO.OUT) # Variables de control hora_inicio_riego = "15:35:00" hora_fin_riego = "15:40:00" modo_operacion = "temporizado" # Puede ser 'temporizado' o 'control' def leer_hora_actual(): return time.strftime("%H:%M:%S") def activar_bomba(tanque): if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, True) elif tanque == 2: GPIO.output(PIN_BOMBA_TANQUE_2, True) def desactivar_bomba(tanque): if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, False) elif tanque == 2: GPIO.output(PIN_BOMBA_TANQUE_2, False) try: while True: hora_actual = leer_hora_actual() if modo_operacion == "temporizado": if hora_inicio_riego <= hora_actual < hora_fin_riego: # Activar riego activar_bomba(1) # o 2 según el ciclo else: # Desactivar riego desactivar_bomba(1) # o 2 según el ciclo # Aquí podrías añadir más lógica para otros modos y sensores # Simular la lectura de botones y sensores # Actualizar pantalla LCD con la información deseada time.sleep(1) except KeyboardInterrupt: GPIO.cleanup()
Explicación del código:Python
import RPi.GPIO as GPIO import time # Configuración de pines GPIO PIN_LCD = 21 # Asigna los pines correctos según tu montaje en Proteus PIN_BOTON_SIGUIENTE = 19 PIN_BOTON_ANTERIOR = 20 PIN_BOTON_OK = 16 PIN_BOTON_REGRESAR = 26 PIN_SENSOR_HUMEDAD = 13 PIN_SENSOR_TEMPERATURA = 6 PIN_BOMBA_TANQUE_1 = 5 PIN_BOMBA_TANQUE_2 = 22 PIN_N1_TANQUE_1 = 23 PIN_N2_TANQUE_1 = 24 PIN_N1_TANQUE_2 = 25 PIN_N2_TANQUE_2 = 7 # Inicializa la configuración de GPIO GPIO.setmode(GPIO.BCM) # Configuración de pines como entrada o salida GPIO.setup([PIN_BOTON_SIGUIENTE, PIN_BOTON_ANTERIOR, PIN_BOTON_OK, PIN_BOTON_REGRESAR], GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup([PIN_SENSOR_HUMEDAD, PIN_SENSOR_TEMPERATURA, PIN_N1_TANQUE_1, PIN_N2_TANQUE_1, PIN_N1_TANQUE_2, PIN_N2_TANQUE_2], GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup([PIN_BOMBA_TANQUE_1, PIN_BOMBA_TANQUE_2], GPIO.OUT) # Variables de control modo_operacion = "temporizado" # Puede ser 'temporizado' o 'control' hora_inicio_riego = "15:35:00" hora_fin_riego = "15:40:00" intervalo_riego = (hora_inicio_riego, hora_fin_riego) humedad_ref_low1 = 40 humedad_ref_low2 = 30 temperatura_ref_high = 30 def leer_hora_actual(): return time.strftime("%H:%M:%S") def activar_bomba(tanque): if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, True) elif tanque == 2: GPIO.output(PIN_BOMBA_TANQUE_2, True) def desactivar_bomba(tanque): if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, False) elif tanque == 2: GPIO.output(PIN_BOMBA_TANQUE_2, False) def temporizador_riego(): hora_actual = leer_hora_actual() if hora_inicio_riego <= hora_actual < hora_fin_riego: print("Riego ON - Modo Temporizado") activar_bomba(1) # Se alterna entre 1 y 2 por cada ciclo else: print("Riego OFF - Modo Temporizado") desactivar_bomba(1) def control_riego(): humedad_suelo = GPIO.input(PIN_SENSOR_HUMEDAD) temperatura = GPIO.input(PIN_SENSOR_TEMPERATURA) if humedad_suelo < humedad_ref_low1 or (temperatura > temperatura_ref_high and humedad_suelo < humedad_ref_low2): print("Riego ON - Modo Control") activar_bomba(2) # Alternar bombas en este modo también else: print("Riego OFF - Modo Control") desactivar_bomba(2) def navegar_menu(): # Implementar navegación y visualización LCD print("Presione los botones para navegar entre opciones") def main(): try: while True: navegacion() if modo_operacion == "temporizado": temporizador_riego() elif modo_operacion == "control": control_riego() # Pausa para no saturar el bucle time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() print("Programa detenido por el usuario.") def navegacion(): # Captura la entrada de los botones para cambiar entre modos if not GPIO.input(PIN_BOTON_SIGUIENTE): if modo_operacion == "temporizado": modo_operacion = "control" else: modo_operacion = "temporizado" print(f"Cambio a modo: {modo_operacion}") time.sleep(0.5) # Evita rebotes en el botón main()
RPi.GPIO
para interactuar con los pines GPIO y time
para gestionar el tiempo.leer_hora_actual
, activar_bomba
, desactivar_bomba
: Estas leen la hora del sistema y controlan el encendido/apagado de las bombas.temporizador_riego
y control_riego
: Implementan la lógica para cada modo de operación.navegar_menu
: Se encarga de la navegación del menú, el cual puedes expandir para mostrar mensajes en una pantalla LCD (a implementar).main
: Maneja el flujo principal del programa, alternando entre modos según los botones.Python
import RPi.GPIO as GPIO import time # Configuración de pines GPIO # Asigna pines según el esquema en Proteus PIN_LCD = 21 PIN_BOTON_SIGUIENTE = 19 ... # Inicialización GPIO GPIO.setmode(GPIO.BCM) GPIO.setup([...], GPIO.IN, pull_up_down=GPIO.PUD_UP) ... # Ejemplo de función de control para riego def activar_bomba(tanque): if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, True) # Activa la bomba del tanque 1 ... def control_riego(): humedad_suelo = GPIO.input(PIN_SENSOR_HUMEDAD) ... if humedad_suelo < humedad_ref_low1: print("Activar riego") activar_bomba(2) ... # Bucle Principal ...
sudo apt-get install python3
.python3 tu_script.py
.Nota sobre Simulación en ProteusPython
import RPi.GPIO as GPIO import time # Configuración de pines GPIO para conexión de sensores y dispositivos GPIO.setmode(GPIO.BCM) ... # Función para activar una bomba específica def activar_bomba(tanque): # Activa la bomba en el tanque seleccionado if tanque == 1: GPIO.output(PIN_BOMBA_TANQUE_1, True) # Marca la bomba 1 como ON elif tanque == 2: GPIO.output(PIN_BOMBA_TANQUE_2, True) # Marca la bomba 2 como ON # ... # Bucle principal del programa try: while True: # Código para navegar el menú y controlar el riego ... except KeyboardInterrupt: GPIO.cleanup() # Limpia la configuración GPIO al cerrar el programa
python3 nombre_del_script.py
.Python
import RPi.GPIO as GPIO import time # Configurar modo de pines y definir pines GPIO GPIO.setmode(GPIO.BCM) ... # Funciones de utilidad y control def activar_bomba(tanque): # Logica para activar bomba del tanque especificado ... def temporizador_riego(): # Iniciar riego en modo temporizado ... def control_riego(): # Iniciar riego basado en valores de sensores ... # Bucle principal de ejecución try: while True: # Verifica condiciones y ejecuta según el modo de operación ... except KeyboardInterrupt: GPIO.cleanup()
Image
Image
Image
omega = 2 * pi * 702 * 10^6
tan_delta = sigma / (omega * epsilon_r * epsilon_0)
delta = atan(tan_delta) * (180 / pi)
Image
Calculate the propagation speed of the V_p wave. V_p=ω/β
Determinar el tiempo que tarda la señal en llegar al submarino. Nótese que Co=3x10^8 m/s, n_air=1,0002926 y n_sea=11
Image
Image
Calculate the propagation parameters of the wave γ,α and β.
Calculate the propagation speed of the V_p wave. V_p=ω/β
Calculate the distance d between the ship and the submarine. d=P/cos(c).
Calculate the time t it takes for the wave to reach the submarine. t=d/V_p
Calculate the penetration depth of the wave δp and compare with d. δp=1/α.
According to the concepts explored, explain the meaning of the value obtained for V_p, t and δp.
Velocidad de propagación: Esto representa la velocidad a la que las ondas electromagnéticas se propagan a través del medio.
Tiempo de propagación: Es el tiempo que la onda tarda en viajar del barco al submarino. Esto depende de la distancia y la velocidad con la que la onda se mueve.
Profundidad de penetración: Representa la distancia a la que la intensidad de la onda electromagnética se reduce a aproximadamente el 37% de su valor original dentro de un material conductor. Es un indicativo de cuán lejos puede penetrar la onda en ese material.
Calculate the distance d_1. (d_1=h_1/sen(a)).
Calculate the velocity of propagation of the wave V_p1 in the air (V_p1=Co/n_air), where n_air is the “air refractive index” and Co is the speed of light in a vacuum.
Calculate the angle of refraction b. 〖(n〗_air Sen(90°-a)=n_sea Sen(b))
Calculate the distance d_2. (d_2=h_2/cos(b))
Calculate the propagation speed of the wave V_p2 at sea (V_p2=Co/n_sea).
Based on V_p1 and d_1 determine the time t_1 of the first path 〖(t〗_1=d_1/V_p1).
Based on V_p2 and d_2 determine the time t_2 of the second path (t_2=d_2/V_p2).
Calculate the total time of the route t=t_1+ t_2.
A lossless transmission line has a characteristic impedance of Z_0=50Ω, a length of L=14m and is excited by a signal of f=702 MHz. The line is connected to an antenna with load impedance Z_L=(35+j75)Ω. Considering that V_p=2x10^8 m/s, calculate:
Wavelength λ. (V_p= λ* f)
Z_0=50Ω
L=14m
f=702 MHz=702*10^3
Z_L=(35+j75)Ω
V_p=2x10^8 m/s
λ=v_p/f
λ=(2x10^8 m/s)/(702*10^3 Hz)
Electrical length l.
Input impedance Z_in.
Reflection coefficient Γ (magnitude and phase).
Γ=Z_L+Z_O →((35+j75)Ω-50Ω)/((35+j75)Ω+50Ω)=0.34+0.58i=0.67=59°
VSWR and from Table 2, using interpolation, the reflected power in %.