\#portal
) will be used to connect different parts of the schematic, but no connections have been made yet.STM32F4: SPI MOSI
à 74HC595: SER
(Donnée série)STM32F4: SPI SCK
à 74HC595: SRCLK
(Horloge de décalage)STM32F4: GPIO
(dédié) à 74HC595: RCLK
(Horloge de registre)74HC595: Q7'
(sortie de décalage) se connecte à 74HC595 suivant: SER
.C
void sendToShiftRegister(uint8_t *data, size_t len) { HAL_SPI_Transmit(&hspi1, data, len, HAL_MAX_DELAY); // Pulse the RCLK to latch the data to the output HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); HAL_Delay(1); }
Net Portal
Controls
Properties
Availability & Pricing
Distributor | Qty 1 |
---|
Assets
id=portal-symbol
Simulation
b) Ejemplos con WhilePython
# Ejemplo con If-Else numero = 10 if numero > 0: print("El número es positivo") else: print("El número es negativo o cero")
c) Ejemplos con ForPython
# Ejemplo con While contador = 5 while contador > 0: print("Contando hacia abajo:", contador) contador -= 1
d) Ejemplos utilizando una ListaPython
# Ejemplo con For for i in range(5): print("Iteración número", i)
e) Ejemplos utilizando un DiccionarioPython
# Ejemplo utilizando una Lista frutas = ["manzana", "banana", "cereza"] for fruta in frutas: print("Fruta:", fruta)
Cómo descargar el archivo del código en Google ColabPython
# Ejemplo utilizando un Diccionario datos_persona = {"nombre": "Juan", "edad": 30, "ciudad": "Madrid"} for clave, valor in datos_persona.items(): print(f"{clave}: {valor}")
if-else
, bucles while
y for
, además de la manipulación de listas y diccionarios.if-else
para la toma de decisiones, y los bucles while
y for
para la ejecución repetitiva de código.Python
import time def reloj(): while True: horas = time.strftime("%H") minutos = time.strftime("%M") segundos = time.strftime("%S") print(f"{horas}:{minutos}:{segundos}") time.sleep(1) # Ejecuta la función para iniciar el reloj reloj()
time
para obtener la hora actual del sistema.reloj()
imprime la hora cada segundo en un formato HH:MM:SS
.Python
mensajes = ["Mensaje 1", "Mensaje 2", "Mensaje 3", "Mensaje 4", "Mensaje 5"] indice = 0 def mostrar_mensaje(): print(mensajes[indice]) def avanzar(): global indice indice = (indice + 1) % len(mensajes) mostrar_mensaje() def retroceder(): global indice indice = (indice - 1) % len(mensajes) mostrar_mensaje() # Simula pulsaciones avanzar() # Pulsación para avanzar retroceder() # Pulsación para retroceder
mensajes
contiene los textos a mostrar.avanzar()
y retroceder()
ajustan el índice actual y muestran el mensaje correspondiente.Python
import time led_estado = True # True para LED1, False para LED2 def alternar_led(): global led_estado if led_estado: print("LED1 encendido") else: print("LED2 encendido") time.sleep(3) # Simula el tiempo de encendido led_estado = not led_estado # Simula pulsaciones alternar_led() # Pulsación 1 alternar_led() # Pulsación 2
led_estado
determina qué LED debe encenderse.alternar_led()
alterna el estado entre LED1 y LED2.Python
import spidev # Biblioteca para controlar el ADC spi = spidev.SpiDev() spi.open(0, 0) # Abre el bus SPI def leer_adc(canal): adc = spi.xfer2([1, (8 + canal) << 4, 0]) datos = ((adc[1] & 3) << 8) + adc[2] voltaje = (datos * 3.3) / 1023 # Convierte a voltaje return voltaje def mostrar_voltaje(): while True: voltaje = leer_adc(0) # Asume que el sensor está en el canal 0 print(f"Voltaje: {voltaje:.2f} V") time.sleep(1) # Inicia el muestreo de voltaje mostrar_voltaje()
spidev
para interactuar con el SPI de la Raspberry Pi.leer_adc()
obtiene los datos del convertidor ADC.mostrar_voltaje()
imprime el voltaje medido.RPi.GPIO
o spidev
en la Raspberry Pi para comunicarte con hardware (que no puedes probar en Colab o IDLE).Realice la programación que permita resolver los siguientes ejercicios utilizando el lenguaje de programación Python.
datetime
para manejar el tiempo en Python y una librería de interfaz para LCD, como Adafruit_CharLCD
.datetime.now()
.RPi.GPIO
para interactuar con los pulsadores.Python
from datetime import datetime import time # from Adafruit_CharLCD import Adafruit_CharLCD # Configura el LCD. (Sustituye con la configuración correcta de pines) # lcd = Adafruit_CharLCD(pin_rs=21, pin_en=20, pins_db=[16, 12, 25, 24], # cols=16, lines=2) def internal_clock(): while True: # Obtiene la hora actual now = datetime.now() current_time = now.strftime("%H:%M:%S") # Actualiza el display LCD # lcd.clear() # lcd.message("Hora:\n" + current_time) print(current_time) # Uso de print para depuración time.sleep(1) internal_clock()
Adafruit_CharLCD
controlará un display LCD. Puedes adaptarlo fácilmente para utilizar cualquier otra librería de control de LCD que prefieras o tengas disponible.Image
Entrada de Audio -> Etapa de Ganancia -> Circuito de Recorte -> Salida de Audio
Ensamblaje en Simulink
Image
Image
Image
Image
Image
Image
Image
Implementación en ProteusPython
import time # Variables de configuración inicial REF_HUMEDAD_LOW1 = 30 # Esto puede ser ajustable REF_TEMP_HIGH = 30 # Esto puede ser ajustable def read_sensor_data(): # Simula la lectura de datos de los sensores humedad_suelo = 45 # Obtener del sensor temperatura = 25 # Obtener del sensor return humedad_suelo, temperatura def control_riego(): humedad, temp = read_sensor_data() if humedad < REF_HUMEDAD_LOW1 or (temp > REF_TEMP_HIGH and humedad < REF_HUMEDAD_LOW1): activate_pump() else: deactivate_pump() def activate_pump(): print("Activando bomba...") def deactivate_pump(): print("Desactivando bomba...") while True: control_riego() time.sleep(1)
Descripción de funcionamiento del Modo control:
Ajustes de Componentes y EtiquetasPython
import RPi.GPIO as GPIO import time # Configurar los pines de GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN) # Sensor de humedad GPIO.setup(17, GPIO.IN) # Sensor de temperatura GPIO.setup(22, GPIO.OUT) # Bomba tanque 1 GPIO.setup(27, GPIO.OUT) # Bomba tanque 2 GPIO.setup(5, GPIO.IN) # Sensor N1_T1 GPIO.setup(6, GPIO.IN) # Sensor N2_T1 GPIO.setup(13, GPIO.IN) # Sensor N1_T2 GPIO.setup(19, GPIO.IN) # Sensor N2_T2 # Variables de condiciones REF_HUMEDAD_LOW1 = 30 REF_TEMP_HIGH = 30 def read_sensors(): humedad = GPIO.input(4) temperatura = GPIO.input(17) return humedad, temperatura def activate_pump_1(): GPIO.output(22, GPIO.HIGH) def deactivate_pump_1(): GPIO.output(22, GPIO.LOW) def activate_pump_2(): GPIO.output(27, GPIO.HIGH) def deactivate_pump_2(): GPIO.output(27, GPIO.LOW) def control_riego(): humedad, temperatura = read_sensors() if humedad < REF_HUMEDAD_LOW1 or (temperatura > REF_TEMP_HIGH and humedad < REF_HUMEDAD_LOW1): if GPIO.input(6) == GPIO.LOW: # si el nivel en N2_T1 es bajo activate_pump_1() elif GPIO.input(19) == GPIO.LOW: # Si el nivel en N2_T2 es bajo activate_pump_2() else: deactivate_pump_1() deactivate_pump_2() while True: control_riego() time.sleep(1) GPIO.cleanup()
Image
RELAY1_IN
y RELAY2_IN
en las entradas de control de los relés. Esto ayuda a identificar los pines de control para el tanque 1 y tanque 2 respectivamente.Python
import RPi.GPIO as GPIO import time # Configuración de GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Sensor de humedad con resistencia pull-down GPIO.setup(17, GPIO.IN) # Sensor de temperatura GPIO.setup(22, GPIO.OUT) # Relé para Bomba 1 GPIO.setup(27, GPIO.OUT) # Relé para Bomba 2 GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T1 GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T1 GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T2 GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T2 # Variables de control REF_HUMEDAD_LOW1 = 30 REF_TEMP_HIGH = 30 def read_sensors(): humedad = GPIO.input(4) temperatura = GPIO.input(17) return humedad, temperatura def control_riego(): humedad, temperatura = read_sensors() if humedad < REF_HUMEDAD_LOW1 or (temperatura > REF_TEMP_HIGH and humedad < REF_HUMEDAD_LOW1): if GPIO.input(6) == GPIO.HIGH: # Nivel en N2_T1 es alto GPIO.output(22, GPIO.HIGH) else: GPIO.output(22, GPIO.LOW) if GPIO.input(19) == GPIO.HIGH: # Nivel en N2_T2 es alto GPIO.output(27, GPIO.HIGH) else: GPIO.output(27, GPIO.LOW) else: GPIO.output(22, GPIO.LOW) GPIO.output(27, GPIO.LOW) # Looped control while True: control_riego() time.sleep(1) GPIO.cleanup()
Display LCDPython
import RPi.GPIO as GPIO import time # Configuración de GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Sensor de humedad con resistencia pull-down GPIO.setup(17, GPIO.IN) # Sensor de temperatura GPIO.setup(22, GPIO.OUT) # Relé para Bomba 1 GPIO.setup(26, GPIO.OUT) # Relé para Bomba 2, cambia GPIO27 por GPIO26 GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T1 GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T1 GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T2 GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T2 # Variables de control REF_HUMEDAD_LOW1 = 30 REF_TEMP_HIGH = 30 def read_sensors(): humedad = GPIO.input(4) temperatura = GPIO.input(17) return humedad, temperatura def control_riego(): humedad, temperatura = read_sensors() if humedad < REF_HUMEDAD_LOW1 or (temperatura > REF_TEMP_HIGH and humedad < REF_HUMEDAD_LOW1): if GPIO.input(6) == GPIO.HIGH: # Nivel en N2_T1 es alto GPIO.output(22, GPIO.HIGH) else: GPIO.output(22, GPIO.LOW) if GPIO.input(19) == GPIO.HIGH: # Nivel en N2_T2 es alto GPIO.output(26, GPIO.HIGH) # Cambiado a GPIO26 else: GPIO.output(26, GPIO.LOW) # Cambiado a GPIO26 else: GPIO.output(22, GPIO.LOW) GPIO.output(26, GPIO.LOW) # Cambiado a GPIO26 # Looped control while True: control_riego() time.sleep(1) GPIO.cleanup()
RELAY1_IN
y RELAY2_IN
donde tienes las conexiones de bobina de control en los relés para que sea claro cuál está controlando qué tanque.Image
Python
import RPi.GPIO as GPIO import time # Configuración de GPIO GPIO.setmode(GPIO.BCM)
time
para manejar retardos.Python
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Sensor de humedad con resistencia pull-down GPIO.setup(17, GPIO.IN) # Sensor de temperatura GPIO.setup(22, GPIO.OUT) # Relé para Bomba 1 GPIO.setup(26, GPIO.OUT) # Relé para Bomba 2, cambia GPIO27 por GPIO26 GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T1 GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T1 GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N1_T2 GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Nivel N2_T2
GPIO.IN
) y salida (GPIO.OUT
).GPIO.PUD_DOWN
) para garantizar que los pines tengan un estado de bajo voltaje cuando no haya otro voltaje aplicado.Python
# Variables de control REF_HUMEDAD_LOW1 = 30 REF_TEMP_HIGH = 30
Python
david998
copilot