Bonjour,ayant fini un precedent projet(grace a l'aide de ce forum),j'aimerais me lancer dans un projet plus complexe.Voila l'objectif:un robot roulant (de type rover) mais bardé de capteur(ultrasons,infrarouge,micro-interrupteurs).Mon probleme est:Comment gerer un grand nombre de capteurs avec une unique arduino?
Mon but serait un machin comme ca,mais avec plus de capteur a ultrasons:2 de chaque cotes et un fixe a l'arriere.Pour les micro interupteurs,il serait a ras du sol et eviteraient que la roue bute sur un obstacle et que le robot s'arrete.
Il serait alimenter a l'aide de panneau photovoltaique et d'une batterie branche en parrallele.
Bonjour @flix09
Mon probleme est:Comment gerer un grand nombre de capteurs avec une unique arduino?
Ton messagé donc sa place dans la partie principale du forum francophone , il ne s'agit pas du dépot d'un tutoriel
je fais le transfert
Ptn!Excusez moi!!
Pour le 'grand nombre de capteurs faut voir concrètement
-avec un ATMega2560 on dispose d' un nombre conséquent d'E/S (idem avec un ESP32)
-en jouant avec les bus (I2C, SPI) on peut déjà mettre du monde !!
-des multiplexeurs/démultiplexeurs permettent également de grouper certains capteurs
Ok,en fait,mon vrai 'bléme est le code,je ne vous demande pas un code tout fait,juste comment controler les capteurs pour qu'il puisse marcher ensemble,en se coordinant(en fait,c'est le veritable but de ce projet,je trouve incroyable que des bidule avec un cerveau en silicium soit capable d'interragir ensemble...)
Ta question est vague et difficile à appréhender pour ma pars.
Suivant le capteur, il y a plusieurs façon d'interagir avec lui, comme le cite @al1fch
Si on ne prend pas en compte comment tu connecte les différents éléments et si tu as accès de broche de disponible.
L'idée dans ce genre de projet pour moi, c'est de partir d'une machine a état, c'est à dire que ta machine est dans un état défini et ne peux aller que vers un autre état défini, qui dépend généralement de l'état courant, mais ce n'est pas forcément simple de raisonner en état au début.
Par exemple il n'est pas toujours recommander de passer de la marche avant à la marche arrière lorsque tu n'est pas en prise directe, surtout si tu utilise ce type de moteur démultiplié.
Après il y a une multitude de façon de faire, dans un premier temps tu peux avoir ton programme qui fait la capture des mesures de tes capteurs.
Tu peux aussi faire la capture suivant l'état dans le quel tu es, par exemple, le capteur présence arrière uniquement si tu es en marche arrière.
En fonction de l'état courant et de tes mesures, tu décide le nouvelle état courant.
Du coup c'est la granularité de tes états qui gère les influences de tes capteurs sur le comportement de ton robot.
J'ai pas mal essaye mais je ne trouve pas comment faire pour:Mon led s'allume si la distance du capteur 1 est 5 cm mais si le capteur 2 capte aussi 5cm,le led reste eteint.Voici mon code:
int tiger=2;
int echo=3;
int a=12;
int detection=5;
int Duration,Distance;
void setup()
{
pinMode(tiger,OUTPUT);
pinMode(echo,INPUT);
Serial.begin(9600);
pinMode(a,OUTPUT);
}
void loop()
{
digitalWrite(tiger,HIGH);
delayMicroseconds(1000);
digitalWrite(tiger,LOW);
Duration=pulseIn(echo,HIGH);
Distance=(Duration/2)/29.1;
Serial.print("cm=");
Serial.print(Distance);
delay(0);
if (Distance<detection)
{
digitalWrite(a,HIGH);
delay(0);
}
else
digitalWrite(a,LOW);
delay(0);
}
Il utilise un seul capteur pour le moment
tu as quoi sur le moniteur série.
sur le wowki ca fonctionne
Oui,ca marche,le probleme est de rajouter un capteur pour que la led s'allume si le capteur1 detecte une presence a moins de 5cm(c'est bon)et que le capteur 2 detecte aussi 5 cm(ca je ne sais pas ou placer mon bloc de code.
Merci pour ce truc,j'connaissais pas et ca marche trop bien(moi qui voulait installer Fritzing...)
tu as essayé quoi ?
Si on prend les choses dans l'ordre, tu veux acquérir une distance en même temps que la précédente donc à priori tu connais le code associé.
Tu as compris qu'il faut un "if" pour faire une action sous condition, comment peut ton établir la condition qui entraine l'allumage de ta LED ?
essaye du code, si le wowki et donne nous le lien, que l'on puisse discuter dessus.
Merci Terwal,simplement,dois je mettre 2 variable ```
int Duration,Distance; pour chaque capteur ou une pour les deux suffira?
ca il n'y a que toi qui peut déterminer ton algorithme.
mais si tu as deux distance à tester, le plus simple est d'avoir deux variables.
te prend pas forcément la tête avec ce genre de soucis.
écrit ce que tu veux faire dans un pseudo langage en Français, puis récrit cet algorithme dans un langage de plus en plus proche du C.
Tu verra que la plus pars des questions ce résoudront d'elles mêmes, pour rester que les grosses problématiques ou techniques que tu ne maitrise pas.
Pardon,z'allez me prendre pour un debile mais comment retrouve t on un projet enregistre sur wowki?
Untitled project.zip (2,3 Ko)
Pouquoi le led reste allumé?
Je ne sais pas je ne me connecte pas.
Tu ne peux pas donner le lien wowki?
Salut, c'est un beau projet. Il se trouve que (photo comprise) c'est à quelques détails près ce que je suis en train de réaliser (avec une télécommande en bluetooth).
Par contre, je suis allé moins loin sur les capteurs: j'ai un ultrason en frontal, posé sur un servomoteur. Il peut balayer 180° sur l'avant de la voiture, mais l'arrière est complètement aveugle. Je n'ai pas non plus de capteur de vide (genre détecteur d'escalier) et du coup mon robot apprend à encaisser les coups (la bonne idée!).
Aussi, ton "problème" de nombre de capteurs ne s'est pas posé de la meme manière pour moi: j'avais compté mes broches dispo, et j'ai crée l'entourage de capteurs en fonction (et au final j'ai encore pas mal de broches de libre).
Pour la réalisation, tu vois déjà ton code comme un assemblage de fonctions (genre fonction mesure par ultrason ; fonction détection du vide...) et c'est très bien. Mais pour le développement, je te conseille d'y aller de la même manière: par petites étapes.
Tu imagines une fonction qui correspondra à une action de ton robot, tu en définis les paramètres, tu codes, tu testes, tu mets de coté. et tu passes au module suivant.
Je te souhaites bien du courage si tu souhaites coder l'intégralité de but en blanc (en tout cas moi j'y arrive pas).
Pour le fonctionnement en lui meme, tu dois pouvoir trouver des exemples sur le net. Perso, j'ai créé une boucle dédiée dans loop()
. A l'aide d'un timer je la déclenche à intervalles raisonnables (par exemple toutes les 100ms donc 10 fois par seconde). Dans cette boucle, je fais l'un après l'autre le relevé de tous mes capteurs. A la fin de la boucle, j'ai une fonction dédiée qui traduit le comportement du robot en fonction de ce qu'il a perçu de son environnement: grossièrement
- pas d'obstacle, j'avance
- obstacle je m'arrête.
Le comportement du robot sera réévalué à la prochaine lecture de la boucle. Donc si mon robot fonce dans le mur, c'est que depuis sa dernière mesure de distance, il a avancé trop vite. Je peux soit réduire la vitesse des moteurs (bof), soit augmenter la fréquence de lecture de ma boucle.
En tout cas bon courage, c'est un beau projet. Tire en du plaisir et de l'expérience!
Merci GrandPete() J'vais perseverer..Rendez vous dans un mois ou deux dans REALISATIONS ET PROJETS FINIS
allez on fait ça!
lien Wowki ultrasons
Voila...En fait la led s'allume quand la valeur est inferieure a 5(?) et je ne suis pas sur que les 2 capteurs soit pris en compte...