Prototype d'un pense-bête avec keybow et raspberry pi

📅 May 31, 2022

Genèse et objectif du projet

Dans l'optique d'améliorer mes connaissances de l'univers des microcontrôleurs et des nano-ordinateurs à des fins professionnelles (je souhaite créer des escapes games et des installations interactives pour mes clients), je me suis fabriqué un petit pense-bête avec un Raspberry pi Zero W et un Keybow pour me rappeler de quelques tâches régulières. J'ai en effet tendance à oublier d'arroser les plantes, nettoyer la litière... Le fonctionnement est simple, il suffit de cliquer sur le bon bouton quand on a réalisé une tâche, et il s'allumera quand la tâche devra de nouveau être complétée.

Développer pour le keybow

Qu'est-ce que le Keybow

Le keybow est un mini clavier macro livré avec son propre OS permettant de créer des raccourcis claviers pour son PC et ses logiciels préférés. Il se présente sous la forme d'un clavier de 3 à 12 touches lumineuses dont on peut personnaliser la couleur qui vient se poser sans soudure au dessus du RPI Zero. On peut par exemple, lancer un script sur Photoshop d'un seul clic, modifier sa voix lors d'un stream, lancer un programme ou pourquoi pas allumer la lumière de la pièce. Le Keybow OS vient avec une API en LUA permettant de programmer ses macros très facilement. Un autre avantage de Keybow OS comparé à Raspberry Pi OS est qu'il se lance nativement en mode ramdisk, ce qui évite toute manipulation de la carte SD après le boot, et donc permet de débrancher son appareil sans avoir besoin de l'éteindre. Il est en effet fortement déconseillé de débrancher son RPI sans l'éteindre au préalable afin d'éviter toute corruption de la carte SD sur laquelle se trouve l'OS. Je vous invite à consulter le tutoriel de montage du constructeur, qui est très accessible comme le montage du RPI 3 a pu l'être.

Code

Le code est très simple, il compte le temps qui passe au fur et à mesure et allume une touche quand nécessaire. Quand on clique, on éteint la lumière et on recommence à compter...

require "keybow"
time = 0
isKeyDown_00 = false
isKeyDown_01 = false
isKeyDown_02 = false
hasPipiTop = true
timer_00 = 0
timer_00b = 0
timer_01 = 0
timer_02 = 0
maxTime_00 = 23 * 60 * 60 * 1000
maxTime_00b = 21 * 24 * 60 * 60 * 1000
maxTime_01 = 30 * 24 * 60 * 60 * 1000
maxTime_02 = 2 * 24 * 60 * 60 * 1000
-- maxTime_00 = 10000
-- maxTime_00b = 30 * 1000
-- maxTime_01 = 60 * 1000
-- maxTime_02 = 10 * 1000
function setup()
keybow.use_mini()
keybow.auto_lights(false)
keybow.clear_lights()
keybow.set_pixel(0, 240, 195, 0)
keybow.set_pixel(1, 0, 0, 255)
keybow.set_pixel(2, 31, 200, 85)
end
function tick()
time = time + 1
-- change color
if time > timer_00 and timer_00 > 0 then
keybow.set_pixel(0, 240, 195, 0)
timer_00 = 0
hasPipiTop = true
end
if time > timer_00b and timer_00b > 0 then
keybow.set_pixel(0, 173, 79, 9)
timer_00b = 0
hasPipiTop = false
end
if time > timer_01 and timer_01 > 0 then
keybow.set_pixel(1, 0, 0, 255)
timer_01 = 0
end
if time > timer_02 and timer_02 > 0 then
keybow.set_pixel(2, 31, 200, 85)
timer_02 = 0
end
end
-- Standard number pad mapping --
-- Key mappings --
function handle_minikey_00(pressed)
--litiere
if pressed then
if hasPipiTop and timer_00 == 0 then
timer_00 = time + maxTime_00
hasPipiTop = false
elseif timer_00b == 0 then
timer_00b = time + maxTime_00b
hasPipiTop = true
end
if timer_00 > 0 and timer_00b > 0 then
keybow.set_pixel(0, 0, 0, 0)
elseif timer_00b > 0 then
keybow.set_pixel(0, 240, 195, 0)
elseif timer_00 > 0 then
keybow.set_pixel(0, 173, 79, 9)
end
end
isKeyDown_00 = pressed
end
function handle_minikey_01(pressed)
--filtre eau
if pressed and timer_01 == 0 then
keybow.set_pixel(1, 0, 0, 0)
timer_01 = time + maxTime_01
end
isKeyDown_01 = pressed
end
function handle_minikey_02(pressed)
-- eau plante
if pressed and timer_02 == 0 then
keybow.set_pixel(2, 0, 0, 0)
timer_02 = time + maxTime_02
end
isKeyDown_02 = pressed
end
view raw pensebete.lua hosted with ❤ by GitHub

Et après ?

J'ai pensé à me faire une impression 3d pour faire une jolie coque, mais finalement je vais plutôt mettre mes enfants à contribution, je vais leur proposer de réaliser une mise en scène en Lego !

Mon pensebête en action

J'étudie la possibilité d'y ajouter une petite batterie ou un capteur solaire. Cela dit, l'utilisation du RPI Zero reste trop gourmande en ressource et chauffe trop à mon goût (on est obligé de le garder constamment allumé pour que le chronomètre fonctionne). Il faudrait adapter le projet pour un Raspberry Pi Pico qui est un microcontrôleur et non un nano-ordinateur. La différence principale est que le microcontrôleur n'a pas besoin d'OS et qu'il est dédié à une seule tâche. Cela permettrait de diviser la consommation électrique par au moins 5 quand l'appareil est allumé mais aussi de le mettre en veille si besoin. Pour la réalisation de ce nouveau prototype, il faudra également bien choisir ses boutons comme ceux du keybow vendus séparément ou ceux-là, et enfin monter et souder le tout dans un boitier.