
Se réveiller avec une alarme agressive, vérifier son téléphone dès le matin… Et si on pouvait faire mieux ? Si on pouvait décider de l’apparence de ce qui est plus qu’un simple réveil, mais un objet de décoration qu’on peut modifier suivant nos envies, nos humeurs en toute simplicité pour être de bonne humeur dès le matin.
L’idée du projet
Nous avons voulu créer un réveil pour que l’utilisateur puisse le personnaliser depuis un téléphone. À ce moment-là, nous avons réfléchi à plusieurs designs et idées comme un réveil :
- intégré dans une table de chevet
- qui projette l’heure au plafond
- qui projette des formes au moment de l’alarme
- qui intègre une station météo pour savoir comment s’habiller
- qui éjecte une hélice au déclenchement de l’alarme qui ne pourra s’arrêter qu’une fois celle-ci retrouvée et remise en place
- qui joue la musique choisie par l’utilisateur
- réglable en ligne

Le matériel et les choix techniques
- Raspberry Pi Pico 2W (Wifi)
- écran TFT
- boutons
- LEDs
- boule de cristal
- haut-parleur
- des fils (beaucoup de fils)
- 6 boutons tactiles
- site web
- breadboard

Premiers tests
Nous avons commencé par essayer de faire fonctionner la pico en détectant seulement un appui sur un bouton pour allumer une LED. Puis rapidement nous avons fait nos premiers essais sur l’écran et étions capables d’écrire ce que nous voulions sur l’écran à l’aide d’une bibliothèque de code et de quelques lignes.

from machine import Pin, SPI
import st7735
# Configuration SPI
spi = SPI(1, baudrate=20000000, sck=Pin(10), mosi=Pin(11))
tft = st7735.ST7735(spi, cs=Pin(9), dc=Pin(8), rst=Pin(12))
# Effacer l'écran
tft.fill(st7735.color565(0, 0, 0))
# Afficher du texte : texte, x, y, couleur
tft.text("ça marche", 10, 20)
L’affichage de l’heure
Nous avons ensuite voulu afficher l’heure sur l’écran et à l’horizontale, pas à la verticale comme c’est écrit par défaut et en beaucoup plus gros. Nous avons donc dû trouver plus de documentation pour enrichir notre bibliothèque. De plus, l’heure devait venir d’internet comme sur nos téléphones pour que le réveil soit toujours à la bonne heure.

from machine import Pin, SPI
import st7735
import time
import network
import ntptime
spi = SPI(
0,
baudrate=20_000_000,
polarity=0,
phase=0,
sck=Pin(18),
mosi=Pin(19)
)
tft = st7735.ST7735(
spi,
128,
160,
cs=Pin(17),
dc=Pin(16),
rst=Pin(20),
)
tft.init()
def affichage_heure(texte, texte_color=st7735.BLACK, fond_color=st7735.WHITE):
tft.fill(fond_color) # x, y, width, height
tft.text(texte, 30, 70, texte_color)
tft.show()
# -------- CONFIGURATION WI-FI --------
SSID = "A15 de Ronan" # Remplace par ton SSID
PASSWORD = "ronan123" # Remplace par ton mot de passe
# -------- FONCTIONS --------
# Connexion Wi-Fi
def wifi_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Connexion WiFi...")
for _ in range(20):
if wlan.isconnected():
print("WiFi connecté :", wlan.ifconfig())
return True
time.sleep(0.5)
print("WiFi non connecté")
return False
# Synchronisation NTP
def sync_ntp():
try:
ntptime.host = "pool.ntp.org"
ntptime.settime() # met l'heure UTC
print("NTP synchronisé")
return True
except:
print("Erreur NTP")
return False
# Heure d'été française
def is_dst_france(y, m, d):
def last_sunday(year, month):
t = time.mktime((year, month, 31, 0, 0, 0, 0, 0))
while time.localtime(t)[6] != 6: # 6 = dimanche
t -= 86400
return time.localtime(t)[2]
if m < 3 or m > 10:
return False
if 3 < m < 10:
return True
if m == 3:
return d >= last_sunday(y, 3)
if m == 10:
return d < last_sunday(y, 10)
# Heure française
def heure_francaise():
tm = time.localtime() # UTC
y, m, d = tm[0], tm[1], tm[2]
offset = 1 + (1 if is_dst_france(y, m, d) else 0)
h = (tm[3] + offset) % 24
return "{:02d}:{:02d}:{:02d}".format(h, tm[4], tm[5])
# -------- PROGRAMME PRINCIPAL --------
def main():
if wifi_connect():
sync_ntp()
else:
print("Pas de Wi-Fi, heure non synchronisée")
last_sync = time.time()
while True:
print("Heure :", heure_francaise())
affichage_heure(heure_francaise(), st7735.RED,st7735.BLACK)
# resynchronisation NTP toutes les 8 heures
if time.time() - last_sync > 8 * 3600:
if sync_ntp():
last_sync = time.time()
time.sleep(1)
Avec ces quelques lignes, nous étions capables d’afficher l’heure française précise, actualisée toutes les 8 heures, avec l’affichage de l’heure de plusieurs couleurs possibles ainsi que différentes couleurs de fond d’écran.
Le site web
Étant donné que la Pico peut accéder à Internet, nous avons créé notre site web pour que l’utilisateur puisse modifier :
- la luminosité de la LED
- la couleur de la LED
- le nom de l’alarme
- la couleur de l’heure
Nous avons donc pu réutiliser des compétences que nous avions acquises lors de la prépa en HTML et avons pu programmer cette page HTML :

Nous avons ensuite hébergé notre site web que nous avons transformé en fichier php et créé un fichier de sauvegarde pour que les modifications restent appliquées après actualisation de la page grâce à ce site web :

Les interactions (boutons + manuel)
Nous avons ensuite pensé le réveil pour qu’il puisse fonctionner sans être connecté à Internet grâce à des boutons tactiles pour un design plus doux.
- 1 bouton pour ajouter des heures
- 1 bouton pour ajouter des minutes
- 1 bouton pour ajouter des heures à l’alarme
- 1 bouton pour ajouter des minutes à l’alarme
- 1 bouton pour allumer les LED
- 1 bouton pour actualiser la connexion Wi-Fi / ou s’y connecter
- 2 boutons-poussoirs (reliés) pour arrêter l’alarme
Lors de cette étape, nous avons supprimé 4 boutons qui avaient pour utilité de retirer des heures ou des minutes à l’heure ou à l’alarme, mais qui nous semblaient superflus puisqu’il suffit de passer 23 heures ou 59 minutes pour revenir à 0.

Nos difficultés
Les difficultés ont été nombreuses lors de ce projet, nous avons eu des soucis pour héberger notre site web, puisque celui que nous utilisions a disparu d’un jour à l’autre. Nous avons eu des problèmes d’impression 3D car notre première impression était disproportionnée et il y avait trop de matière entre les boutons tactiles et la surface, ce qui les rendait inutilisables. De plus, l’ouverture était mal orientée, ce qui rendait l’accès à l’intérieur du réveil très difficile pour procéder au montage. Pour terminer, nous avons eu un gros souci de soudure et de court-circuit. Alors que nous travaillions sur le projet, nous nous sommes rendu compte que la carte chauffait. Nous nous sommes alors rendu compte que le projet était en court-circuit à cause d’une mauvaise soudure de l’écran. Nous avons donc ressoudé l’écran. Cependant, le dernier jour de projet, tout a totalement grillé. Nous avons donc tout recommencé avec une nouvelle carte, avec laquelle tout fonctionnait beaucoup mieux pendant quelques minutes, il n’y avait plus de faux contacts mais soudainement tout a à nouveau grillé, cette fois très probablement à cause de l’aimant du haut-parleur qui s’est collé à l’alimentation et a créé un court-circuit. Pour terminer avec les difficultés rencontrées, nous avons longtemps travaillé sur le fait que l’utilisateur puisse choisir ses sons d’alarme en les téléchargeant sur la carte SD. Cependant, nous n’avons pas réussi à faire fonctionner le lecteur MP3 correctement, donc nous avons abandonné cette idée.



Le produit final
Finalement, nous avons un réveil avec un code fonctionnel, qui permet de modifier l’heure et les minutes manuellement ou de le faire automatiquement en étant connecté à internet. Le tout relié à un site web fonctionnel qui permet de modifier les apparences du réveil aussi bien pour la LED que pour l’écran ainsi qu’une interface qui permet de programmer des alarmes avec une alarme personnalisable parmi une liste de choix.




Ce qu’on améliorerait
Actuellement, le réveil est évidemment améliorable puisque la pico est grillée, donc toutes les fonctionnalités sont inutilisables. En revanche, l’écran n’est probablement pas utilisé à son plein potentiel et, pour l’utilisation que nous en avons, je pense qu’une matrice LED serait plus pertinente. De plus, si nous avions eu plus de temps, nous aurions mieux pris notre temps pour apprendre à souder puis souder. Concernant le design, nous aurions pu utiliser du bois pour une esthétique plus raffinée.




Écrit par : Ronan MEZIERE Joséphine BERGER & Anthéa BOTTAREAU