Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
ateliers:radiateur_connecte [2023/06/11 14:21] – supprimée - modification externe (Unknown date) 127.0.0.1 | ateliers:radiateur_connecte [2023/06/11 14:42] (Version actuelle) – fredervish | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ===== Radiateur connecté ===== | ||
+ | Lors de cet atelier, Alexis propose la réalisation d'un système de contrôle connecté d'un radiateur électrique. Au menu : un peu d' | ||
+ | Le tout permet par exemple d' | ||
+ | |||
+ | ==== Contrôle du radiateur ==== | ||
+ | |||
+ | On positionne le radiateur en mode manuel et on met au maximum. Puis on branche le radiateur à travers une prise électrique commandée par radio. De cette façon, on court-circuite le thermostat interne et la prise contrôle directement la résistance du radiateur. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Pour tester le bon fonctionnement de cette partie, il suffit d' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Contrôle avec le Raspberry Pi ==== | ||
+ | |||
+ | Maintenant que le radiateur peut-être commandé par radio, on va le piloter depuis un programme qui tourne sur le raspberry pi. | ||
+ | |||
+ | On pourrait juste démonter la télé-commande et brancher des pins du raspberry pi à la place des boutons marche/ | ||
+ | |||
+ | Il existe des modules émetteurs 433 MHz à très bas coût. Ils ont seulement trois pins: deux pour l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Le branchement de l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Mesure de la température avec le Raspberry Pi ==== | ||
+ | |||
+ | On utilise une sonde de température DS18B20 qui renvoie directement la température sous forme numérique. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Le branchement est détaillé à l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Le driver pour ces sondes est directement présent dans le noyau Linux et les valeurs sont lisibles depuis un script shell en interrogeant simplement un fichier du sysfs. | ||
+ | |||
+ | ==== Tout ça mis ensemble pour faire un asservissement de la température ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | get_temp() { | ||
+ | cat / | ||
+ | } | ||
+ | |||
+ | heater_control() { | ||
+ | sudo / | ||
+ | } | ||
+ | |||
+ | target_t=30000 | ||
+ | |||
+ | while true; do | ||
+ | t=$(get_temp) | ||
+ | echo "t=$t target_t=$target_t" | ||
+ | sleep 2 | ||
+ | if [ " | ||
+ | echo "bad value" | ||
+ | continue | ||
+ | fi | ||
+ | if [ " | ||
+ | echo " | ||
+ | heater_control on | ||
+ | else | ||
+ | echo " | ||
+ | heater_control off | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | ==== Interface web ==== | ||
+ | |||
+ | On modifie légèrement le script de contrôle pour écrire la température courante dans un fichier et lire la consigne depuis un fichier. | ||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | get_temp() { | ||
+ | cat / | ||
+ | } | ||
+ | |||
+ | heater_control() { | ||
+ | sudo / | ||
+ | } | ||
+ | |||
+ | |||
+ | while true; do | ||
+ | target_t=$(cat target_t) | ||
+ | t=$(get_temp) | ||
+ | echo " | ||
+ | echo "t=$t target_t=$target_t" | ||
+ | sleep 2 | ||
+ | if [ " | ||
+ | echo "bad value" | ||
+ | continue | ||
+ | fi | ||
+ | if [ " | ||
+ | echo " | ||
+ | heater_control on | ||
+ | else | ||
+ | echo " | ||
+ | heater_control off | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | En parallèle on lance notre interface web. | ||
+ | |||
+ | < | ||
+ | from flask import Flask | ||
+ | app = Flask(__name__) | ||
+ | |||
+ | @app.route('/' | ||
+ | def main(): | ||
+ | t = float(open(' | ||
+ | target_t = float(open(' | ||
+ | return ' | ||
+ | |||
+ | @app.route('/ | ||
+ | def s(new_t): | ||
+ | f = open(' | ||
+ | f.write(" | ||
+ | f.close() | ||
+ | return ' | ||
+ | |||
+ | if __name__ == " | ||
+ | app.run(host=' | ||
+ | </ | ||
+ | |||
+ | La page "/" |