Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !

4.1.3 Horloge Parlante

Introduction

Dans ce projet, nous allons créer une horloge parlante avec un haut-parleur et un afficheur 7 segments à 4 chiffres. L’afficheur 7 segments à 4 chiffres affichera l’heure, et le haut-parleur annoncera l’heure à chaque heure.

Composants Nécessaires

Pour ce projet, nous avons besoin des composants suivants.

../_images/3.1.17components.png

Il est très pratique d’acheter un kit complet, voici le lien :

Nom

Éléments dans ce kit

Lien

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément avec les liens ci-dessous.

Introduction des composants

Lien d’achat

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

Module Audio et Haut-parleur

-

Affichage à 7 segments 4 chiffres

-

74HC595

ACHETER

Schéma de Connexion

Nom T-Board

Physique

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

SPIMOSI

Pin 19

12

10

GPIO18

Pin 12

1

18

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

../_images/schmatic_4_digit.png ../_images/3.1.17_schematic.png

Procédures Expérimentales

Étape 1 : Construisez le circuit.

../_images/3.1.17fritzing.png

Avant ce projet, vous devez vous assurer que vous avez complété 3.1.4 Synthèse Vocale (TTS).

Étape 2 : Utilisez la commande date pour afficher l’heure locale.

date

Si l’heure locale est différente de l’heure réelle, vous devez utiliser la commande suivante pour définir le fuseau horaire.

sudo dpkg-reconfigure tzdata

Choisissez votre fuseau horaire.

../_images/tzdata.png

Étape 3 : Accédez au dossier du code.

cd ~/raphael-kit/python/

Étape 4 : Exécutez.

python3 4.1.3_SpeechClock.py

Lorsque le code est exécuté, l’afficheur 7 segments à 4 chiffres affichera l’heure et sonnera à chaque heure.

Code

Note

Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller au chemin du code source comme raphael-kit/python. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.

import RPi.GPIO as GPIO
from tts import TTS
import time

tts = TTS(engine="espeak")
tts.lang('en-US')

SDI = 24
RCLK = 23
SRCLK = 18

placePin = (10, 22, 27, 17)
number = (0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90)

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(SDI, GPIO.OUT)
    GPIO.setup(RCLK, GPIO.OUT)
    GPIO.setup(SRCLK, GPIO.OUT)
    for i in placePin:
        GPIO.setup(i, GPIO.OUT)

def clearDisplay():
    for i in range(8):
        GPIO.output(SDI, 1)
        GPIO.output(SRCLK, GPIO.HIGH)
        GPIO.output(SRCLK, GPIO.LOW)
    GPIO.output(RCLK, GPIO.HIGH)
    GPIO.output(RCLK, GPIO.LOW)

def hc595_shift(data):
    for i in range(8):
        GPIO.output(SDI, 0x80 & (data << i))
        GPIO.output(SRCLK, GPIO.HIGH)
        GPIO.output(SRCLK, GPIO.LOW)
    GPIO.output(RCLK, GPIO.HIGH)
    GPIO.output(RCLK, GPIO.LOW)

def pickDigit(digit):
    for i in placePin:
        GPIO.output(i,GPIO.LOW)
    GPIO.output(placePin[digit], GPIO.HIGH)

def loop():
    status = 0
    while True:
        time.localtime(time.time())
        hour = int(time.strftime('%H',time.localtime(time.time())))
        minute = int(time.strftime('%M',time.localtime(time.time())))

        clearDisplay()
        pickDigit(0)
        hc595_shift(number[minute % 10])

        clearDisplay()
        pickDigit(1)
        hc595_shift(number[minute % 100//10])

        clearDisplay()
        pickDigit(2)
        hc595_shift(number[hour % 10])

        clearDisplay()
        pickDigit(3)
        hc595_shift(number[hour % 100//10])

        if minute == 0 and status == 0:
            tts.say('The time is now ' + str(hour) + ' hours and ' + str(minute) + ' minutes')
            status = 1
        elif minute != 0:
            status = 0

def destroy():   # Lorsque "Ctrl+C" est pressé, la fonction est exécutée.
    GPIO.cleanup()

if __name__ == '__main__':  # Programme démarrant d'ici
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Explication du Code

time.localtime(time.time())
hour = int(time.strftime('%H',time.localtime(time.time())))
minute = int(time.strftime('%M',time.localtime(time.time())))

Grâce à la fonction time.time(), nous pouvons obtenir le timestamp de l’heure actuelle (le nombre de secondes en virgule flottante écoulées depuis l’époque de 1970), puis utiliser la méthode de formatage temporel du module time (time.localtime(time.time())) pour traiter le timestamp actuel, afin que nous puissions formater le timestamp en heure locale.

Le résultat en entrée est :

time.struct_time(tm_year=2021, tm_mon=5, tm_mday=28, tm_hour=13, tm_min=54, tm_sec=26, tm_wday=4, tm_yday=148, tm_isdst=0)

Enfin, nous utilisons la méthode time.strftime() pour formater la grande chaîne d’informations dans le format souhaité. Si vous voulez obtenir l’heure actuelle, vous pouvez le faire via la fonction time.strftime('%H',time.localtime(time.time())).

La sortie des chaînes de format spécifiées obtenues en modifiant le premier paramètre est listée ci-dessous.

Note

La sortie de la méthode time.strftime() est constituée de variables de chaîne de caractères. Avant de l’utiliser, n’oubliez pas de faire une conversion de type forcée.

clearDisplay()
pickDigit(0)
hc595_shift(number[minute % 10])

clearDisplay()
pickDigit(1)
hc595_shift(number[minute % 100//10])

clearDisplay()
pickDigit(2)
hc595_shift(number[hour % 10])

clearDisplay()
pickDigit(3)
hc595_shift(number[hour % 100//10])

Les dizaines de l’heure sont affichées sur le premier afficheur 7 segments, et les unités sur le deuxième. Ensuite, les dizaines des minutes sont affichées sur le troisième afficheur, et les unités sur le dernier.

if minute == 0 and status == 0:
    tts.say('The time is now ' + str(hour) + ' hours and ' + str(minute) + ' minutes')
    status = 1
elif minute != 0:
    status = 0

Lorsque le nombre de minutes est 0 (à l’heure), le Raspberry Pi utilisera TTS pour annoncer l’heure.

Image de Phénomène

../_images/4.1.3speech_clock.JPG