Bonjour à tous! Dans des billets antérieurs, je vous présentais un montage simple de rampe à LED intelligente, basée sur un Arduino. Suite aux nombreuses requêtes, voici le billet fournissant le code de la lampe à LED intelligente.
You are browsing archives for
Catégorie : Arduino
Câblage de la rampe à LED intelligente version Arduino
Dans un précédent billet, nous avons décrit une rampe à LED intelligente utilisable dans la maison ou dehors. Aujourd’hui, nous nous pencherons sur la construction et le câblage de la rampe à LED intelligente, en version Arduino, sur une breadboard (donc sans soudures).
Une rampe à LED intelligente pour la cuisine via Arduino avec capteur PIR
Dans ma cuisine, au dessus de l’évier, j’ai rajouté deux lampes basses consommation. Cependant cette solution est loin d’être idéale : il est facile d’oublier d’éteindre ces lumières, l’éclairage est soit éteint, soit à fond (éblouissant en pleine nuit), et je préfère éviter d’avoir du 220V au dessus de l’évier. Je pourrais couvrir avec de l’acrylique, mais ces lampes chauffent, et il faut pouvoir y accéder pour les changer. Pour résoudre ces problèmes, je vous propose de me suivre pour la réalisation d’une rampe à LED intelligente, économique, basée sur du code libre, programmable et extensible.
Les écrans LCD texte et leur conversion I2C
J’ai fait une nouvelle vidéo sur ma chaine youtube, sur les écrans LCD texte classiques, à base de HD44780 (ceux qu’on trouve partout), et sur leur conversion en écrans I2C en utilisant une carte additionnelle qui permet de passer de 6-8 GPIOs occupés à 2 (qui restent utilisables en plus!).
Plus d’explications dans la vidéo :
Capteur de son binaire (seuil) – Alitest
Aujourd’hui, nous testons un capteur de son binaire économique acheté sur Aliexpress. Pour 60 centimes, on nous propose un capteur capable de détecter un niveau sonore. Qu’en est il? c’est ce que nous verrons dans ce nouvel article de la rubrique alitest.
Tout d’abord le capteur en lui même est compact : 46*15.5*9.7mm dans les plus grandes dimensions. Il est fourni assemblé, avec un connecteur à trois broches (vout, gnd et vcc).
L’ensemble est assez simple, et il y a un trou pour fixer le capteur. Sur le côté droit sur les photos ci dessus se trouve le microphone chargé de capturer le son. Il n’est pas collé au circuit, donc on a un peu de latitude pour l’orienter, et on peut faire en sorte qu’il soit comme sur la photo, ou tourné vers l’arrière ou l’avant.
Branchement et installation
Le branchement est très simple : connectez la broche VCC au +5V sur un Arduino ou au +3.3V sur un Raspberrypi, GND à la masse, et OUT sur une entrée numérique (ou analogique), et le tour est joué. Si le branchement est correct, une DEL verte devrait s’allumer sur la carte. Sans rien programmer, une seconde DEL devrait s’allumer lorsque l’on fait assez de bruit. Le rail d’alimentation VCC requiert une tension entre 3.3 et 5V, donc toute valeur intermédiaire fera l’affaire.
Utilisation du capteur de son binaire
L’utilisation est également très simple, puisqu’il s’agit d’un capteur de son binaire, c’est à dire dont la sortie est 0 ou 1. En pratique, il ne retournera pas le niveau sonore, mais simplement indiquera si l’on dépasse un certain seuil sonore.
Le cas échéant, ce sera indiqué sur la carte par l’allumage d’une petite DEL, comme sur la photo ci dessus. Pour s’en servir, il suffira donc de lire la valeur du GPIO connecté à la broche OUT du capteur. Quand aucun son n’est détecté, la sortie est à 1, alors que lorsqu’un son est détecté la sortie sera à 0, comme illustré sur les deux images ci après. Il faudra donc bien faire attention dans le code, car c’est le contraire de ce à quoi on pourrait s’attendre.
Le potentiomètre bleu visible sur les photos permet de régler le niveau du seuil de détection du son. Il nécessite un petit tournevis pour pouvoir l’ajuster, et ne sera donc pas modifié par erreur.
Utilisation avancée
Puisqu’il s’agit d’un capteur de son binaire, on ne peut pas directement mesurer le niveau sonore. Il est toutefois possible d’obtenir une indication approximative de celui ci. Pour cela, on fera de multiples mesures pendant une période définie, et on comptera le nombre de fois ou la sortie aura été à 0 (son détecté). Ainsi, la sommation de ces valeurs permettra d’obtenir une indication grossière du niveau sonore sur la période observée. Dans ce contexte, un bon réglage du seuil sera important.
Bien sur, pour obtenir une indication plus précise du niveau sonore, il est préférable d’utiliser des capteurs de son fournissant une sortie continue, comme les modèles suivants:
- carte avec micro electret et ampli MAX4466, sur Adafruit ou encore chez snootlab (nous reviendrons sur cette carte dans un billet ultérieur);
- carte avec micro electret et ampli MAX9814 chez Adafruit (un peu plus sophistiquée);
- carte avec microphone MEMS SPW2430, chez Adafruit, moins chère et plus basique.
Conclusions
Est-ce que cette carte fonctionne? Oui, elle fait le boulot. La sortie ne m’a pas paru extrêmement stable (elle ne reste pas toujours à 0,même quand il y a du bruit), donc je pense qu’il y a quelques ajustements à faire dans le code. La sortie du capteur est binaire, ce qui fait qu’il est moins sophistiqué que les autres capteurs mentionnés, mais à un prix aussi bas, je suppose qu’on ne peut pas en demander beaucoup plus!
En pratique, c’est un capteur qui fonctionne, et facilement. Je vous ferai des retours plus tard, en comparant ce que fournit ce capteur et celui d’Adafruit.
R.Hasika – présentation : un robot Raspberry pi précis et extensible
R.Hasika – présentation
R.Hasika est le successeur de R.Cerda, un robot basé sur le Raspberry pi. Si à l’époque mon objectif était simplement de construire un robot basé sur le Raspberry pi, avec R.hasika, je suis plus ambitieux. En effet, il s’agit cette fois de concevoir entièrement le robot, que tout soit correctement pensé, plutôt que de faire certains éléments comme le châssis avec ce qui est disponible sous la main. Cette fois ci, chaque élément du robot aura été pensé. Dans ce billet, je vous propose une rapide présentation de ce robot et de ses objectifs.
J’ai créé une page pour le projet R.Hasika, que je vous invite à consulter pour davantage de détails.
Motorisation et déplacement
R.Hasika est un robot à conduite différentielle, s’appuyant sur deux moteurs à courant continu. Ces moteurs sont dotés de capteurs de rotation qui permettront un déplacement précis. Ils sont contrôlés par une puce DRV8835, qui permet de les commander facilement en PWM avec seulement 4 GPIO.
Ces moteurs entraînent deux chenilles, mais on peut les remplacer par des roues si on le souhaite. Dans tous les cas, ce choix de propulsion en fait un rover agile, capable de tourner sur lui même sur place, et avec une bonne capacité de franchissement d’obstacles.
Grâce aux capteurs de rotation des moteurs, on sera capable d’ajuster la vitesse de ceux ci pour effectuer des trajectoires parfaitement rectilignes, des rotations d’un angle précis, et même de l’odométrie et ainsi cartographier une zone.
Châssis et éléments structurels
Par rapport à R.Cerda, cette fois, le châssis à été pensé à l’avance. En pratique, la conception a été faite entièrement avec le logiciel libre OpenScad, et le code source (libre) permet à tout un chacun de modifier les paramètres du robot pour l’ajuster à ses besoins. J’ai publié un article détaillé sur le châssis de R.Hasika sur ce blog, comportant plus de détails que la présentation que vous lisez en ce moment.
Le châssis a été pensé pour être fabriqué à l’imprimante 3D d’une seule pièce, avec tous les trous et emplacements de fixation requis pour l’assemblage d’un robot complet. Ce châssis comporte également l’emplacement des batteries, des moteurs, des roues libres et de la plaque de support de l’électronique.
Cette dernière justement est la seconde pièce, sur laquelle viennent se fixer les composants électroniques du robot, les capteurs, etc. Cette plaque se visse simplement sur le châssis, renforçant ainsi davantage sa solidité.
La troisième pièce est la carrosserie, qui vient se visser par dessus, et qui permet de protéger l’électronique, et sert de support à divers autres éléments (voir plus bas dans la section du même nom).
Alimentation électrique et autonomie
L’alimentation électrique se fait par le biais de batteries lithium (jusqu’à 4), qui fournissent une capacité de 50Wh, permettant ainsi au robot de dépasser les 24 heures d’autonomie hors déplacement. En déplacement on obtiendra facilement de nombreuses heures d’autonomie.
Un autre point intéressant avec ces batteries est qu’elles permettent d’intégrer au robot un circuit de charge, permettant de le recharger sans retirer les batteries. Mieux, on peut recharger le robot sans l’éteindre. Encore mieux, cela nous permet de programmer le robot pour qu’il aille se charger seul sur une station dédiée.
Capteurs
Les capteurs de base embarqués sont deux microswitches à levier, qui servent de capteurs de contact, un capteur de distance à ultrasons maxbotix, et les capteurs de rotation des roues. Si ces derniers permettent des trajectoires et mouvements précis, les deux premiers servent à mettre en oeuvre des algorithmes d’évitement d’obstacles.
D’autres capteurs viendront probablement s’ajouter à ces capteurs, avec par exemple un module accéléromètre, boussole et gyroscope 3D.
Un capteur particulier prendra place à coup sur, en revanche, avec le module caméra du Raspberry pi. Celui ci permet une capture vidéo en fullHD (1920*1080) à 30 images par secondes et des photos à 5Mpixels, voire 8 pour la nouvelle version. Une version infrarouge existe également.
Electronique de commande
Pour l’électronique de commande de ce robot, on s’appuie tout d’abord sur un Arduino nano, chargé des tâches de bas niveau (commande des moteurs, lecture des capteurs, contrôle des LEDs et boutons, etc). Le robot peut être programmé directement via le Arduino, en ignorant le reste.
Mais cet Arduino est connecté par un port série à un Raspberry pi A+, qui permet cette fois de s’intéresser à des tâches plus complexes, telle que la cartographie, le traitement d’information vidéo, les communications wifi, etc. Si on ne souhaite pas s’occuper de la programmation des tâches de bas niveau, il suffit de téléverser le code fourni avec le projet sur l’Arduino et de communiquer avec celui ci depuis le Raspberry pi via un port série pour envoyer des commandes.
Autres éléments
R.Hasika embarque divers autres éléments que nous ne détaillerons pas tous ici. Mais en voici quelques uns :
- 6 leds RGB adressables, dont on peut définir indépendamment la couleur parmi 65536;
- un bouton poussoir programmable par l’utilisateur;
- du wifi embarqué, pour pouvoir commander ou programmer le robot à distance;
- un écran LCD 2*16 pour afficher des informations textuelles;
- une ouverture permettant au robot d’être modifié, adapté;
- des emplacements pour fixer des extensions non planifiées pour le moment.
Dans les prochains billets, nous nous pencherons en détail sur tous ces aspects, et nous nous intéresserons également aux objectifs recherchés pour ce robot, en commençant par détailler la conception du châssis et les fonctionnalités par celui ci. En attendant, voici une galerie de R.hasika :
Composants de R.Ian – pièces à imprimer ou acheter
Dans un précédent billet, nous avons vu les objectifs qui ont guidé la conception de R.Ian, et dans le suivant détaillé la conception paramétrique des roues. Nous allons maintenant nous pencher sur les composants de R.Ian, à savoir la liste exhaustive des éléments nécessaires pour le construire de A à Z.
Voyons en pratique la liste des composants de R.Ian :
Composants de R.Ian à imprimer en 3D :
- le châssis de R.Ian à imprimer en PLA, qui m’a pris environ 1h30 sur mon imprimante, pour 11m de filament, soit 32g, pour un coût de 1€ (plus de détails sur le châssis dans ce billet);
- les roues également à imprimer en PLA, 25 minutes par roue, 2.5m, 8g, 0.23€ par roue, soit au total environ 50 centimes pour les deux roues (plus de détails sur les roues dans ce billet);
- les pneus à imprimer en ninjaflex (pneus lisses ou pneus rainurés), qui prennent 30 minutes par pneu, pour 2m de filament soit 6g, ce qui fait 60 centimes par pneu, donc 1.2€ pour les deux (moins cher pour les lisses : 0.8€) (plus de détails sur les pneus dans ce billet);
- la plaque de support de l’électronique, à imprimer en PLA, qui prend 20 minutes à imprimer, pour 2m de filament/6g et revient à 17 centimes;
- le support du servomoteur à imprimer en PLA, 10 minutes, 3g, 1m, pour 8 centimes.
Au total, les composants de R.Ian à imprimer reviennent à 2.91€ pour le filament, pour un peu moins de 3 heures d’impression 3D à des vitesses normales, et on en a pour 57g de PLA et 12g de ninjaflex.
Composants de R.Ian à acheter
- Une batterie lithium 18650B, d’une valeur de 2 à 5€ (panasonic 3400mAh à l’unité ici,en pack de 4 là, généralement moins chères par pack de 10, voire aussi les samsung 2600mAh, moins chères pour une capacité plus faible de 23%);
- un circuit de charge pour la batterie lipo (pack de 10 pour 2€ ici) 0.2 à 1€
- une boite à batteries 18650 (on veut juste les contacts métalliques) : 2€
- un arduino nano d’une valeur d’environ 2€, aussi disponible par pack de 5;
- deux microswitches à levier (les capteurs de contact) (à l’unité ici, ou en pack de 10 là);
- un régulateur step-up 3v vers 5v ( pack de 10, 1A en sortie, pack de 2, 1A en sortie, unité, 1A en sortie, unité, 3A en sortie) : 1 à 5€
- deux servomoteur à rotation continue (pack de 5 ici, pack de 10 roues adaptées là -inutile sauf si vous préférez celles là-, à l’unité chez pololu -USA- ) : 3 à 5€ l’unité, soit 6 a 10€ au total (je cherche une solution de remplacement);
- une carte perfboard 5*7cm (pack de 10, 4 différentes dont 1 bonne à pas cher, pack de 10 plus bas de gamme, moins bien, à vraiment pas cher) : 0.15 à 1€;
- câbles Dupont femelle-femelle (pack de 40 ici) environ 2.5€;
- connecteurs 2.5″ mâles (pack de 10) : 1€
- Switch 2 positions (on/off) (pack de 20 ici) : 0.1€
- une roue sur pivot (je dois trouver une référence, j’ai acheté la mienne au magasin de bricolage local pour quelques euros);
- environ 20 vis de 3mm;
- environ 10 vis m2.
A ce point, nous avons toutes les pièces nécessaires pour un robot minimal pour un peu moins de 27€. Les éléments suivants sont facultatifs, mais tout de même recommandés :
- Un micro servo 9g SG92R, de tower pro (pack de 2 ici pour 5€, pack de 5 pour 10€, pack de 10 pour 18€) : 2 à 3€
- un capteur Sharp GP2Y0A21 10-80cm (avec câble!) : environ 5€
- un support (je cherche la pièce, sinon je ferai une pièce à imprimer!).
- des leds RGB adressables WS2812 (3€ le mètre/30leds ici, il nous faut environ 15-20 cm ou quelques leds, 2 a 8, au choix) : 2-3€
Avec tout cela, nous avons les éléments du robot pour environ 35€, en incluant des options qui ne sont pas nécessaires, mais sympathiques. Nous considérerons que ces options font partie du robot de base, mais elles restent des options car elles peuvent être enlevées si souhaité, tandis que le reste est nécessaire au fonctionnement de R.Ian
Le robot est amené à changer un peu, avec notamment un étage optionnel supplémentaire, pour accueillir un raspberry pi zero (5€), ou un autre modèle (le zero est préféré car moins cher, mais je ferai les pièces pour les autres modèles), mais aussi une carrosserie (une nouvelle pièce à imprimer), qui protégera l’électronique et les capteurs, tout en fournissant une poignée pour attraper le robot, et en gardant l’avant ouvert pour le capteur optique (toutefois couvert par dessus, celui ci étant fragile, surtout monté sur le servomoteur). Cette pièce devrait augmenter le prix total d’un euro environ.
Enfin, le système de roues actuel ne me satisfait pas, la roue sur pivot à l’avant était trop chère, et les axes des servomoteurs sont trop fragiles. Ces servomoteurs sont de plus de qualité un peu médiocre, je pense donc passer à des moteurs DC classiques. Il faudra donc que je conçoive un système imprimable de roue sur pivot, ou alors que je passe à un système de chenilles. J’ai déjà des moteurs en tête, et j’ai conçu le système de fixation des roues sur ces moteur, il me font concevoir les chenilles et les roues libres. L’objectif est aussi de rendre le robot plus solide, pour un usage scolaire.
Dans un prochain billet, je reviendrai sur divers éléments de la conception, comme par exemple les roues, qui sont hautement paramétrables (nombre de rayons, taille, épaisseur, pneus etc).
Conception et fabrication de R.Ian – châssis
R.Ian est un robot simple à fabriquer, extensible et économique. C’est en tous cas l’objectif dans la conception de ce robot. Comment s’assurer de tout cela? Je vais vous présenter dans ce billet mes solutions pour répondre à ces problèmes.
Caméra Raspberry pi waterproof : présentation.
Dans le cadre de mon projet SauronPi, je développe une caméra autonome et waterproof capable de rester un moment dans la nature pour photographier ou filmer pendant de longues périodes sans intervention. Ceci est un sous-projet du projet SauronPi, pour lequel je développe des systèmes vidéo/photo basés sur le Raspberry Pi et son module caméra. L’objectif de ce billet est de vous présenter le projet et ses objectifs.
Boitier de contrôle de Rlieh, contrôleur automatique d’aquarium
Dans un précédent billet, nous avons décrit le modèle 3D du panneau de commande de Rlieh. J’ai maintenant imprimé le boîtier, et je vais vous présenter le résultat, qui me sert de boîtier de contrôle de rlieh, mon système de gestion automatique d’aquarium.
Le boîtier a été imprimé en PLA. Il s’agit de la façade présentée dans le précédent billet, avec trois trous pour les boutons, et un grand rectangle pour l’écran LCD.
L’écran est fixé par l’arrière, avec 4 vis, et le tout est prévu pour que l’écran soit tout juste au niveau de la façade. Le fichier scad peut toutefois être modifié pour changer cela, si l’on souhaite par exemple que l’écran dépasse pour qu’il soit au niveau d’une autre plaque. Tous les fichiers sont disponibles sur le github du projet Rlieh.
Les boutons se fixent par l’avant, avec un écrou à l’arrière. Sur la version imprimée, les trous étaient un peu juste, je les ai donc élargis, mais sur ceci à été mis à jour, et la taille des trous permet maintenant une installation facile de boutons de 16mm standards.
Sur la photo précédente, vous pouvez voir le rendu lorsque l’écran et les boutons sont en place. Sur la droite, une carte SD et un Raspberry pi zero à titre de comparaison pour la taille.
Pour connecter le tout, il suffit de brancher quatre fils pour l’écran I2C : le vcc (5v), la masse, et les broches sca et scl. Il faut deux câbles supplémentaires pour chaque bouton.
Pour l’instant, seul le bouton du haut est utilisé : il allume ou éteint l’éclairage. Toutefois, puisqu’il s’agit d’un contrôleur automatique, il n’allume pas simplement de façon instantanée et continue l’éclairage. En effet, celui ci s’allume et s’éteint automatiquement selon l’heure. L’éclairage s’allume également progressivement, comme illustré dans cette vidéo :
L’extinction est également toujours progressive.
Si l’on appuie sur le bouton alors que l’éclairage est allumé, alors l’éclairage s’allumera (progressivement), mais pour une durée (réglable) de 5 minutes, avant de s’éteindre progressivement. Dans l’autre sens, si l’éclairage est allumé, alors un appui sur le bouton l’éteindra progressivement pour 5 minutes avant de le rallumer. Ce comportement sera bientôt changé, en effet, si quelqu’un éteint l’éclairage, c’est sans doute pour avoir de l’obscurité (par exemple pour dormir). Du coup dans la prochaine version du code, l’éclairage restera éteint jusqu’au prochain cycle d’allumage programmé.
Dans mon cas, l’éclairage s’allume a 11h et s’éteint à 23h, sur une période de plusieurs minutes.
Sur l’écran, la première ligne sert à afficher l’état des lumières (on ou off). La seconde affiche quelque chose si l’on est en train d’allumer ou d’éteindre (pendant les transitions). Ces messages sont surtout utiles pour le développement et le débogage, ils seront sans doute remplacés par autre chose plus tard.
La troisième ligne affiche la température de l’air, et la température de l’eau. Enfin, sur la dernière ligne, on affiche l’heure courante et la date.
Une version ultérieure affichera le temps restant avant le prochain allumage/la prochaine extinction, ainsi que d’autres indications utiles.
Présentation de R.Ian : un robot économique pour apprendre à programmer.
R.Ian est mon nouveau robot, simple, économique, presque entièrement imprimé en 3D (roues et pneus inclus), pensé pour l’enseignement de la programmation, mais également pour ceux qui voudraient se lancer dans la robotique pour moins de 50€, tout en ayant une machine extensible. J’ai donc créé une page de présentation de R.Ian, et divers articles suivront sur ce robot pendant les étapes de sa création et de son évolution. Je vous invite donc à suivre ce lien pour plus de détails : R.Ian : un robot économique pour apprendre à programmer. Après la balise suite, retrouvez quelques photos du robot au moment de l’écriture de ce billet.
Alitest : WS2812 chinoises – led adressables type neopixels
Aujourd’hui, nous allons tester des leds adressables, les WS2812 et WS2812B, en provenance de Aliexpress. Ces leds sont similaires à ce qu’Adafruit appelle les NeoPixels. En pratique, il s’agit de LED RGB, donc capable de produire toutes les couleurs que vous souhaitez utiliser, et adressables, c’est à dire qu’on peut contrôler chaque LED individuellement. Ces LED sont chainées, ce qui fait qu’on utilise un seul GPIO pour contrôler l’ensemble, et on peut placer plusieurs ensembles les uns à la suite des autres. On a généralement 3 câbles : l’alimentation 5V, la masse, et le câble de signal. Que valent ces exemplaires achetés sur Aliexpress? C’est ce que je vous propose de découvrir aujourd’hui, avec deux modèles :
Mesurer une tension avec un pont diviseur de tension
Si l’on mesure une tension, il faut que celle ci soit inférieure aux tensions admissibles par le composant qui les mesure. Généralement il s’agit de la tension d’alimentation du composant : un composant alimenté en 5V mesurera des tensions jusqu’à 5V par exemple. Si l’on dépasse la valeur limite, on risque de détériorer le composant qui mesure la tension. Mais que faire dans ce cas si l’on souhaite mesurer une tension plus élevée? Par exemple, si avec votre Arduino, vous souhaitez mesurer la tension d’une batterie de voiture? Il est possible dans ce contexte d’utiliser un pont diviseur de tension. Nous verrons dans cet article le principe, comment calculer les bonnes valeurs pour votre pont diviseur et également comment le réaliser et s’en servir.
Capteur PIR et Arduino : Tutoriel
Les capteurs PIR, pour Passive Infrared Sensor (capteur infrarouge passif) permettent de détecter la présence d’humains mobiles dans le champ du capteur (ça ne fonctionne pas avec les zombies!). Ils sont utilisés dans divers systèmes de sécurité et détecteurs de mouvements. On en trouve à bas coût, et ils sont très simples à utiliser. Cet article servira de tutoriel sur l’utilisation d’un capteur PIR avec un Arduino.
Alitest : écran lcd 40×2
On peut trouver sur Aliexpress des écrans LCD de 40 caractères sur 2 lignes (appelés 40×2), avec diverses couleurs de rétro-éclairage. J’en ai sélectionné un modèle avec rétro-éclairage blanc, acheté chez Buydisplay pour 29€ le pack de 2, frais de ports inclus. Je vous propose dans ce billet un test de cet écran, ainsi qu’un petit guide d’assemblage et de connexion à un Arduino. L’écran fonctionne il correctement? Est il lisible? Fonctionne il comme les écrans HD44780 habituels? Réponse dans ce billet!
Contrôleur de LED simple utilisant un TIP120
Dans le cadre du projet Domochevsky, nous cherchons à implémenter un système d’éclairage intelligent, tel que nous en avons discuté dans ce précédent billet. Nous n’implémenterons pas toutes les fonctionnalités décrites immédiatement, mais nous allons créer une base simple et extensible sur laquelle nous pourrons construire la suite du projet. Nous décrirons ici une version minimale, facile à mettre en oeuvre, mais malgré tout apte à recevoir des ajouts ultérieurs, présentés dans les billets suivants.