Jump to content
sky99

Raspberry Pi : fabriquons des trucs!

Recommended Posts

Hello sky99,

Etant donné que tu m'as donné une envie folle de commencer à jouer avec un R-Pi et ce qui va avec (encore merci 1000x pour tes tutos !!), je vais lancer la commande d'un R-Pi et de divers composants électroniques.

Je pense passer par adafruit.

Mais (même si je sais que tu habites en Guadeloupe ^^) est-ce que tu connaitrais par hasard de bons magasins d'électronique sur Paris et/ou région parisienne ? Qu'ils ne soient pas chers, mais fiables autrement dit.

Car j'hésite à commander chez adafruit : j'ai peur de me retrouver avec un trop gros surplus pour les frais de port, sans compter le fait que si je me rends compte qu'il me manque certaines choses, je n'aimerais pas de nouveau passer une nouvelle commande, et donc de repayer les frais de port...

Merci d'avance, et franchement, continue comme ça s'il te plait, pour notre plus grand bonheur !

(Par ex, je me posais justement la question, après avoir lu tes premiers tuto, de comment gérer l'alimentation du système sans fils, donc avec piles ou batterie autonome, et paf, tu fais le tuto qui répond à ma question :) )

Edited by Vanilys

Share this post


Link to post
Share on other sites

Salut Sky,

Félicitation pour ce nouveau tuto :)

Histoire d'apporter ma pierre à l'édifice, je suis en train d'en réaliser un pour utiliser une sonde de température DS18B20. Ça n'aura pas ton niveau... mais si ça peut servir à des débutants...

J'en profite pour te poser une question ou deux :)

A terme, dans ma solution domotique, je pense partir sur un raspberry pi en master, qui interroge des kits distants par onde radio.

ça me permettrait d'éviter d'avoir des fils de partout, et de saturer mes pins GPIOs.

Mais il me reste à bien définir comment gérer mes kits.

Pour le moment j'étais parti dans l'idée qu'un kit serait composé :

- d'une sonde (température, pression, effet de hall, lumière, etc ...)

- d'un émetteur radio

- d'une puce d'arduino pour gérer ça (programmée pour)

- d'une alim pour la puce.

De là, j'ai 2 approches. Soit chaque kit envoie au master ses infos toutes les X minutes mais il y a des risques d'informations qui se croisent dès que j'ajoute un nouveau kit. Soit j'équipe chaque kit d'un récepteur en plus, et du coup, c'est le master qui interroge chaque slave un par un, à son rythme, ce qui évite les surcharges inutiles et me permet d'interroger vocalement mon raspi : "Raspi, quel température fait-il dans la chambre" par exemple.

Quel est selon toi la meilleur approche ?

Niveau alimentation, mes slaves doivent ils être sur secteur, ou alors je les fournit via une petite batterie ?

Que penses tu de la faisabilité générale d'un tel système ?

Bref, j'ai besoin de tes conseils avisés :)

Et encore merci.

Edited by Yaug

Share this post


Link to post
Share on other sites

Bravo pour ce que tu fais c'est très intéressant moi qui débute dans la conception de projet avec un ami qui lui pratique depuis plus longtemps je me suis aidé de tes tutos pour débuter sa m'a vachement aidé ! merci

On a un petit projet en vue et j'aurais besoin de toi pour m'expliquer comment par communiquer via un pc c'est a dire recevoir des infos et comment en fonction des infos reçues lui faire piloter un servomoteur de manière simple.

merci d'avance de ton aide :) Continu comme sa pour ce que tu fais en tout cas .

Ps: je débute :)

Merci, content de voir que les tutos servent :)

Qu'entends tu exactement par communiquer via un PC? Si tu parles d'échanger des infos entre un Raspberry pi et un PC quelconque, tu as une immense quantité de solutions disponibles, dépendant

du langage de programmation que tu utilise. La solution "universelle", c'est d'utiliser des sockets, le programme sur le PC envoie des infos à un programme sur le Pi, qui quand à lui commande le servomoteur. Selon le langage et ta maitrise du langage, c'est plus ou moins simple/chiant à faire. Si tu veux juste envoyer des commandes au servomoteur, "à la main", il existe une solution :

tu installes apache et php (un serveur web), tu fais une petite page avec des commandes cliquables, et quand l'utilisateur clique en utilisant son navigateur sur certains liens, des commandes sont exécutées

sur le pi. Mais en plus, cette interface n'est pas réservée aux humains, un programme peut faire une requette HTTP sur une page, et ainsi activer une commande... Et un utilisant

les paramètres URL tu peux passer autant de paramètres que tu veux (http://raspberrypi/s...vo.php?angle=35 , par exemple, tu définis les variables que tu veux en PHP. si tu as besoin d'aide la dessus, je pourrai t'aider également).

Bref, j'ai du code php (avec la config à faire sur le pi pour que ça marche) pour exécuter des programmes depuis une interface web, et j'ai également du code, en python cette fois, pour faire des appels

http, donc lancer les commandes, depuis un autre PC sur le réseau (et même sur internet, c'est également possible). On peut sécuriser le tout un minimum avec un password, ou même chiffrer les communications si nécessaires.

Pour la partie servomoteur, tu tombes à pic : ce dimanche, j'ai enfin réussi à commander un servomoteur depuis le Pi. Ce n'est pas compliqué, ça demande peu de choses, et ça fonctionne. Pour l'instant la solution que j'ai n'est pas extrêmement précise, car utilisant de la PWM logicielle. Mais ça marche, sans demander de matériel complémentaire. Bref, d'ici peu (aujourd'hui), un tutoriel sur le sujet arrivera ;)

Si tu as des points spécifiques à voir n'hésite pas à poser des questions. Dans la foulée je ferai des tutos sur les sujets abordés plus haut (commandes par serveur web, envoi de requettes HTTP en python, etc)

:dix:

Félicitation pour tes tutos ! J'ai déjà un raspberry qui sert de mediacenter, je n'ai plus qu'à en acheter un autre pour essayer de découvrir la partie "électronique" et domotique. :yes:

Hello sky99,

Etant donné que tu m'as donné une envie folle de commencer à jouer avec un R-Pi et ce qui va avec (encore merci 1000x pour tes tutos !!), je vais lancer la commande d'un R-Pi et de divers composants électroniques.

Je pense passer par adafruit.

Mais (même si je sais que tu habites en Guadeloupe ^^) est-ce que tu connaitrais par hasard de bons magasins d'électronique sur Paris et/ou région parisienne ? Qu'ils ne soient pas chers, mais fiables autrement dit.

Car j'hésite à commander chez adafruit : j'ai peur de me retrouver avec un trop gros surplus pour les frais de port, sans compter le fait que si je me rends compte qu'il me manque certaines choses, je n'aimerais pas de nouveau passer une nouvelle commande, et donc de repayer les frais de port...

Merci d'avance, et franchement, continue comme ça s'il te plait, pour notre plus grand bonheur !

(Par ex, je me posais justement la question, après avoir lu tes premiers tuto, de comment gérer l'alimentation du système sans fils, donc avec piles ou batterie autonome, et paf, tu fais le tuto qui répond à ma question :) )

Effectivement, je suis en Guadeloupe. Pour l'électronique, je commande justement parcequ'il n'y a presque rien comme magasin d'électronique ici. En revanche, je peux imaginer que sur Paris, tu pourra trouver des composants électroniques facilement! déjà pour tout ce qui est transistors, résistances, DEL, condensateurs, et composants electroniques classiques (photodiodes et consorts également), ça ira dans n'importe quel magasin d'électronique. Les magasins de sonorisation peuvent avoir pas mal de composants. Pour les puces, les grands magasins d'électronique devraient en avoir. En gros beaucoup de magasins d'électronique devraient avoir les composants que tu cherches. Pour la qualité, bah ce sont des composants fabriqués en masse par quelques fabricants, donc ce sera la même chose dans divers magasins... Après un vendeur peut être plus ou moins sympa, explicatif, etc... Au passage, il y a RS qui vend des composants electroniques. De l'angleterre les FDP devraient être très réduits, le seul problème c'est qu'il faut savoir ce qu'on cherche chez eux car ils ont pratiquement tout ce qui existe. Si tu as une liste de référence, tu peux avoir tout ce que tu veux en 2 jours sans payer grand chose en FDP... pour une puce ça ne vaut pas le coup, mais si tu commandes 20€ de composants à mon avis ça vaut le coup, et peut être même pour moins cher en FDP qu'en frais de transport pour trouver la bonne boutique physique :)

Pour Adafruit, au passage, sans s'inscrire sur le site, on peut voir les FDP pour un panier donné. ça peut etre assez économique, sans compter que c'est en dollars, donc il faut compter -20% en en euros ;)

Après il y a un point pour les magasins d'électronique : certains composants, comme les servomoteurs, ne sont pas forcément faciles à trouver. Pour ça ce serait plutot dans une boutique de modélisme. Donc c'est aussi pour ça que je commande sur ces sites, car de toutes façons certaines pièces sont trouvables chez eux et difficilement ailleurs.

Mais encore une fois, là tu parles de Paris, une ville gigantesque (Sans doute plus grande que mon île entière :D ), donc je suis convaincu qu'il doit y avoir des boutiques de ce que tu veux :)

Mais bon, encore pour Adafruit, si tu commandes chez eux, prends les composants "rares", genre servomoteurs, et bidules "robotique", ou orientés vers des applications très peu fréquentes. Tout le reste se trouvera facilement ailleurs, donc si il te manque un composant ordinaire, ce sera facile à compenser :)

Pour ma part, les composants essentiels sont :

Les breadboards;

Le MCP23017, le MCP3008, et les puces genre L293D (motors drivers)

Les "breadboard wire"

Les moteurs DC/roues/chenilles

Les servomoteurs

Éventuellement certains capteurs, genre le capteur ultrasons.

Tout le reste, on peut trouver des équivalents, se débrouiller en récupérant des composants dans de vielles imprimantes, scanners, etc...

Salut Sky,

Félicitation pour ce nouveau tuto :)

Histoire d'apporter ma pierre à l'édifice, je suis en train d'en réaliser un pour utiliser une sonde de température DS18B20. Ça n'aura pas ton niveau... mais si ça peut servir à des débutants...

J'en profite pour te poser une question ou deux :)

A terme, dans ma solution domotique, je pense partir sur un raspberry pi en master, qui interroge des kits distants par onde radio.

ça me permettrait d'éviter d'avoir des fils de partout, et de saturer mes pins GPIOs.

Mais il me reste à bien définir comment gérer mes kits.

Pour le moment j'étais parti dans l'idée qu'un kit serait composé :

- d'une sonde (température, pression, effet de hall, lumière, etc ...)

- d'un émetteur radio

- d'une puce d'arduino pour gérer ça (programmée pour)

- d'une alim pour la puce.

De là, j'ai 2 approches. Soit chaque kit envoie au master ses infos toutes les X minutes mais il y a des risques d'informations qui se croisent dès que j'ajoute un nouveau kit. Soit j'équipe chaque kit d'un récepteur en plus, et du coup, c'est le master qui interroge chaque slave un par un, à son rythme, ce qui évite les surcharges inutiles et me permet d'interroger vocalement mon raspi : "Raspi, quel température fait-il dans la chambre" par exemple.

Quel est selon toi la meilleur approche ?

Niveau alimentation, mes slaves doivent ils être sur secteur, ou alors je les fournit via une petite batterie ?

Que penses tu de la faisabilité générale d'un tel système ?

Bref, j'ai besoin de tes conseils avisés :)

Et encore merci.

Super idée! Et justement ça tombe bien, car cette sonde est numérique, donc utilisable directement avec le Pi. ça en intéressera plus d'un, car ça évite de devoir interfacer un ADC :)

En plus, c'est une sonde 1-wire, à ce que je vois, et justement ça m'intéresse de voir comment lire ce protocole. J'ai pris des sondes analogiques justement parce que j'avais la flemme

de chercher comment fonctionne ce protocole :) Et du coup ça servira aux autres qui voudront utiliser des sondes 1 digital wire :)

Pour ton idée d'utiliser le Arduino, c'est une très bonne idée à mon avis, et même, si tu investis un tout petit peu (30-40€) pour un Arduino Uno et quelques petits composants suplémentaires, tu peux utiliser ton Arduino comme programmateur AVR, et programmer des puces Attiny:

Plus tu as de pattes, plus tu as de lignes IO. d'après ce que j'ai lu, avec ce genre de puces (programmable avec du code Arduino : il suffit de programmer normalement le Arduino, en mettant la puce dans le socket à la place du Atmel Atmega 328!) tu peux avoir des consommations de l'ordre du microwatt! Donc on peut imaginer qu'avec un gros condensateur, et une petite cellule solaire riquiqui, tu peux avoir un module qui capture la lumière de la pièce pour s'alimenter et faire son boulot :)

Bref, ça peut s'avérer intéréssant pour réduire la complexité de certains projets, surtout si les modules esclaves doivent juste lire quelques sondes et envoyer le tout à un module maître...

Si tu fais un envoi toutes les X minutes, il doit bien y avoir moyen de synchroniser le tout pour ne pas que les fréquences se chevauchent.

Maintenant c'est sur que d'avoir une communication bidirectionnelle permet plus de choses, par exemple d'évaluer l'état du réseau de capteurs (pinger chaque capteur), faire des requêtes à l'instant qui t'intéresse,

redemander la transmission d'une donnée mal reçue (par exemple émise au moment ou le micro-ondes chauffait un plat).

A mon sens, hormis de rares cas, c'est toujours utile d'avoir une communication bidirectionnelle (même en half duplex). Maintenant, c'est une question de coût!

D'un autre coté, en cas d'interférences, l'émission déclenchée par le master (MASTER : slave X, envoie moi telle donnée; SlaveX : master, voici la donnée) permet de gérer ce problème sans rajouter d'encodeur.

Donc ça permet de moduler le coût. D'autre part, la portée des modules radio n'est pas infinie. Du coup, si chaque module est capable d’émettre et de recevoir, on peut imaginer un système de relais : le module X envoie ses données, que le module Z capte et renvoie au master. Du coup, tu peux prévoir que tel module sera branché sur secteur parce qu’il va beaucoup émettre, alors que le module du grenier qui sert peu souvent sera sur une batterie, celui du jardin sur panneau solaire, etc...

Pour l'alimentation, si tu passes par des puces genre attiny (ou meme un ATMEGA 328P d'arduino, mais sans le Arduino complet autour), tu peux baisser significativement l'enveloppe énergétique. Le seul point

consommateur serait l’émission radio, car les capteurs généralement ne consomme pratiquement rien. Du coup, il est possible d'utiliser une batterie. Le problème c'est que ça implique un circuit de régulation de tension (si tu pars sur une seule batterie AA par ex, il faudra un step-up pour sortir 5V. un petit circuit de ce genre se trouve à 5$, et il pourra sans doute tenir quelques mois. avec un attiny mesurant quelques données. Après faudra voir la conso de l'emission radio.).

A mon avis, le mieux c'est de prévoir une architecture hétérogène : tu penses tes modules esclaves comme ayant une source de courant quelconque. Du coup le module lui même est identique aux autres, et potentiellement interchangeable. Mais sa source de courant peut être soit un petit circuit step-up, avec une batterie AA, ou même une pile (dans ce cas la, une Pile D, ça a une énorme capacité, de quoi tenir peut être des années), soit un transfo quelconque (du coup avec un composant step down pour baisser la tension. Si tu prends ce composant de chez pololu, il faut les deux : step up vers 5V jusqu'à 500mA, et step down vers 5V jusqu'à 1A. Je m'en sers pour alimenter un pi, une webcam, une clé wifi, depuis du 8-10V fourni par des batteries (voir post sur le pi mobile). Donc tu pourrais utiliser n'importe quelle source de courant de moins de 12V, avec une grande efficacité.

Et du coup, si tu as deux pièces voisines, un des capteurs peut être branché sur secteur, et émettre pour deux capteurs, le second transmettant au premier par filaire, infrarouge, ou n'importe quelle solution économe en énergie... Ou même sans fil à très faible puissance, et l'autre sans fil a puissance normale!

Bref, si tu prévois une brique centrale "modulable" pour les modules esclaves, tu peux adapter aux contraintes. Et du coup tu économises sur le cout de certains composants, ce qui fait que dans la piece X ou le module doit être placé dans un coin ou il n'y a aucune source électrique à proximité, et ou il doit pourtant faire le boulot, tu peux te permettre de dépenser davantage pour lui filer plus de batteries pour avoir une autonomie plus longue, et ne recharger les batteries qu'une fois par an par ex.

Au passage, désolé pour les caractères bizares, mon PC a planté en pleine édition, et j'ai heureusement pu restaurer mon post, mais il a rajouté des codes HTML pour tous les caractères spéciaux.

Pour l'instant je vais manger, je verrai ça après :)

Edited by sky99

Share this post


Link to post
Share on other sites

Ravi de voir que ce que j'envisage te plait. A noter que c'est Idleman (http://blog.idleman.fr/) qui m'en a donné l'idée.

Je me suis commandé un arduino uno, par contre niveau puce, vu que je suis encore totalement nooby en éléctronique, je ne sais pas encore trop laquelle prendre.

Mais j'avais en effet prévu de les programmer avec l'arduino (vu que c'est ce que d'autres ont fait). Reste qu'il faut que j'apprenne à me servir du dit arduino maintenant (comme si le raspi n'était pas suffisant !)

L'idée, c'est donc qu'elle puisse gérer l'envoi et la réception d'un signal radio et lire le capteur, le tout pour une alimentation négligeable.

Tu as un conseil sur la puce à utiliser ?

Tu l'as déjà fait ?

Enfin dans tous les cas, merci ! Tes conseils m'aident beaucoup.

Je vais en avoir pour des mois avant de maitriser le concept, mais j'ai de bonnes pistes.

Pour le moment, je teste mes sondes, je vais tester mon émetteur récepteur aussi, histoire de voir comment cela fonctionne.

Ensuite, le next step sera de parvenir à créer un prototype sur une breadboard pour voir si je m'en sort et voir la facilité et le coût.

Si tu as d'autres conseils, n'hésite pas :)

Share this post


Link to post
Share on other sites

Ravi de voir que ce que j'envisage te plait. A noter que c'est Idleman (http://blog.idleman.fr/) qui m'en a donné l'idée.

Je me suis commandé un arduino uno, par contre niveau puce, vu que je suis encore totalement nooby en éléctronique, je ne sais pas encore trop laquelle prendre.

Mais j'avais en effet prévu de les programmer avec l'arduino (vu que c'est ce que d'autres ont fait). Reste qu'il faut que j'apprenne à me servir du dit arduino maintenant (comme si le raspi n'était pas suffisant !)

L'idée, c'est donc qu'elle puisse gérer l'envoi et la réception d'un signal radio et lire le capteur, le tout pour une alimentation négligeable.

Tu as un conseil sur la puce à utiliser ?

Tu l'as déjà fait ?

Enfin dans tous les cas, merci ! Tes conseils m'aident beaucoup.

Je vais en avoir pour des mois avant de maitriser le concept, mais j'ai de bonnes pistes.

Pour le moment, je teste mes sondes, je vais tester mon émetteur récepteur aussi, histoire de voir comment cela fonctionne.

Ensuite, le next step sera de parvenir à créer un prototype sur une breadboard pour voir si je m'en sort et voir la facilité et le coût.

Si tu as d'autres conseils, n'hésite pas :)

Pour l'instant, j'ai également un Arduino Uno R3, et une puce Atmel Atmega 328P (la puce de l'Arduino), prise sur Adafruit. J'avais pris cette puce car en cas de grosse bévue sur mon Arduino, cela m'aurait permis de remplacer la puce et de continuer a utiliser mon Arduino. Le second point, c'est qu'on peut fabriquer un Arduino à partir de presque rien.

Voici des tutoriels en anglais :

Rien qu'en regardant les images, on voit bien que si l'on enleve l'interface USB, il reste très peu de composants. Si en plus on élimine le circuit d'alimentation,

un Arduino, ça revient à une puce, quelques résistances, un crystal (ou un oscillateur, ou même rien du tout, on peut utiliser l'oscillateur interne à 8Mhz, donc

on baisse encore la consommation et le cout du bidule!!)

En utilisant le circuit d'alimentation dont je parlais plus haut, on se retrouve donc a acheter environ 10-15€ de matériel, et avec un montage qui se fait en environ

5 minutes. On trouve également beaucoup de ressources sur internet, et également sur youtube sur le sujet. Comme on a pas d'interface USB (mais il est possible

d'en acheter une pour environ 15-20$... UNE seule pour tous les arduino, on la branche pour programmer le arduino fabriqué concerné, et hop, une fois le code

uploadé, c'est bon, on débranche, et on met le montage à sa place, dans un coin...), on utilise notre Arduino Uno classique pour programmer celui ci. En pratique,

on enleve la puce du arduino Uno R3, on met celle la, on programme, et quand c'est fini, on met la puce programmée dans le circuit cible, et on remet le arduino de départ

en place sur le R3. A noter qu'il existe carrément sur Adafruit et ailleurs des shields Arduino qui permettent de transformer la carte Arduino en programatrice de puces :

on a plus besoin de débrancher son arduino de son socket, il suffit de mettre le shield, et d'enficher la puce à programmer sur un socket sur le shield.

Le second point, c'est qu'une fois qu'on sait faire ça, on peut réaliser qu'on a pas besoin d'un Arduino complet pour tous les projets. Le Arduino à bien une douzaine d'entrées-sorties

numériques et 6 entrées sorties analogiques. Si on a que 4 capteurs, le Attiny8, avec ses 8 pattes, à si je ne m'abuse 6 entrées sorties dont 4 analogiques. Du coup il peut lire

4 capteurs analogiques par ex, et commander deux dispositifs avec ses deux autres IO. Les autres modèles qui ont plus de pattes ont logiquement plus d'entrées sorties, et donc on peut

en fin de compte réussir à avoir uniquement le minimum pour son projet, et ainsi avoir la plus faible consommation possible...

En pratique, ce n'est pas plus compliqué que de programmer un Arduino classique, puisque l'IDE Arduino est compatible avec ces puces. En effet, dans l'IDE Arduino, on peut choisir

la puce cible, ce qui fait qu'on peut faire du code Arduino, programmer le tout, et le balancer sur un Attiny. Une vidéo illustrant ceci :

[media]

[/media]

La vidéo explique comment faire les branchements, l'upload et tout, et on voit qu'en fait c'est assez simple....

Du coup il est possible de le faire avec tout plein de Attiny différents de la même manière :)

En pratique, je ne l'ai pas encore fait. Mais si tu regarde les tutos, tu te rends compte que c'est complètement à portée :)

Dans les faits, mes prochaines commandes sont orientées dans cette direction : je veux faire des petits circuits avec divers Attiny pour gérer des tâches simples, par exemple décoder des signaux IR, ce qui est en pratique complexe avec le Raspberry Pi seul. Ici, un Attiny quelconque lirait les signaux de façon ultra précise et enverrait les signaux lus au pi. Celui ci aurait une information non bruitée par les appels divers de l'OS. Idem pour la pwm : je prends un Attiny qui reçoit des signaux d'entrée dans un format numérique quelconque, indiquant un angle, et qui envoie les signaux PWM adéquats. ça pourrait même être un truc du genre : deux pattes d'entrées sur le attiny, quand la première est à 1, le servo tourne vers la gauche, quand la seconde est à 1 il tourne vers la droite, quand les deux sont à 0 il reste à sa position actuelle, et quand les 2 sont à 1 il va en position centrale. Du coup le Raspberry ne se préoccupe plus de savoir quel angle il doit demander pour le servo, mais dit juste "tourne à droite" ou "tourne à gauche", pendant X temps. Et on peut imaginer une sortie analogique du Attiny qui donne à tout moment l'angle courant, une autre entrée du attiny qui indique la vitesse de rotation, etc...

En revanche, je ne suis pas d'accord avec toi sur un point : "je vais en avoir pour des mois". Si tu as un peu de temps libre, ça peut aller super vite. Pour ma part ça a été très vite pour arriver à faire

un robot autonome (quelques jours) avec le Arduino, pas trop longtemps pour faire toutes sortes de choses avec le Pi, et tout ça sans même aller sur des forums poser des questions : à chaque fois je cherchais

sur le net ou moi même, donc ça peut aller très vite!!

D'ailleurs tu as du te rendre compte à quel point le Arduino est facile à programmer... J'avais un "starter pack" avec une quinzaine de montages. Je pensais tous les faire, et j'ai fait le premier, mais j'en ai vite sauté plein parce que c'est tellement simple qu'on se dit parfois "bah ça c'est évident, essayons plutôt de contrôler le servomoteur en faisant ceci cela", et du coup je me suis retrouvé

à combiner les tutos sans tous les avoir faits :)

Sur le pi, il y a des difficultés supplémentaires, telles que le manque de PWM, le système d'exploitation qui n'est pas en temps réel, la latence qu'on peut avoir sur certaines commandes (10-20 microsecondes, c'est peu pour un usage informatique classique. Mais quand on doit écrire des valeurs électriques à grande vitesse pour émettre des signaux, ça devient rédhibitoire! d’où l'intérêt d'interfacer le Pi à diverses puces qui pourront se charger de ces routines... et réserver la puissance du pi à des tâches plus complexes, comme l'analyse d'image, de son, de paramètres en utilisant un réseau de neurones, un algo génétique, un système expert, des systèmes de classeurs, ou même des algos de clustering de Weka pourquoi pas :) )

Plus tard, j’espère pouvoir interfacer un PC classique avec ce genre de circuits, pour pouvoir aller encore plus loin, et imaginer un master x86-64 qui communique avec des noeuds ARM sous forme de raspbery pi qui eux même ont des modules arduino ;)

Au passage, pour des circuits plus "permanents", il y a un truc cool, c'est les "perma-protoboard" d'Adafruit. En gros, ce sont des plaques epoxy avec points de soudures qui reprennent la topologie d'une breadboard. Du coup quand tu as une breadboard avec un circuit qui te convient bien, et que tu voudrais fixer le tout, tu peux simplement déplacer les composants sur la plaque, souder, et récupérer la

breadboard pour d'autres tests, et ainsi avoir une carte plus "solide" (les fils de la breadboard peuvent parfois se déconnecter, une soudure c'est quand même plus solide ^^)

Il en existe diverses tailles, de la taille de la mini breadboard, également des "half-size breadboard", et enfin des dimensions d'une breadboard complète.

Pour ma part j'en ai, la seule chose que j'attends, c'est d'avoir des sockets pour CI pour ne pas souder directement les puces dessus, ainsi en cas de grillade, je peux changer la puce sans avoir à la désouder, ou sans refaire une autre carte complète :)

Bref, j'attends avec impatience de voir ton projet, ça risque d'être assez énorme :yes:

Share this post


Link to post
Share on other sites

Contrôler un servomoteur depuis les GPIO du Raspberry PI en utilisant WiringPi et la PWM logicielle.

Dans ce tuto, nous allons voir comment contrôler de façon basique un servomoteur en utilisant les GPIO

du Raspberry Pi. J'ai utilisé ce tutoriel sur l'utilisation de wiringPi pour commander un servomoteur pour

faire fonctionner le mien, un micro-servo.

En pratique, il nous faudra :

  • Notre Raspberry;
  • Une petite breadboard (ou plus grande, mais il nous faut très peu de place);
  • Un transistor NPN;
  • Deux résistances de 1000 ou 2000 Ohms environ (le tuto en anglais indique 1000, moi j'ai utilisé des 2200 parce que c'est ce que j'avais, et ça fonctionne);
  • Quelques jumper wire;
  • Un servomoteur.

Avant de commencer, un point important :

/!\VERIFIEZ BIEN VOS BRANCHEMENTS pour le servomoteur, sinon il peut littéralement griller!! J'ai un servo qui a fait de la fumée, car je l'avais sans doute branché à l'envers. Bien sur il n'a jamais refonctionné.../!\

Nous allons sélectionner un GPIO quelconque du Pi, dans mon cas, j'ai choisi le GPIO7, parce qu’il était libre, et que je l'aime bien (il est facile à trouver ;) ).

Nous allons brancher un jumper wire sur cette broche GPIO, et amener ce câble à notre breadboard. Sur la même piste de la breadboard, nous mettrons une de nos deux résistances, dont la patte de sortie se connecte à la patte centrale du transistor, la base. Cette broche contrôlera le signal, et activera ou non le transistor.

Nous connecterons ensuite un câble au +5V du raspberry pi,que nous amenons dans une seconde résistance. Cette résistance va ensuite au collecteur du transistor. Un câble part du même point, et va à la broche "signal" du servomoteur.

Un câble doit également relier la troisième patte du transistor, l’émetteur, à la masse.

Le servo doit alors être connecté à la masse et au +VServo. Dans mon cas, avec un micro servo, j'ai utilisé le +5V du pi, mais il est recommandé d'utiliser une alim séparée.

Voici le schéma de câblage :

schema3-servo1.png

+VS étant l'alimentation électrique du servo, qui peut pour un petit servo être le +5V du Raspberry Pi. Il vaut mieux cependant utiliser une autre source

d'alimentation, en ayant bien pris soin de connecter la masse de l'autre source d'alimentation à celle du Pi.

Pour ma part j'ai utilisé un transistor PN2222 (voici le datasheet du PN2222).

J'ai utilisé le micro-Servo d'Adafruit, qui est en fait un tower pro SG92R.

J'ai alors utilisé le code suivant :

#include <wiringPi.h>#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <softPwm.h>int main (int argc, char *argv[]){if (wiringPiSetup () == -1)exit (1) ;pinMode (0, OUTPUT) ;digitalWrite (0, LOW) ;softPwmCreate(0,0,200);int pos=atoi(argv[1]);delay(1000);return 0 ;}

J'ai fait un code qui permet d'utiliser le servomoteur de façon plus intuitive.

Il faut cependant utiliser le premier code pour déterminer la valeur minimale (pour moi 174)

et la valeur maximale (dans mon cas 195). Le second code suivant permet de définir

l'angle de 0 à 180°. Toutefois, malheureusement, on ne peut pas régler au degré près.

On peut envoyer les valeurs que l'on veut, mais le système s'orientera par "pas".

Voici le code :

#include <wiringPi.h>#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <softPwm.h>void setServo(int angle){int minAngleValue=174;int maxAngleValue=195;int range=maxAngleValue-minAngleValue;int anglePerTick=180/range;int t1=angle/anglePerTick;softPwmWrite(7,174+t1);}int main (int argc, char *argv[]){if (wiringPiSetup () == -1)exit (1) ;pinMode (7, OUTPUT) ;digitalWrite (7, LOW) ;softPwmCreate(7,0,200);int angle=atoi(argv[1]);setServo(angle);delay(1000);return 0 ;}

Voici une version téléchargeable du second code :

contrôle du servo en définissant l'angle.

Edited by sky99

Share this post


Link to post
Share on other sites

Bonjour et avant tout, merci pour ce topic :)

J'ai une question beaucoup plus basique et générique sur le RaspBerry. J'en ai fait acheté par ma boite pour le tester en tant que mini pc "apacher". J'ai récupéré une distribution linux, jusque là aucun soucis, c'est pas n foudre de guerre mais c'est largement suffisant. Toutefois je me heurte à un problème, le flash player... en effet, ce mini pc doit pouvoir utiliser une application développé en Flex et a donc indubitablement besoin de flash player, voici ce que j'ai essayé :

  • Gnash : le flash libre, mais ça ne passe pas avec l'appli :/
  • Lightspark : idem, l'application ne fonctionne toujours pas :/
  • libflashplayer.so : j'ai essayé la méthode de ce post qui consiste à récupérer ce fichier d'un Android, mais là c'est du crash navigateur dès le lancement...
  • Développeur : j'ai même fait la remarque au développeur que son appli, bah elle fonctionne pas avec toutes ces bidouilles et que peut-être il y avait un truc dans son code

Bref, si l'un d'entre vous à rencontrer ce genre de problème et l'a résolu, et qu'il veut bien la partager, je veux bien faire démissionner le pape :)

Share this post


Link to post
Share on other sites

Bonjour, à moi d'ajouter ma pierre à l'édifice. Vous trouverez l'original sur mon site si nécessaire.

J'espère que ce tutos en aidera certains.

Lire un capteur de température DS18B20 avec votre Raspberry

Bonjour à tous.

Allez hop, on va enfin pouvoir tester un peu des capteurs de températures. Pour le moment, il va nous falloir :

- Un capteur DS18B20 (~1 euro)

- Un résistance de 4300 Omhs (~1 centime :p)

screen01.jpg

Capteur DS18B20

J’ai enfin reçu mes résistances de 4300 Ohms, 2 semaines après avoir reçu mes capteurs de températures DS18B20. J’ai acheté 5 capteurs sur ebay. Ce qui fait au total 8,15€ frais de port compris. Vous trouverez sûrement moins cher ailleurs, mais ayant déjà eut affaire à ce vendeur (qui est en France en plus), j’ai préféré passer par lui. Pour les résistances, je suis passé par http://www.hobbyelectro.fr où j’ai pu choisir les résistances à l’unité (car c’est sympa de recevoir les résistances par 100, mais bon …)

Si vous n’êtes pas anglophobes, vous pouvez vous référer au très bon tutoriel d’adafruit et aux explications sur le site de cambridge. La plupart des informations que je vais donner sont disponibles sur ces deux sites voir sur plusieurs autres sites anglais.

Sachez aussi qu’il existe une version étanche de ce capteur, si vous avez envie de vous en servir pour mesurer la température de l’eau dans un aquarium par exemple.

Le Montage

Le montage est assez simple et bien expliqué par adafruit. Voici d’ailleurs le montage qu’ils proposent avec leur breadboard.

breadboard-ic.png

Montage du capteur DS18B20

Il faut par contre absolument faire attention au sens de connexion des pins du capteur. Si vous le placez dans le mauvais sens, il va très rapidement chauffer et claquer. Donc, attention icon_smile.gif Si vous avez un doute, touchez le capteur juste après avoir mis votre circuit sous tension. Si il chauffe, coupez tout ! Et attendez dix ou quinze minutes qu’il refroidisse. Mais la meilleure des sécurités pour ne pas cramer votre capteur, c’est encore de le mettre dans le bon sens dès le début.

Pensez aussi à éteindre votre RasPi avant d’y brancher le montage, question de sécurité.

ds18b20.png

A part cela le principe est simple :

- Connectez le port 1 (Ground) sur le pin 6 du Raspberry Pi (Ground)

- Connectez le port 2 (Data) sur le pin 7 du Raspberry Pi

- Connectez le port 3 (VDD) au pin 1 du Raspberry Pi (Alimentation 3,3V)

- Et enfin, entre les ports 2 et 3, connectez une résistance de 4300 Ohms.

Et hop, le montage est terminé ! Facile non ?

Certains ajoutent en plus une led (et une petite résistance pour la protéger) afin de voir quand le courant passe.

Attention aussi, sur certains exemples glanés sur le web, j’ai trouvé le montage inverse, qui du coup grille le capteur.

Coté Raspberry pi

Avant toute chose, il vous faut vérifier que votre système est bien à jour et à même de faire fonctionner le port 1-Wire. L’étape 1 du tutoriel de Cambridge nous fait d’ailleurs mettre à jour le kernel.

Une fois le kernel mis à jour, il faut taper les deux commandes suivantes dans votre terminal :

sudo modprobe w1-gpiosudo modprobe w1-therm

Ces deux commandes vont vous permettre de communiquer avec la sonde.

Il faut ensuite retrouver la sonde, pour cela, exécuter la commande suivante pour localiser la sonde et récupérer son identifiant :

cd /sys/bus/w1/devices/ls

Par exemple chez moi elle s’appelait 28-00000458412b. Tapez ensuite :

cd 28-xxxxxx

(remplacez bien évidemment 28-xxxxxx par l’identifiant que vous avez dans le dossier /sys/bus/w1/devices/ puis tapez :

cat w1_slave

Vous obtiendrez alors un affichage sur 2 lignes dans ce genre :

screen02.jpg

Affichage de la température via la sonde DS18B20

L’information importante se situe en bout de deuxième ligne. t=20312 signifie que que la température relevée est de 20,312 degrés Celsius (oui il fait bon à la maison icon_smile.gif )

Et voila, le tour est joué !

Ce n’est pas compliqué non ?

Si vous ne trouvez rien dans le dossier /sys/bus/w1/devices/ c’est que votre montage est incorrect. Ce fut mon cas, j’ai dû m’y reprendre à plusieurs fois dans mes branchements sur le breadboard pour que cela fonctionne (et à tout hasard, j’avais changé de capteur). Donc n’hésitez pas à tout démonter et remonter ensuite. Vérifiez aussi que le capteur est dans le bon sens ! Sinon, il aura bien chauffé (dès l’allumage du Raspberry Pi) et aura surement cramé.

Récupération de la température à intervalle régulier.

Adafruit, dans son tutoriel, met à disposition un script python permettant de lire à intervalle régulier la température.

Créez donc un fichier temperature.py dans lequel vous mettrez le code suivant :

import osimport globimport timeos.system('modprobe w1-gpio')os.system('modprobe w1-therm')base_dir = '/sys/bus/w1/devices/'device_folder = glob.glob(base_dir + '28*')[0]device_file = device_folder + '/w1_slave'def read_temp_raw():f = open(device_file, 'r')lines = f.readlines()f.close()return linesdef read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_fwhile True: print(read_temp())	 time.sleep(1)

Exécutez ensuite le script via la ligne de commande suivante :

python temperature.py

Vous obtiendrez alors la température relevée toutes les secondes de cette manière :

readings.png

Lecture de la température, image Adafruit

La température retournée est donnée en Celius puis en fahrenheit (vous pouvez modifier votre code pour ne prendre en compte que l’unité désirée). Si vous souhaitez rallonger la durée entre 2 mesure il suffit de modifier la dernière ligne (time.sleep(1)) et de remplacer le 1 par le nombre de seconde que vous souhaitez entre chaque lecture.

Et ensuite ?

L’idée suivante, c’est de faire sauter le sleep de X secondes à la fin, et de faire un cronjob qui appelle votre script à la fréquence désirée. Vous rajoutez ensuite un enregistrement en base de donnée, et hop, vous avez vos stats de températures ! Si votre Raspberry Pi est connecté au Web, vous pouvez aussi envoyer ces informations à des services de stats du genre Highcharts.

Autre utilisation intéressante, pourquoi ne pas déclencher une action quand votre température atteint un certain seuil ? Par exemple, déclencher le ventilo si la température de la salle principale dépasse 30 degrés, ou le couper quand elle descend sous les 25 degrés ?

Bref, ensuite, c’est à vous d’exploiter vos données et de vous amuser !

Voila voila, c’est tout pour aujourd’hui. N’hésitez pas si vous avez la moindre question ! J’essayerais de vous répondre, ou au pire vous renvoyez vers les ressources nécessaires.

Ressources utiles.

Edited by Yaug

Share this post


Link to post
Share on other sites

Ok ben je te tiendrais au courant je susi en trian d'explorer des pistes pour mon projet de controle de servomoteur je suis un peu a court de temps bien sur --' et j'ai une liste d'erreur assez important"e quand j'essaie de compiler le programme que tu as fait avec le bonton poussoir (qui affiche un message lors de l'appui) je sais pas pourquoi il ne veut pas compiler il met le nom du fichier: error: stray '\240' in program il y a une trentaine de ligne d erreurs identiques avec seulement le 240 qui varie en 302.

Si tu as deja eut ce soucis merci d'avance et merci pour le pilotage du servo continu comme sa :)

Share this post


Link to post
Share on other sites

Génial, maintenant Yaug qui s'y met ! :yes:

Très bon tuto, facile à comprendre car super bien expliqué, merci beaucoup !

Ha au fait merci aussi pour les références du magasin en ligne/ebay, ça va me servir.

Toi et sky99, vous me vendez du rêve.. vivement que j'aie tout le matos nécessaire !

Y'a tellement de possibilités que ça me donne le tourni rien que d'imaginer ce que je pourrais faire chez moi.. mais qui va piano va sano, aussi je commencerai "petit" avec des montages/idées raisonnables, j'ai tout à apprendre !

Edited by Vanilys

Share this post


Link to post
Share on other sites

Bref, si l'un d'entre vous à rencontrer ce genre de problème et l'a résolu, et qu'il veut bien la partager, je veux bien faire démissionner le pape :)

Pour l'instant je dois dire que je n'avais pas tenté d'utiliser flash. Je sais que le plugin officiel n'existe pas pour le Raspberry, parceque Adobe ne semble pas motivé pour le compiler pour Arm. Si jamais un jour on trouve une solution, quelqu'un la postera ici :)

...

Magnifique tuto :) C'est super, et du coup on sait utiliser des sondes de ce type maintenant :) J'imagine en effet qu'avec un autre capteur, le principe de fonctionnement sera le même! A ma prochaine commande, je prendrai des sondes de ce type, comme ça je pourrai comparer les valeurs retournées

par divers types de sondes!

AU passage, j'ajoute ton post dans l'index des tutos :)

Ok ben je te tiendrais au courant je susi en trian d'explorer des pistes pour mon projet de controle de servomoteur je suis un peu a court de temps bien sur --' et j'ai une liste d'erreur assez important"e quand j'essaie de compiler le programme que tu as fait avec le bonton poussoir (qui affiche un message lors de l'appui) je sais pas pourquoi il ne veut pas compiler il met le nom du fichier: error: stray '\240' in program il y a une trentaine de ligne d erreurs identiques avec seulement le 240 qui varie en 302.

Si tu as deja eut ce soucis merci d'avance et merci pour le pilotage du servo continu comme sa :)

Ce genre d'erreurs apparaît quand des caractères non attendus sont détectés. Je pense que ça peut venir du copier-coller depuis le forum, du coup je vais poster le fichier quelquepart et poster un lien. Il faudrait peut être que j'essaie de creer une sorte de dépot en ligne avec des exemples de codes à télécharger... Bref, je met un lien, et ça devrait passer sans problème.

Voici les deux liens promis :

Edited by sky99

Share this post


Link to post
Share on other sites

Bonjour,

J'ai une idée d'une première utilisation que je pourrais faire de ce genre de chose, mais je voudrais savoir ce que vous en pensez avant de considérer sérieusement la chose :

J'ai une table basse, munie d'une couette et d'un chauffage dessous, un truc de ce genre là :

kotatsu-ami-cet-hiver-L-2.jpeg

Le problème c'est qu'il est facile d'oublier de l'éteindre !

Et donc, dans des vues d'économies d'électricité, je me demande s'il ne serait pas possible de construire un système qui détecterait la présence de jambes sous la table et allumerait/éteindrait automatiquement le chauffage.

Le premier problème que je vois, c'est si on utilise un détecteur de mouvement infra rouge, quand le chauffage chauffe, va-t-il détecter les jambes? Et il serait dommage que ça s'éteigne si les jambes ne bougent pas.

Un détecteur de distances ou autre pourrait le faire, ça reste à réfléchir :)

Donc question : Qu'en pensez vous ? Ça ne serait pas trop gros ? Et est-ce que le système au final ne consommerait pas plus que le chauffage oublié de temps en temps ?

(ma prochaine idée, les rideaux qui s'ouvrent tout seuls le matin, en fonction des heures et jours programmés ^^' ou encore contrôle par smartphone de du plafonnier, qui est contrôlé par une télécommande donc ça doit être jouable)

Share this post


Link to post
Share on other sites

Merci bien effectivement cela venait du copier -coller mais je n'arrive pas a comprendre pourquoi... bref sa marche merci l'ami!

Share this post


Link to post
Share on other sites

Bonjour,

J'ai une idée d'une première utilisation que je pourrais faire de ce genre de chose, mais je voudrais savoir ce que vous en pensez avant de considérer sérieusement la chose :

J'ai une table basse, munie d'une couette et d'un chauffage dessous, un truc de ce genre là :

kotatsu-ami-cet-hiver-L-2.jpeg

Le problème c'est qu'il est facile d'oublier de l'éteindre !

Et donc, dans des vues d'économies d'électricité, je me demande s'il ne serait pas possible de construire un système qui détecterait la présence de jambes sous la table et allumerait/éteindrait automatiquement le chauffage.

Le premier problème que je vois, c'est si on utilise un détecteur de mouvement infra rouge, quand le chauffage chauffe, va-t-il détecter les jambes? Et il serait dommage que ça s'éteigne si les jambes ne bougent pas.

Un détecteur de distances ou autre pourrait le faire, ça reste à réfléchir :)

Donc question : Qu'en pensez vous ? Ça ne serait pas trop gros ? Et est-ce que le système au final ne consommerait pas plus que le chauffage oublié de temps en temps ?

(ma prochaine idée, les rideaux qui s'ouvrent tout seuls le matin, en fonction des heures et jours programmés ^^' ou encore contrôle par smartphone de du plafonnier, qui est contrôlé par une télécommande donc ça doit être jouable)

Ah, ah, c'est Minami-ke, non ?

Share this post


Link to post
Share on other sites

Et donc, dans des vues d'économies d'électricité, je me demande s'il ne serait pas possible de construire un système qui détecterait la présence de jambes sous la table et allumerait/éteindrait automatiquement le chauffage.

Le premier problème que je vois, c'est si on utilise un détecteur de mouvement infra rouge, quand le chauffage chauffe, va-t-il détecter les jambes? Et il serait dommage que ça s'éteigne si les jambes ne bougent pas.

Un détecteur de distances ou autre pourrait le faire, ça reste à réfléchir :)

Un/des capteur de distance seront en effet peut être plus simples qu'un capteur de mouvement. Par exemple un capteur de distance ultrasonique dans la diagonale, à faisceau large, retournera s'il n'y a rien, une certaine valeur.

Des objets dans le champ du capteur réduiront la distance, et détecteront donc que quelque chose est présent. L’inconvénient, c'est que du coup n'importe quel objet sous la table suffirait à garder allumé le dispositif. Après il existe également des détecteurs de mouvement PIR, utilisés dans les systèmes de surveillance, qui peuvent être efficaces, mais dans ce cas, avec un délai. Par exemple, s'il n'y a pas de mouvement pendant X temps, c'est que l'objet sous la table n'est pas humain. En utilisant une sensibilité maximale, et une durée assez longue, on doit pouvoir détecter les petits mouvements d'un humain...

Une autre idée serait d'utiliser des faisceaux verticaux, sur les bords, qui détecteront tout ce qui passe entre le sol et le bord. On aurait les mêmes problématiques qu'avec le detecteur IR, mais un système plus précis si on a plus de capteurs; on peut imaginer compter le nombre d'utilisateurs, et si c'est possible régler le chauffage en fonction par ex.

Enfin, d'autres solutions sont envisageables. Un humain sur une table aura une activité. Même s'il ne fait que lire, ou manger, il causera des vibrations. On pourrait donc solidariser un capteur au dessous de la table, et détecter les vibrations. A moins que les utilisateurs ne s'endorment sur la table, on devrait pouvoir détecter des profils de vibrations. Du coup le code serait "si pas de vibrations depuis X temps, éteindre". Ou même mieux, si on va plus loin, "si pas de vibrations de fréquence et pattern humain depuis X temps, éteindre".

Donc question : Qu'en pensez vous ? Ça ne serait pas trop gros ? Et est-ce que le système au final ne consommerait pas plus que le chauffage oublié de temps en temps ?

(ma prochaine idée, les rideaux qui s'ouvrent tout seuls le matin, en fonction des heures et jours programmés ^^' ou encore contrôle par smartphone de du plafonnier, qui est contrôlé par une télécommande donc ça doit être jouable)

Moi ça me parait possible, avec quelques capteurs. Après, pour cette seule application, un Arduino serait peut être plus simple, et plus adapté. Si le but est d'apprendre, en revanche, c'est également possible avec le pi.

La consommation d'un Pi modèle B est de moins de 4W. Comparé à un chauffage qui doit consommer au moins 100W au bas mot (et sans doute bien plus), on a donc le rapport suivant : 1h de chauffage vaut 25h de pi. Autrement dit,

chaque fois que le pi évite 1h de chauffage, son bilan énergétique est rentable pour un jour entier.

Pour la taille, bah un pi ce n'est pas très gros. La question est de savoir ce qui est "gros". On peut toujours adapter et faire un petit cube de 10x10x10cm (par exemple) qui sera pile au milieu, ou alors avoir une surface plus grande, mais pour une épaisseur de 1 ou 2cm....

Pour les rideaux c'est aussi une idée intéressante, il faudra quelques moteurs plus ou moins puissants selon le poids des rideaux... Et pour le plafonnier, une solution est de décoder les signaux avec un récepteur IR, puis de ré-émettre les mêmes signaux avec une LED IR. Dans ce cas, cependant, ce sera bien plus simple avec un Arduino pour des questions de timings (le Pi tourne sous linux. Linux fait ses affaires, et ne garantit pas des durées d'exécutions à la microseconde près. Cela est pourtant nécéssaire pour la PWM utilisée pour emettre un signal IR, mais également pour les timings de celui ci. Avec un pi, il faudra donc une puce supplémentaire pour gérer cela.)

Share this post


Link to post
Share on other sites

Ah, ah, c'est Minami-ke, non ?

Aucune idée, j'ai prit une image au hazard sur le net pour montre l'objet ^^'

Sky99 : merci de ta réponse :)

Share this post


Link to post
Share on other sites

Utilisation d'un écran LCD 4x20 ,4x16, 2x20 ou 2x16 caractères sur un Raspberry Pi en passant par un MCP23017.

Dans ce tutoriel, nous verrons comment utiliser un écran LCD 4x20, 4x16, 2x20 ou encore 2x16, ayant un rétro-éclairage RGB. Le tutoriel

fonctionne également pour les écrans similaires à rétro-éclairage fixe, ou même sans rétro-éclairage, tant que tous utilisent un circuit

de contrôle HD44780.

Il nous faudra donc :

  • un écran 4x20 classique, ou 4x20 avec retro-éclairage RGB, 4x16, 2x20, 2x16 rouge, bleu, ou vert, ou RGB;
  • Un MCP23017;
  • un potentiomètre de 10 kilo-Ohms (généralement fourni avec le LCD);
  • Une breadboard;
  • Des jumper wire;
  • Des headers à souder s'ils ne sont pas déja soudés sur votre LCD (généralement fournis avec le LCD)
  • et bien sur, un Raspberry Pi.

La première étape, c'est de connecter votre Raspberry Pi au MCP23017, comme nous l'avons vu dans le tutoriel du post 40. Je passerai donc dessus.

Si vous ajoutez un MCP23017 spécifiquement pour le LCD, n'oubliez pas de définir une adresse libre sur les broches A0, A1 et A2!.

Si ce n'est pas le cas, il faudra maintenant souder les broches sur le LCD (18 petites soudures, ça ne prend pas plus de quelques minutes,

et ce n'est pas bien dur. Je l'ai fait avec un fer dont la panne est cassée et grosse, donc avec un fer normal c'est l'affaire d'un instant!)

Il faut maintenant connecter l'alimentation électrique (logique) du LCD, en connectant les broches 1 et 2 respectivement à la masse et au +5V du pi.

La broche 3 se connecte à la broche centrale du potentiomètre. Une des deux autres pattes du potentiomètre se connecte au +5V, et la dernière se

connecte à la masse. Ce potentiomètre permet de régler le contraste des caractères.

Enfin, il faut connecter le rétro-éclairage.

C'est ici que des différences peuvent survenir. SI vous avez un LCD sans rétro-éclairage, vous aurez 14 broches, et rien à faire ici. Si vous

avez un LCD a rétro-éclairage fixe (une seule couleur), vous aurez 16 broches, les broches 15 et 16 étant respectivement le +5V du rétro-éclairage, et la masse.

Enfin, si vous avez un rétro-éclairage RGB, vous aurez 18 broches. La broche 15 est le +5V, la broche 16 la masse de la led rouge, la 17 la masse de la led verte,

et enfin la 18 la masse de la led bleue. Il faut donc connecter la broche 15 au +5V, et connecter à la masse la broche correspondante à la couleur de votre choix.

Comme dans le tutoriel sur les LED RGB, il est possible de combiner deux couleurs parmi 3 pour faire du cyan, du magenta, et du jaune, ou les 3 couleurs pour faire

du blanc. Sur le schéma, j'ai connecté uniquement la LED rouge, dans une version ultérieure du montage, je ferai un système pour activer/désactiver et régler

la couleur du rétro-éclairage depuis des GPIO.

A ce point, testez votre LCD en changeant la molette du réglage de contraste, jusqu'à voir des petits rectangles à la place des lettres. Si ça ne fonctionne pas, vérifiez

les câblages avant de continuer.

Maintenant, il ne reste plus qu'à connecter les broches de données et de controle au MCP23017.

Pour cela, c'est simple, suivez le schéma :

mcp23017_cablage4_lcd_4x20_base_red.png

En pratique, je n'ai fait que reproduire le câblage de ce produit d'Adafruit, en suivant les pistes sur les photos de la carte, pour fabriquer mon propre shield.

L'intérêt c'est que maintenant, nous pouvons utiliser le code d'Adafruit pour commander notre LCD, car sinon il faut connaitre les codes 4 bits à envoyer au LCD.

J'ai donc récupéré les classes I2C et MCP23017 d'Adafruit, ainsi que leur code pour l'affichage de données sur le shield. J'ai modifié ce code de façon

à pouvoir exploiter 4 lignes et 20 caractères, et écrit des fonctions permettant de faire automatiquement des retours à la ligne, ou de pouvoir écrire sur une ligne spécifique.

Voici les liens vers le code source :

Pour exécuter, encore une fois, il faut faire un sudo :

​sudo python lcdClock3.py

Ce programme lit la valeur d'une sonde de température et d'une sonde de lumière sur un MCP3008, et écrit les valeurs sur deux lignes du LCD. L'heure est également affichée,

et le ping est affiché sur la dernière ligne. On peut gérer l'affichage de tout le LCD, mais aussi écrire sur une ligne indépendamment des autres. Quand quelquechose est écrit,

il reste écrit jusqu'à ce qu'on l’efface ou qu'on affiche quelque chose d'autre. Un programme peut donc afficher quelque chose, puis s'arrêter sans que l'affichage soit perdu.

J'ai laissé un message d'accueil, pour illustrer l'utilisation de la fonction écrivant sur plusieurs lignes (si on dépasse 20 caractères, elle passe à la ligne suivante).

Par contre attention si vous avez plus que la capacité de l'écran, je crois que ça fera une erreur. Si vous voulez qu'un message d'accueil reste longtemps, il faudra faire un sleep.

En pratique, c'est le code que j'avais utilisé pour cette vidéo :

[media]

[/media]

Plus tard, je rajouterai un système de contrôle du rétroéclairage, permettant d'allumer/éteindre chaque couleur. Si nous disposons de 3 broches PWM, il devient possible d'aller

plus loin en ajustant l'intensité de chaque couleur plutôt que juste d'allumer/éteindre chaque couleur.

Edited by sky99

Share this post


Link to post
Share on other sites
(voir message #53)

Pas de problème , Oui voila moi je pense que je vais partir sur un pc windows Dans une page web(surement sur le modèle de serveur apache) et d'un clik je puisse commander un moteur (ou servo je n'est pas encore d'idée précise de ce que ej vais coller derrrière tout sa ) mais je devrais surement passer par du php et la il y a problème je n'y connais RIEN DU TOUT , j'hesiterais pas a demander ton aide en temps voulu

merci

Continu comme sa champion !

Edited by RaphAstronome
Retrait citation trop longue

Share this post


Link to post
Share on other sites

Salut l'ancien j'ai quelques petites questions qui me tracacssent un peu dans mes petites inventions^^

si tu a 5 minute sa serait super sympa d'y repondre :)

- quel est la différence si il y en a une entre

i f(wiringPiSetup()==-1) et if (wiringPiSetup () == -1)

exit (1) ;

{

return 0;

}

Si tu a le lien pour le pilotage du servomoteur sa serait cool car je me retrouve avec des erreurs et même quand je le retape a la main je dois mal recopier....

merci d avance

cdt

Share this post


Link to post
Share on other sites

Salut l'ancien j'ai quelques petites questions qui me tracacssent un peu dans mes petites inventions^^

si tu a 5 minute sa serait super sympa d'y repondre :)

- quel est la différence si il y en a une entre

i f(wiringPiSetup()==-1) et if (wiringPiSetup () == -1)

exit (1) ;

{

return 0;

}

Dans les deux cas, si wiringPi a un problème au départ, le programme s’arrête. La fonction exit termine le programme au moment ou elle est éxécutée, quelles que soient les instructions restantes. La fonction return termine l'execution de la fonction courante. Si on utilise return dans le main, le programme s'arrête effectivement.

En revanche, return dans une sous fonction terminera simplement cette fonction.

Pour la valeur de retour, 0 est la valeur par défaut quand tout s'est bien passé. Un programme qui a fini correctement son exécution devrait retourner 0. Du coup, le code correct ici serait plutot exit(1) si wiringPi echoue (ou return(1)).

L'utilité est qu'un script shell sera capable d'évaluer si le programme s'est exécuté correctement. A noter que 0 et la valeur d'exécution réussie, mais qu'une valeur non nulle indique un echec. On peut donc faire exit(2), exit(3), etc, selon l'erreur rencontrée. On peut par exemple imaginer qu'on aie exit(1) si wiringPi ne se charge pas, puis exit(2) si on a pas les droits d'accès aux GPIO, exit(3) si le GPIO demandé n'est pas disponible, ou si la puce utilisée n'est pas joignable, etc etc...

On peut alors faire des choses du genre :

if sudo ./servothen  echo tout est okelse  echo une erreur est survenuefi

Si tu a le lien pour le pilotage du servomoteur sa serait cool car je me retrouve avec des erreurs et même quand je le retape a la main je dois mal recopier....

merci d avance

cdt

Voici le lien de la version qui prend l'angle, il suffit de ne pas utiliser la fonction suplémentaire pour pouvoir définir les valeurs brutes :

Contrôle du servo via l'angle souhaité

Share this post


Link to post
Share on other sites

Bonjour à tous,

Un message pour vous remercier de partager toutes ses connaissances avec nous.

Je vais pas tarder à me lancer et ses posts vont etre une mine d'or pour moi.

Je cherche simplement des magasins ou sites (ile de france / val d'oise) qui me permettront d'acheter tous ses composants à tarifs + frais de ports correctes.

Aprés quelques recherches, j'ai trouvé les sites suivants :

www.selectronic.fr

fr.farnell.com

www.lextronic.fr

radiospares-fr.rs-online.com

Sky99 :

Adafruit.com

Pololu.com

cooking-hacks.com

Avez vous d'autres sites à proposer ?

Merci !

Edited by amaxime95

Share this post


Link to post
Share on other sites
Bonjour à tous, Un message pour vous remercier de partager toutes ses connaissances avec nous. Je vais pas tarder à me lancer et ses posts vont etre une mine d'or pour moi. Je cherche simplement des magasins ou sites (ile de france / val d'oise) qui me permettront d'acheter tous ses composants à tarifs + frais de ports correctes. Aprés quelques recherches, j'ai trouvé les sites suivants : www.selectronic.fr fr.farnell.com www.lextronic.fr radiospares-fr.rs-online.com Sky99 : Adafruit.com Pololu.com cooking-hacks.com Avez vous d'autres sites à proposer ? Merci !

Merci des encouragements :)

Malheureusement, je ne connais pas d'autres sites, et dans les 3 liens, je n'ai personnellement essayé que les 2 premiers. Je connais farnell et rs, mais pas les autres. De même je ne connais pas non plus de sites/magasins "locaux", alors ce que je vous propose (à la communauté en général), c'est que dès que quelqu'un achete quelquepart, et en est satisfait, il/elle poste le nom du magasin, comme ça on pourra avoir un annuaire des endroits sympas :)

Share this post


Link to post
Share on other sites

J'ai passé commandé chez snootlab (https://snootlab.com/) de mon arduino, reçu en 36h :)

C'est une boite tenue par des français, et bien réactif !

Tout à fait satisfait ! (même si ils sont un peu cher sur les autres devices ..)

Share this post


Link to post
Share on other sites

Contrôler un servomoteur depuis les GPIO du Raspberry PI en utilisant WiringPi et la PWM logicielle.

(...)

Salut l ancien dans ta commande de servomoteurs avec le softpwm j'ai un soucis le code envoie rien sur la broche gpio ... pas de signal carré avec rapport cyclique variable .

je ne c est pas pourquoi j'ai pris une alimentation extzerne pour le servo .

Comment fait tu pour déterminer valeur angle min

et valeur angle max ?

cdt

Edited by RaphAstronome
Retrait citation trop longue

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×
×
  • Create New...