Problème sortie SDA SCL sur A4 et A5.

Bonjour,

ceci est mon premier post sur le forum, veuillez m'excuser si je m'y prend mal pour poser mon problème ou si je suis dans la mauvaise section.

Je suis à l'université et j'ai un projet qui est de réaliser un robot suiveur de ligne sous Arduino Uno. L'objectif est donc de réalisé un véhicule, qui peut détecter une ligne noire sur un fond blanc, qui est capable de la suivre et de respecter la signalisation environnante.

Pour cela j'ai à ma disposition une carte Arduino Uno standard (+ Shield extension ), une carte moteur I2C et un banc de capteur infrarouge QTR Pololu (On ne garde que 6 capteurs sur 8 disponibles).

Le problème est donc très simple : La carte moteur seule fonctionne, les capteurs seuls fonctionnent aussi, seulement les capteurs utilisent toutes les entrée analogiques allant de A0 à A5, or les broche A4 et A5 de l'Arduino sont aussi utilisée pour le SDA et SCL, par conséquent je n'arrive pas à faire fonctionner l'I2C avec mes capteurs en entrée.

J'ai donc essayé une bibliothèque permettant de changer ces SDA SCL de broches (SoftI2CMaster), mais je n'aboutis à rien, soit j'ai mal compris son utilité ou alors je ne sais pas m'en servir correctement. J'ai aussi essayé de changer les numéros des broches dans la bibliothèque de l'arduino (pins_arduino), ce qui enlève bien le signal des broches 18 et 19 ( et donc de A4 et A5), mais ne recopie pas les signaux sur les nouvelles broches que je lui ai indiqués.

Donc voilà je suis dans une impasse, sachant que je ne peux pas travailler avec seulement 4 capteurs et libérer A4 et A5, je peux toujours passer sur une carte moteur standard qui utilise les entrée et sortie digitales mais cela m'embête un peu car j'aurai besoin par la suite de beaucoup de ces entrées et sortie digitales (fin de courses, encodeurs, capteurs à ultrasons etc ... ).

Désolé ça fait un post un peu long.. Si quelqu'un est déjà passer par ce problème et qui a une solution je lui serait très reconnaissant ! :)

Le micro atmega328p ne supporte pas qu'on déplace les fonctions, pour cela il faudrait passer à l'architecture ARM. L'I2C logicielle je n'ai jamais essayé, je ne peux pas dire grand chose à l'exeption que toutes les émulations logicielles seront toujours plus lentes que la réalisation matérielle.

Nombre d'entrées analogiques insuffisant :

Si c'est juste 2 entrées qu'il te manque sache que le même micro en boîtier CMS en possède 2 supplémentaire (qui sont purement analogiques). La carte équivalente à la UNO mais avec ces deux entrées suplémentaires s'appelle la Nano, elle est à enficher sur plaquettes pastillées ou sur plaque de câblage rapide.

Autre solution s'il te reste des E/S numériques libres : utiliser un multiplexeur analogique 1 vers 4 ou 1 vers 8. Le mux analogique présente à l'état passant une résistance résiduelle, généralement ce n'est pas gênant mais sache qu'il existe une grande variété de produit avec des résistances résiduelles allant de quelques ohms à quelques kohms.

Je suppose que vous avez ce produit

oui l'idéal est sans doute de prendre un Multiplexeur Démultiplexeur Analogique. Un 74Hc4051 ou équivalent (ça doit valoir un euro si vous avez le temps d'attendre qu'il arrive d'Asie, sans doute 3 ou 4 euros en France) et il y a un tuto sur le site qui vous montre comment ça fonctionne

c'est sans doute la solution la plus simple et vous pourrez utiliser l'ensemble de vos 8 capteurs avec 4 pins: 3 pins pour les adresses (digitales ou analog vont fonctionner) et 1 pin pour la lecture --> vous pouvez donc libérer A4 et A5

Si vous pensez être limité en pins, le 74HC4067 est un Multiplexeur Démultiplexeur Analogique à 16 entrées, donc il suffit d'une broche de plus pour l'adresse.

Sinon l'usage de la librairie SoftI2CMaster pourrait effectivement résoudre le pb (la doc est ici)... mais faut adapter ensuite tout le code pour ne pas utiliser la librairie Wire par ailleurs, ce n'est pas transparent donc pas cool sans doute pour ce que vous voulez faire à moins de tout coder à la main sans passer par des librairies

La série des 4060 (74HCxxx ou CDxxxx) est ancienne et fait partie des modèles à résistance résiduelle élevée.

Attention c'est juste une information, ces circuits fonctionnent très bien dans la grande majorité des cas. Ils sont aussi peu chers et très facile à trouver.

Comme tu ne nous as rien dit sur les capteurs que tu utilises, sans boule de cristal je ne peux que signaler ce fait dès fois que cette résistance soit un éventuel problème.

Bonjour, je faisais pareil au début,pour des projets apparemment simples ,à vouloir utiliser des uno nanos ou des prominis .Puis on rajoute des capteurs,des librairies ,des fonctions supplémentaires ... et rapidement,manque d'E/S et de capacité mémoire ... La solution: utiliser un MEGA directement. (7 euros en chine) .Surtout pour un robot qui va embarquer de plus en plus de fonctions au fur et à mesure de l'avancement du projet .Par définition,il faut que ce soit évolutif,donc avoir de la réserve programme et E/S. bonne continuation ,

Bonjour,

Dans la catégorie "il n'y a pas que la Uno et la Mega dans la vie", pourquoi ne pas utiliser une Leonardo ?

Bonsoir,

tout d'abord je suis étonnement surpris du nombre de réponse que j'ai pu recevoir, je ne m'attendais pas à un forum si actif et je vous en remercie !

Ensuite, je vous avoue que je suis encore étudiant et très débutant en électronique, donc vos réponse ont l'air évidente pour vous qui êtes qualifiés, je vais devoir m'approprier ces réponses avant de m'en servir, mais avec les tutos ça devrai aller ^^. Je vais garder l'idée du multiplexeur de côté, cela me semble une bonne solution je n'avais pas penser à coupler d'autre circuit intégrés avec Arduino !

Et pour ce qui est de changer de carte je pense pas que cela soit possible, les commandes sont très longue à l'université et je ne sais pas si mon professeur tolèrera. :/

En tout cas je vous remercie pour vos réponses !

Nikosss15: Et pour ce qui est de changer de carte je pense pas que cela soit possible, les commandes sont très longue à l'université et je ne sais pas si mon professeur tolèrera. :/

Il y a en a peut-être une qui traine dans un tiroir ?

Je vais garder l'idée du multiplexeur de côté, cela me semble une bonne solution je n'avais pas penser à coupler d'autre circuit intégrés avec Arduino !

Il y a aussi une solution que je n'avais pas osé proposer mais effectivement qui traine surement au fond d'un tiroir : des relais mécaniques inverseurs :grin:

Ok cela fait matériel des années 50 (1950 pas 1850 quand même) mais : 1) cela est surement disponible dans un tiroir 2) cela permet de commencer à travailler le temps de recevoir les circuits multiplexeurs

Attention quand même : alim externe obligatoire pour les relais Si ce sont des "vrais fond de tiroir" la probabilité est grande qu'il ne soient pas équipés d'un transistors de commande. Il ne faut jamais connecter un relais sur une sortie micro (Tu es à l'université donc tu devrais connaître la Loi de Lentz) Voir ce tuto : http://forum.arduino.cc/index.php?topic=100727.0

PS : nous sommes gentils quand nous sentons que le demandeur fait des efforts, les consommateurs sont moins bien reçus, tu connais la recette pour que cela continue :grin:

Je vous suis à tous très reconnaissant !
Je vais parler de vos solutions à mon professeur pour voir dans quelle direction je peux avancer, il pourra surement m’expliquer plus en détails pourquoi faire ces choix et comment les mettre en place, et merci pour les tutos !