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).
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 |
---|---|---|---|
AD0 | SCL | ------ | |
AD1 + AD2 | SDA | ------ | |
+5V | VCC | ------ | |
GND | GND | ------ | |
------ | Canale 0 - PWM | SIG | |
+5V | ------ | VCC | |
------ | Canale 0 - GND | GND |
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()