Modifications

Aller à : navigation, rechercher

CellarKare

3 462 octets ajoutés, 4 juillet 2016 à 11:39
m
Révocation des modifications de Admin (discussion) vers la dernière version de Quentin
* Documenter les différentes étapes (tutoriel), et fournir les fichiers sources nécessaires aux différentes étapes.
= Mark (1): Le matos et un premier proto Arduino=
Le premier prototype sera relativement simple: la station affichera la température et l'humidité ambiante sur un écran LCD, le tout piloté par un Arduino Uno.
La suite: la même chose avec un Raspberry pi, pour bénéficier de sa faciliter à se connecter au réseau. Ce serait quand même cool de pouvoir lire ces valeurs sur un smartphone ;-)
= Mark (2): la même chose avec un Raspberry Pi =
Le but de cette nouvelle itération: réaliser un montage équivalent avec un [https://www.raspberrypi.org/ Raspberry Pi] (RPi en abrégé). Pourquoi un RPi ?
* Parce que j'en avais un sous la main ;-)
* le langage Python, c'est pas plus compliqué que le simili-C de l'Arduino une fois qu'on est rentré dedans.
= Mark (3): Start, Stop, and say Cheese =
== Sart/Stop ==
<syntaxhighlight lang="python">
# La fonction qui effectuer l'arrêt propre du RPi
</syntaxhighlight>
<syntaxhighlight lang="python" class="mw-collapsible mw-collapsed">
def btn_proper_halt(pin):
global off_state, cur_millis, off_millis
<syntaxhighlight lang="python">
# Fonction de terminaison du programme (appelée lorsque le script est arrêté
</syntaxhighlight>
<syntaxhighlight lang="python" class="mw-collapsible mw-collapsed">
def terminate():
logging.debug("Terminate function started")
<syntaxhighlight lang="python">
# Fonction d'initialisation
</syntaxhighlight>
<syntaxhighlight lang="python" class="mw-collapsible mw-collapsed">
def initialize():
global lcd
Cette partie est super simple à réaliser avec le rpi: on raccorde la caméra, on s'assure qu'elle est activée avec <code>sudo raspi-config</code>, et on peut ensuite l'utiliser en ligne de commande ou en python. Le site web [https://www.raspberrypi.org/documentation/usage/camera/README.md raspberrypi.org (en anglais)] explique cela très bien.
On ajoute un deuxième bouton sur le breadboard, qui déclenche la prise d'une photo, et le prototype est maintenant fonctionnel. Les photos sont sauvegardées dans le répertoire courant du RPi, avec la date et l'heure pour nom de fichier.
Au niveau du code, les parties utiles sont:
<syntaxhighlight lang="python">
# Fonction de prise d'une photo
</syntaxhighlight>
<syntaxhighlight lang="python" class="mw-collapsible mw-collapsed">
def btn_take_picture(pin):
# DEBUG
logging.info("Bouton CAM_PIN pressé, on prend un photo")
# Construction du chemin pour la photo
now = datetime.datetime.now()
pic_filename = "/home/qb/pic_" + str(now) + ".jpg"
# Initialisation de la camera. On ne le fait pas dans initialize() pour éviter au maximum de la laisser
# allumée (et consommer) en continu. En plus, une fois activée, les lectures sur le DHT sont beaucoup
# plus souvent ratées.
with PICAM.PiCamera() as cam:
cam.capture(pic_filename)
logging.debug("Photos sauvée " + str(cam.resolution) + " dans " + pic_filename)
</syntaxhighlight>
== Pimp my screen ==
Pour ce qui est d'allumer ou éteindre l'écran, la bibliothèque CharLCD permet la modulation PWN du rétroéclairage. De quoi avoir un chouette effet de fondu au noir lorsque l'écran s'allume et s'éteint.
 
Au niveau du code, la partie utile:
<syntaxhighlight lang="python">
# Module l'intensité du rétro éclairage de l'écran lcd
</syntaxhighlight>
<syntaxhighlight lang="python" class="mw-collapsible mw-collapsed">
def lcd_dim_backlight(backlight_value, time_step):
global lcd
global lcd_backlight
# calcule l'incrément à avoir entre lcd_backlight et backlight_value
stp = (lcd_backlight > backlight_value) * -2 +1
brightnesses = map(lambda x: x/10.0, range(int(lcd_backlight*10), int(backlight_value*10)+1, stp))
for bright in brightnesses:
lcd_backlight = bright
logging.debug("loop on bright= " + str(bright))
lcd.set_backlight(bright)
time.sleep(time_step)
</syntaxhighlight>
 
== Le code et le montage ==
 
Le code source complet pour [https://gitlab.com/qberten/cellarkare/blob/master/mark3_camera/cellarkare_cam.py Mark 3 est disponible sur gitlab]. Pour ce qui est du montage, ben pas de schéma de raccordement disponible, j'ai oublié de le documenter en temps utile avant de passer à Mark 4! Donc il faudra attendre la suite...
 
= Mark (4): We are (almost) done =
 
== Pimp my screen, reloaded ==
Une dernière petite touche intéressante: l'appareil est destiné à être mis dans une cave à vin, endroit où il va faire noir la plupart du temps. En conséquence, l'écran LCD n'a pas vraiment besoin d'être allumé en permanence, pourquoi ne pas l'allumer automatiquement quand la lumière du local dépasse un certain seuil. Une photorésistance permet de réaliser rapidement la mesure d'une intensité lumineuse, pourquoi s'en priver... Oui mais... le RPi n'a pas d'entrée analogique, comment convertir simplement la mesure sur la photorésistance en une valeur analogique, alors que le RPi n'a que des entrées digitales.
Après un peu de recherche, un montage simple à base d'une capacité dont le temps de charge sera directement proportionnel à la mesure sur la photo-résistance. Tout cela est expliqué ici (en anglais): [http://www.raspberrypi-spy.co.uk/2012/08/reading-analogue-sensors-with-one-gpio-pin/]
(TODO - continuer la documentation) == Buttons, buttons, we want more == Dernier petit détail, et non des moindre, Pour ce qui est avoir un projet réellement fonctionnel, il va falloir travailler un peu l'interface homme-machine, et permettre un peu plus d'interaction avec le Rpi, pour par exemple permettre d'allumer entrer le nombre de bouteilles couvertes par l'entrée ou éteindre la sortie photographiée, quitter/valider une action, ... (TODO - continuer la documentation) == We want leds == Toujours dans l'écranoptique d'améliorer l'interaction avec l'appareil, la bibliothèque CharLCD permet la modulation PWN du rétroéclairage. De quoi avoir un chouette effet pourquoi ne pas intégrer une led de fondu au noir lorsque status sur l'écran sappareil, pour indiquer visuellement différents états, comme par exemple: une température trop basse ou trop haute est enregistrée, il n'allume et s'éteinty a pas de connection réseau, ..(TODO - à implémenter tout court ;-) == All your data are belong to us ==
A suivreEnfin, c'est bien beau d'afficher la température et l'humidité, c'est encore mieux de l'enregistrer quelque part pour pouvoir tracer l'historique, et intéragir plus facilement avec ces données.Après quelques investigations, c'est [http://thingspeak.com Thingspeak] qui a retenu mon attention.
Les parties du code python utileLe schéma complet "mark 3".(TODO - à implémenter tout court ;-)
[[Catégorie:Projets]]

Menu de navigation