comme expliqué dans ma présentation, je souhaite réaliser deux petits projets pour la maison.
Quitte a découvrir l'arduino, autant que ça soit utile.
Mes deux projets sont les suivants, gestion de bandeau LED pour un éclairage d'escalier (ça je pense que c'est vraiment très facile) et le second, déclencher un servo moteur en fonction de l'état d'un capteur magnétique d'ouverture de porte.
Il serait probablement plus facile de démarrer par le projet LED sauf que mon escalier n'est pas encore prêt. Du coup je souhaite commencer par l'autre.
En termes de code, j'ai fait pas mal de chose à la FAC à l'époque (C++, SQL, PHP, HTML, ASP, CSS) mais ce sont des vieux souvenirs (on me souffle dans l’oreillette, "de très trés trés vieux souvenir").
On va donc faire comme si je partais de 0 (ce qui est proche de la vérité).
J'ai donc a ma disposition
1 Wemos D1 mini
1 Capteur de commutateur de Reed PS-3150
1 servo moteur SG90
J'aimerai bien pouvoir avancer étape par étape pour comprendre ce que je fais du genre
Comment brancher/alimenter le D1 mini
Comment brancher le PS-3150
Comment interagir avec et voir le changement d’état
Comment brancher le SG90
Comment interagir avec et le faire tourner
et enfin comment faire interagir le tout ensemble
Par avance je vous remercie pour votre aide et j'espère avoir été clair dans mes explications
Bonjour, j'ai dû mal à voir ce que tu attends de nous?
Comment brancher/alimenter le D1 mini
As tu essayé de branché en USB la wemos ou ton PC et télécharger un exemple fournis avec l'IDE Arduino.
Si tu as installé l'IDE Arduino?
Comment brancher le PS-3150
je ne connais pas ce capteur, donc je ne pourrais pas te répondre précisément, mais comme ton capteur semble avoir deux bornes non polarisées, je le brancherais en pull-up sur l'une des broches digital du wemos.
Peut être qu'un spécialiste passera par là pour répondre en détails.
-Comment interagir avec et voir le changement d’état
Si on pars d'un branchement en pull-up, il faut déclarer cette broche en INPUT_PULLUP dans la fonction d'initialisation et faire un digitalRead dans la fonction "Loop".
Lorsque tu vois que cette valeur change d'état, tu fais quelque chose.
-Comment brancher le SG90
Il y a plein de schéma de branchement sur internet
en gros, le fil noir sur le GND, le fil rouge sur le 5V et l'orange sur une broche marqué GPIO, celle-ci gérant le PWM.
-Comment interagir avec et le faire tourner
Le plus simple est d'utiliser la librairie Servo, qui en plus donne des exemples.
Alors ce n'est pas si vieux 89-90 pour moi c'était fortran (sur de grosses machines - plus aucune idée du système) et pascal (en disquette 5'¼ sur des IBM XT?)
Bonne idée mais il faudrait décrire un peu plus en détail ce que tu veux obtenir, pas seulement « brancher »
Oui, c'est très bien ainsi, tu as tout ce qu'il te faut dans l'Environnement Arduino, plus spécifiquement, dans les exemples.
Ainsi pour lire ton capteur, il y a l'exemple:
Tu câbles ton capteur, d'un côté à GND (mode PULLUP) et l'autre sur la pin 2 de l'Arduino.
Quand tu mets l'aimant près du capteur, tu aura 0 dans le moniteur (à 9600) et 1 quand il est éloigné.
Dans le même ordre d'idée, pour ton servo, dans les exemples de la bibliothèque servo, tu as l'exemple Sweep,
Tu connectes ton servo à la pin 9.
Une fois que les 2 sketches fonctionnent séparément, si nécessaire, tu reviens pour que l'on puisse t'aider à mettre tout ça ensemble.
Oui et non, cela dépendra de ce que tu veux faire.
Je ne connais pas les limites d'ESPHOME, mais même si les deux produits sont là pour générer des firmrware à téléversé sur l'ESP, l'IDE d'Arduino permet de complétement contrôler le microcontrôleur et dispose d'une bibliothèque de librairie très étendue, mais avec toujours la possibilité de gérer toi même la façon de manipuler tes composants.
ESPHome n'a pas ce niveau de liberté et même si il gère beaucoup de composant, j'ai l'impression que c'est moins étendu que l'IDE d'Arduino.
Même au niveau programmation, tu as quand même moins de possibilité de manipulation des données.
Par contre ESPHome dispose directement de la possibilité de faire des Dashboard, alors que l'IDE d'Arduino n'est pas fait pour ça, il faudra passer par un tier(même si Arduino propose Arduino cloud)
Donc c'est un peu une réponse de normand, ca dépend
@terwal Effectivement, je suis aller faire un petit tour sur IDE et je préfère cette approche. Cela me parle plus, par rapport au souvenir de code en C++ qu'il me reste.
J'ai donc fait mes soudures et branchements.
J'ai réussi à faire fonctionner les éléments.
Allumage de la Onborad LED en fonction de l'état du capteur magnétique (et j'ai bien soit 1 soit 0 dans le moniteur)
Mise en route du servomoteur avec des déplacements espacés de 1 seconde. En revanche j'ai des gros doutes sur mon servomoteur, j'ai cherché a faire des mouvements à 0°, 90° et 180°, j'ai bien 3 séquences de mouvement mais clairement le moteur ne fait pas une rotation à 180 degrés. il doit atteindre 90 degrés max je dirais.
Prochaine étapes, déclencher un mouvement du moteur en fonction de l'état du capteur. et puis voir pourquoi le servomoteur ne bouge pas plus.
Vu ce que je souhaite en faire, c'est à dire enrouler un fil pour soulever un couvercle de poubelle lorsque la porte de l'armoire s'ouvre, je ne suis pas sur d'avoir le moteur adapté.
Auriez vous des référence de moteur avec une petite roue pour enrouler un fil ?
Là on ne peut vraiment t'aider si tu donne pas ton code
La librairie que tu utilise ne géré pas la rotation par rapport au milieu avec tu +90, -90 ?
Ne serait-il pas plus simple de prendre une roue qui s'installe sur n'importe quel moteur et de choisir la force du moteur en fonction du poids qu'il doit actionner?
Un peu comme ça
#include "Servo.h"
Servo servo; // création de l'objet "servo"
void setup() {
servo.attach(10); // attache le servo au pin spécifié
}
void loop() {
servo.write(0); // demande au servo de se déplacer à cette position
delay(1000); // attend 1000 ms entre changement de position
servo.write(90); // demande au servo de se déplacer à cette position
delay(1000); // attend 1000 ms entre changement de position
servo.write(180); // demande au servo de se déplacer à cette position
delay(1000); // attend 1000 ms entre changement de position
}
Attention, ce que tu as trouvé, est un servo dit 360°, c'est à dire qu'il tourne plus ou moins vite dépendant du signal PWM, sans aucune notion de position.
Ce que je t'ai proposé, des servo treuil ou winch se positionnent sur 5 à 7 tours, dépendant du signal PWM. Ainsi ton signal PWM à X dira, porte ouverte et à Y porte fermée.
Oui, en ne travaillant pas en degrés mais en microsecondes, dans l'instruction myservo.write(pos), si pos est => 200, c'est pris comme des microsecondes.
Ainsi, en tâtonnant tu trouvera le minimum et le maximum afin d'avoir de 0 à 180°.
Tu as essayé de faire -90 à 90, que ce passe t-il?
Que fait tu servo moteur au démarrage et lorsque tu demande la première position.
D'ailleurs quel position tu lui demande au démarrage.