===== 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'arduino ou de raspberry pi, de la mesure de température, une touche de communication ethernet ou wifi et un des relais ! Le tout permet par exemple d'économiser un peu d'énergie en programmant une (vieille) installation. ==== 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. {{:ateliers:20161122_0035.jpg?500|}} Pour tester le bon fonctionnement de cette partie, il suffit d'utiliser la télécommande fournie avec la prise: à l'arrêt le radiateur est éteint, en marche le radiateur doit chauffer au maximum sans arrêt. {{:ateliers:20161122_0039.jpg?500|}} ==== 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/arrêt, mais ce ne serait pas très élégant. Il existe des modules émetteurs 433 MHz à très bas coût. Ils ont seulement trois pins: deux pour l'alimentation et un pour activer ou désactiver l'oscillateur. Seule la modulation OOK est donc supportée, mais c'est suffisant pour commander des prises DI-O. {{:ateliers:20161122_0023.jpg?500|}} Le branchement de l'émetteur et le logiciel pour le piloter sont détaillés à l'adresse: http://blog.idleman.fr/raspberry-pi-12-allumer-des-prises-distance/ {{:ateliers:20161122_0027.jpg?500|}} ==== 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. {{:ateliers:20161122_0041.jpg?500|}} Le branchement est détaillé à l'adresse suivante: http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/ {{:ateliers:20161122_0046.jpg?500|}} 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 ==== {{:ateliers:20161122_0050.jpg?500|}} #!/bin/bash get_temp() { cat /sys/bus/w1/devices/28-80000028279c/w1_slave | grep -o 't=.*$' | sed 's/t=//' } heater_control() { sudo /home/pi/dio/hcc/radioEmission 0 12325261 1 $1 >/dev/null } target_t=30000 while true; do t=$(get_temp) echo "t=$t target_t=$target_t" sleep 2 if [ "$t" -lt 15000 -o "$t" -gt 40000 ] ; then echo "bad value" continue fi if [ "$t" -lt "$target_t" ] ; then echo "heater on" heater_control on else echo "heater off" 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 /sys/bus/w1/devices/28-80000028279c/w1_slave | grep -o 't=.*$' | sed 's/t=//' } heater_control() { sudo /home/pi/dio/hcc/radioEmission 0 12325261 1 $1 >/dev/null } while true; do target_t=$(cat target_t) t=$(get_temp) echo "$t" > current_t echo "t=$t target_t=$target_t" sleep 2 if [ "$t" -lt 15000 -o "$t" -gt 40000 ] ; then echo "bad value" continue fi if [ "$t" -lt "$target_t" ] ; then echo "heater on" heater_control on else echo "heater off" 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('current_t').read())/1000 target_t = float(open('target_t').read())/1000 return 't=%.2f target_t=%.2f' % (t, target_t) @app.route('/s/') def s(new_t): f = open('target_t', 'w') f.write("%d" % (new_t*1000)) f.close() return 'target_t=%d' % new_t if __name__ == "__main__": app.run(host='0.0.0.0') La page "/" permet d'afficher la température et la page "/s/" permet de définir à la consigne à "nombre".