Tu tarjeta tiene soporte de pulseio
, lo que significa que puedes controlar la intensidad de un LED por medio de PWM, puedes controlar servo motores, hacer sonar bocinas sencillas, y controlar dispositivos de tipo "pulse train" como DHT22 e infrarojos.
¡Casi todos los pines tienen capacidades de PWM! Por ejemplo, todas las tarjetas con ATSAMD21 tiene un pin A0 el cual es una salida analógica 'verdadera' y no tiene capacidades de PWM.
PWM con Frecuencia Fija
Este ejemplo va a demostrar como utilizar PWM para cambiar la intensidad del LED rojo de tu tarjeta.
Copia y pega el código dentro de code.py utilizando tu editor favorito, y salva el archivo.
# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials: PWM with Fixed Frequency example.""" import time import board import pwmio # LED setup for most CircuitPython boards: led = pwmio.PWMOut(board.LED, frequency=5000, duty_cycle=0) # LED setup for QT Py M0: # led = pwmio.PWMOut(board.SCK, frequency=5000, duty_cycle=0) while True: for i in range(100): # PWM LED up and down if i < 50: led.duty_cycle = int(i * 2 * 65535 / 100) # Up else: led.duty_cycle = 65535 - int((i - 50) * 2 * 65535 / 100) # Down time.sleep(0.01)
Creando una Salida PWM
led = pulseio.PWMOut(board.D13, frequency=5000, duty_cycle=0)
Como estamos usando el LED que trae la tarjeta, llamamos al objeto led
, usamos pulseio.PWMOut
para crear la salida y pasarle el pin D13
para que use el LED.
Ciclo Principal
El ciclo principal utiliza range()
para recorrer el ciclio. Cuando el rango está en menos de 50, le aumenta el brillo al LED vía PWM, y cuando el rango está por arriba de 50, le baja el brillo por medio de PWM. ¡Así es como transiciona el LED entre brillante y oscuro!
El time.sleep()
es necesario para permitirle al proceso de PWM que ocurra en cierta cantidad de tiempo. ¡De otra forma sucedería muy rápido para poderlo observar!
La salida con frecuencias fijas está bien para pulsar LEDs o controlar servos. Pero si quieres realizar sonidos con un parlante tipo piezo, debes variar la frecuencia.
El siguiente ejemplo utiliza pulseio
para realizar una serie de tonos sobre un parlante tipo piezo.
Para utilizar con cualquier de las tarjetas con M0, no se necesita realizar cambios al código.
Para utilizar con las Metro M4 Express, ItsyBitsy M4 Express o la Feather M4 Express, debes comentar piezo = pulseio.PWMOut(board.A2, duty_cycle=0, frequency=440, variable_frequency=True)
y descomentar piezo = pulseio.PWMOut(board.A1, duty_cycle=0, frequency=440, variable_frequency=True)
. ¡A2 no es un pin con capacidades de PWM en las tarjetas con chips M4!
# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials PWM with variable frequency piezo example""" import time import board import pwmio # For the M0 boards: piezo = pwmio.PWMOut(board.A2, duty_cycle=0, frequency=440, variable_frequency=True) # For the M4 boards: # piezo = pwmio.PWMOut(board.A1, duty_cycle=0, frequency=440, variable_frequency=True) while True: for f in (262, 294, 330, 349, 392, 440, 494, 523): piezo.frequency = f piezo.duty_cycle = 65535 // 2 # On 50% time.sleep(0.25) # On for 1/4 second piezo.duty_cycle = 0 # Off time.sleep(0.05) # Pause between notes time.sleep(0.5)
Si tienes la librería de simpleio
cargada en tu tarjeta, tenemos un bonito utilitario para realizar un tono en el parlante de tipo piezo con un solo comando.
Para utilizar tarjetas M0, no es necesario realizar cambios al código.
Para utilizar las Metro M4 Express, ItsyBitsy M4 Express o la Feather M4 Express, debes comentar simpleio.tone(board.A2, f, 0.25)
y descomentar simpleio.tone(board.A1, f, 0.25)
. ¡A2 no es un pin con capadades PWM en las tarjetas con chipsM4!
# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials PWM piezo simpleio example""" import time import board import simpleio while True: for f in (262, 294, 330, 349, 392, 440, 494, 523): # For the M0 boards: simpleio.tone(board.A2, f, 0.25) # on for 1/4 second # For the M4 boards: # simpleio.tone(board.A1, f, 0.25) # on for 1/4 second time.sleep(0.05) # pause between notes time.sleep(0.5)
Como puedes observar, ¡es mucho más sencillo!
Cableándolo
Utilice los diagramas a continuación como base para cablear tu parlante de tipo piezo. Conecte una pata del piezo al pin A2 de las tarjetas M0 o A1 para las tarjetas con M4, y la otra pata a tierra. No importa cual pata se conecte al pin. ¡Son intercambiables!
Circuit Playground Express
Utilice clips de lagarto para conectar A2 y uno de las tierras (GND) a diferentes patas del parlante tipo piezo.
CPX tiene PWM en los siguientes pines: A1, A2, A3, A6, RX, LIGHT, A8, TEMPERATURE, A9, BUTTON_B, D5, SLIDE_SWITCH, D7, D13, REMOTEIN, IR_RX, REMOTEOUT, IR_TX, IR_PROXIMITY, MICROPHONE_CLOCK, MICROPHONE_DATA, ACCELEROMETER_INTERRUPT, ACCELEROMETER_SDA, ACCELEROMETER_SCL, SPEAKER_ENABLE.
NO hay NO PWM en: A0, SPEAKER, A4, SCL, A5, SDA, A7, TX, BUTTON_A, D4, NEOPIXEL, D8, SCK, MOSI, MISO, FLASH_CS.
Trinket M0
Nota: ¡A2 en la Trinket está etiquetado como Digital "0"!
Utilice cables para conectar GND y D0 a diferentes patas del parlante tipo piezo.
Las Trinket tienen PWM disponible en los siguientes pines: D0, A2, SDA, D2, A1, SCL, MISO, D4, A4, TX, MOSI, D3, A3, RX, SCK, D13, APA102_MOSI, APA102_SCK.
NO hay PWM en: A0, D1.
Gemma M0
Utilice cables para conectar GND y A2 a diferentes patas del parlante tipo piezo.
Las Gemma tienen PWM disponible en los siguientes pines: A1, D2, RX, SCL, A2, D0, TX, SDA, L, D13, APA102_MOSI, APA102_SCK.
NO hay PWM en: A0, D1.
Feather M0 Express
Utilice cables para conectar GND y A2 a diferentes patas del parlante tipo piezo.
Las Feather M0 Express tienen PWM disponible en los siguientes pines: A2, A3, A4, SCK, MOSI, MISO, D0, RX, D1, TX, SDA, SCL, D5, D6, D9, D10, D11, D12, D13, NEOPIXEL.
NO hay PWM en: A0, A1, A5.
Feather M4 Express
Utilice cables para conectar GND y A1 a diferentes patas del parlante tipo piezo.
Para utilizar A1, descomente la línea que configura el pin, y descomente la línea que etiquetada para las tarjetas M4. ¡Vea los detalles arriba!
Las Feather M4 Express tienen PWM disponible en los siguientes pines: A1, A3, SCK, D0, RX, D1, TX, SDA, SCL, D4, D5, D6, D9, D10, D11, D12, D13.
NO hay PWM en: A0, A2, A4, A5, MOSI, MISO.
ItsyBitsy M0 Express
Utilice cables para conectar G y A2 a diferentes patas del parlante tipo piezo.
Las ItsyBitsy M0 Express tienen PWM disponible en los siguientes pines: D0, RX, D1, TX, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, L, A2, A3, A4, MOSI, MISO, SCK, SCL, SDA, APA102_MOSI, APA102_SCK.
NO hay PWM en: A0, A1, A5.
ItsyBitsy M4 Express
Utilice cables para conectar G y A1 a diferentes patas del parlante tipo piezo.
Para utilizar A1, descomente la línea que configura el pin, y descomente la línea que etiquetada para las tarjetas M4. ¡Vea los detalles arriba!
Las ItsyBitsy M4 Express tienen PWM disponible en los siguientes pines: A1, D0, RX, D1, TX, D2, D4, D5, D7, D9, D10, D11, D12, D13, SDA, SCL.
NO hay PWM en: A2, A3, A4, A5, D3, SCK, MOSI, MISO.
Metro M0 Express
Utilice cables para conectar GND y A2 a diferentes patas del parlante tipo piezo.
Las Metro M0 Express tienen PWM disponible en los siguientes pines: A2, A3, A4, D0, RX, D1, TX, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, SDA, SCL, NEOPIXEL, SCK, MOSI, MISO.
NO hay PWM en: A0, A1, A5, FLASH_CS.
Metro M4 Express
Utilice cables para conectar GND y A1 a diferentes patas del parlante tipo piezo.
Para utilizar A1, descomente la línea que configura el pin, y descomente la línea que etiquetada para las tarjetas M4. ¡Vea los detalles arriba!
Las Metro M4 Express tienen PWM en: A1, A5, D0, RX, D1, TX, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, SDA, SCK, MOSI, MISO
NO hay PWM en: A0, A2, A3, A4, SCL, AREF, NEOPIXEL, LED_RX, LED_TX.
¿Donde si tengo PWM?
¿Quiere revisar cuales pines tienen PWM por ud mismo? ¡Hemos escrito este útil script! Intenta configurar PWM en cualquier pin disponible, y te hace saber en cuales funciona y en cuales no. ¡Pruébalo!
# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials PWM pin identifying script""" import board import pwmio for pin_name in dir(board): pin = getattr(board, pin_name) try: p = pwmio.PWMOut(pin) p.deinit() print("PWM on:", pin_name) # Prints the valid, PWM-capable pins! except ValueError: # This is the error returned when the pin is invalid. print("No PWM on:", pin_name) # Prints the invalid pins. except RuntimeError: # Timer conflict error. print("Timers in use:", pin_name) # Prints the timer conflict pins. except TypeError: # Error returned when checking a non-pin object in dir(board). pass # Passes over non-pin objects in dir(board).
Text editor powered by tinymce.