Giuseppe Parrello

 

Embedded Cicalino


Introduzione

Con questo progetto andremo a gestire un cicalino, usando la scheda di sviluppo FTDI FT232H (di cui esiste una pagina dedicata su questo sito) e la scheda di sviluppo NXP PCA9685 (di cui esiste una pagina dedicata su questo sito).

 

Collegamento

Il cicalino deve essere collegato alla scheda di sviluppo NXP PCA9685. I connettori di collegamento sono elencati qui di seguito:

Immagine Scheda FT232H Scheda PCA9685 Cicalino

FT232H - PCA9685 - BUZZER

AD0 SCL ------
AD1 + AD2 SDA ------
+5V VCC ------
GND GND ------
------ Canale 0 - PWM SIG
+5V ------ VCC
------ Canale 0 - GND GND

 

Codice Python

Per gestire il cicalino, è richiesta la presenza della libreria "PCA9685_FTDI".
Il seguente esempio di codice Python suona il cicalino usando diverse frequenze (con lo stesso PWM), in seguito suona il cicalino usando un intervallo di PWM:

# Simple demo of of the PCA9685 PWM servo/LED controller library.
import time

# Import the PCA9685 module.
import pca9685_ftdi

# Initialise the PCA9685 using the default address (0x40).
pwm = pca9685_ftdi.PCA9685_FTDI()

# Configure min and max pulse lengths
SERVOMIN   = 0     # This is the 'minimum' pulse length count (out of 4096)
SERVOMAX   = 4095  # This is the 'maximum' pulse length count (out of 4096)
FREQ_STEP  = 25
PWM_STEP   = 20

# our channel # counter
channel = 0

print('\nPlaying buzzer on channel 0, press Ctrl-C to quit...')

try:

    print("\nSetting several frequencies with the same PWM...")
    for pulselen in range(5, SERVOMAX, FREQ_STEP):
        pwm.set_pwm_freq(pulselen)
        pwm.setPWM(channel, 0, 50)

    time.sleep(0.5)

    print("\nDrive buzzer using setPWM()")
    for pulselen in range(SERVOMIN, SERVOMAX, PWM_STEP):
        pwm.setPWM(channel, 0, pulselen)

    time.sleep(0.5)

    print("\nDrive buzzer using setPWM() - Reverse Mode")
    for pulselen in range(SERVOMAX, SERVOMIN, -PWM_STEP):
        pwm.setPWM(channel, 0, pulselen)

    pwm.set_all_pwm(0, 0)
    pwm.close()

except KeyboardInterrupt:
    # Capture keyboard ^C to exit the program
    print('\nYou terminated the program. The program ends!')
    pwm.set_all_pwm(0, 0)
    pwm.close()