Forum Électro-Bidouilleur

Sections => Vos projets et Montages d'Électronique => Discussion démarrée par: Zofran le Décembre 09, 2023, 11:58:24 am

Titre: Le projet arduino d'un gros noob.
Posté par: Zofran le Décembre 09, 2023, 11:58:24 am
Hello,

Je suis en train de faire joujou avec un arduino.
Mon projet fonctionne bien quand je le simule avec tinkercad, mais le doute m'habite.

J'ai le sentiment qu'il y a un gros court-circuit que je ne vois pas ... C'est réalisable ce montage ou ça va complètement griller ?  ;D
(https://lutim.lagout.org/FhJMaduM/3MZmnE5O.png)

Titre: Re : Le projet arduino d'un gros noob.
Posté par: papyblue le Décembre 09, 2023, 12:49:15 pm
Bonjour,
Je ne vois pas bien à quoi peut servir ce montage  mais en tout cas cela ne peut pas détruire la carte.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Décembre 09, 2023, 01:38:25 pm
Oui, sans contexte difficile d'imaginer à quoi peut servir ce montage.

Imaginons que j'ai une 100ènes de faisceaux contenant 25 câbles à fabriquer avec à chaque extrémité un connecteur.
Sans un appareil, je dois câbler le "connecteur mère", puis pour câbler le connecteur secondaire je dois "sonner" chaque câbles afin de les connecter sur la bonne pin du connecteur secondaire.

Avec mon projet arduino, je vais pouvoir connecter le "connecteur mère" sur l'arduino (chaque sorties de mon schéma correspond à une pin du connecteur).
Coté connecteur secondaire, en touchant un câble grâce au fil noir (GND), ça va me dire sur quelle pin je dois connecter mon câble dans le connecteur secondaire. Je ne sais pas si je suis assez clair ...  ;D

Pour l'exemple du câblage plus haut (je ne prend pas en compte la chute de tension des diodes dans le calcul des résistances et je n'ai fait que trois sortie pour tester) :
Il s'agit de deux ponts diviseur de tension avec une petite formule qui convertit en résistance :

Cas 1 (câblage de mon premier poste, fil GND sur la sortie C) :
Pont diviseur de tension A1 : 300 ohms
Pont diviseur de tension A2 : 100 ohms
==> Alors l'arduino me dit que c'est la sortie C

Cas 2 (câblage de mon premier poste mais j'ai les câbles en sortie A et B qui se touchent).
Les diodes en sortie A et B empêche le shunt
Pont diviseur de tension A1 : 300 ohms
Pont diviseur de tension A2 : 100 ohms
==> Alors l'arduino me dit que c'est la sortie C

Cas 3 (câblage de mon premier poste mais je touche sans faire exprès la sortie B et C avec mon fil noir (GND))
Pont diviseur de tension A1 : 200 ohms
Pont diviseur de tension A2 : 100 ohms
==> Normalement ça devrait être 300 Ohms en A1 pour que l'arduino m'indique la sortie C mais ce n'est pas le cas.
Alors l'arduino me dit que j'ai plusieurs sorties qui touchent le GND. (donc je dois bien faire attention de ne toucher qu'un câbles avec le fil GND).
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Décembre 10, 2023, 01:24:19 am
Bonjour.
Pourquoi veux-tu fonctionner avec des ponts diviseurs de tension ? Cela complique les choses. Si tu as besoin de beaucoup de connexions, tu devrais prendre un Arduino Mega 2560 qui possède 54 entrées/sorties et un afficheur LCD 1602. Avec un programme simple, cela qui t’indiquera sur quelle pin tu es de l’autre côté du câble.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: papyblue le Décembre 10, 2023, 10:52:25 am
Bonjour,
On peut imaginer une solution où il y aurait d'un côté un Arduino avec des UARTs soft (autant que nécessaire) émettant un message avec le numéro du fil et de l'autre côté un autre arduino visualisant le n° du fil reçu. Le retour de masse se faisant soit avec un fil dédié soit par la terre.Tout autre protocole peut être imaginé vu que d'un côté on ne fait que émettre et de l'autre que recevoir.
Titre: Re : Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Décembre 10, 2023, 01:30:53 pm
Bonjour.
Pourquoi veux-tu fonctionner avec des ponts diviseurs de tension ? Cela complique les choses. Si tu as besoin de beaucoup de connexions, tu devrais prendre un Arduino Mega 2560 qui possède 54 entrées/sorties et un afficheur LCD 1602. Avec un programme simple, cela qui t’indiquera sur quelle pin tu es de l’autre côté du câble.
Ayant déjà un arduino uno et aussi quelques atmega328 je n'ai pas du-tout envisagé d'utiliser un Mega 2560. C'est pour ça qu'avec le manque d'entrée, j'avais envisagé l'utilisation du pont diviseur.
Il est vrai qu'avec le nombre d'entrée suffisant du Mega 2560, ce serait plus simple.

Admettons que je veuille quand même poursuivre avec mon arduino uno, j'ai découvert hier, via une vidéo youtube, le registre à décalage 74HC165, est ce que ça pourrait faire le job pour ajouter des entrées supplémentaires ?

Si ça peut faire le job, ça va me permettre de m'amuser à coder deux méthodes différentes... C'est le but du projet, mettre les doigts dans l'arduino et apprendre à coder.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Décembre 10, 2023, 05:13:39 pm
Dans ce cas, il y a des petits modules d’extension de ports IO en I2C.
16 ports par module et avec 3 adresses I2C possibles, tu peux en mettre 3, soit 48 ports supplémentaires pour quelques euros sur AliExpress et à toi le codage qui sera assez simple.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Décembre 10, 2023, 05:18:30 pm
Sinon avec le 74HC165 ça peut fonctionner, il y a des exemples sur le net

https://hl4rny.tistory.com/532
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Décembre 22, 2023, 12:48:26 pm
@zofran

Quelle solution as-tu adopté au final ?
Titre: Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Décembre 24, 2023, 11:20:04 am
J'attends de recevoir des composants pour faire mes premiers essais.

J'ai acheté des 74HC165 et des mini-plaquettes PCF8575, j'ai envie de tester ces deux approches.

J'ai aussi vu (mais pas acheté) les MCP23017, qui semblent avoir le même fonctionnement que les PCF8575, disponible au format DIP, plus facile à souder pour mon montage final.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: kamill le Décembre 24, 2023, 04:29:21 pm
Bonjour,

Le MCP23017 est un circuit plus moderne (un peu plus cher aussi), c'est un vrai circuit bidirectionnnel.
Le PCF8575 est un circuit "quasi bidirectionnel" comme indiqué dans la datasheet. C'est à dire que pour l'utiliser en entrée il faut un programme particulier. Simple d'utilisation en sortie, un peu moins simple d'utilisation en entrée. Sur arduino, il y a des librairies qui gèrent ça.
Titre: Re : Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 09, 2024, 12:03:45 am
J'attends de recevoir des composants pour faire mes premiers essais.

J'ai acheté des 74HC165 et des mini-plaquettes PCF8575, j'ai envie de tester ces deux approches.

J'ai aussi vu (mais pas acheté) les MCP23017, qui semblent avoir le même fonctionnement que les PCF8575, disponible au format DIP, plus facile à souder pour mon montage final.

Bonjour.

Où en es-tu de tes essais ? Je suis curieux de connaître tes résultats.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Janvier 19, 2024, 08:19:50 pm
Hello,

Le projet en tant que tel n'a pas beaucoup avancé.

Par contre j'ai appris à faire plein de trucs de débutant qui me seront utile pour le projet.

J'ai réussi à programmer un ATMEGA328 et l'utiliser en "standalone" (sans bootloader et en utilisant l'horloge interne).
J'arrive à afficher ce que je veux sur un écran LCD 16*2.
Je commence à bien comprendre l'usage des fonctions(paramètres) afin d'éviter des répétitions et de faciliter la lecture du code dans arduino IDE.
A partir d'un datasheet, je sais maintenant convertir une adresse I2C binaire en hexadécimal.

Je pense partir sur ce qui me semble le plus simple pour mon projet, le MCP23017 (avec la librairie adafruit), j'ai reçu l'échantillon la semaine dernière. Pour l'instant je l'ai juste branché et fais mumuse avec le choix de l'adresses I2C, j'ai aussi réussi la lecture de l'action d'un bouton poussoir sur une entrée.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 19, 2024, 11:39:57 pm
Hello.

Et bien, nous sommes beaucoup à avoir commencé comme toi.
Me concernant, j’ai fait des petits essais, des petits programmes avant d’en faire qui ont plusieurs centaines et centaines de lignes maintenant.
Au fur et à mesure, tu vas te prendre au jeu et complexifier tes programmes.
C’est fabuleux ce qu’on peut faire avec des micro contrôleurs. Arduino, puis ESP8266 pour te familiariser avec des objets connectés, puis l’ESP32.
Il y en a plein d’autres. Les PIC, les Pico, etc.
Bonne continuation
Phil.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 19, 2024, 11:42:23 pm
Mais tiens au courant quand même de ta réalisation et la présenter une fois terminée.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Janvier 28, 2024, 03:53:08 pm
Hello,

Actuellement le projet est au stade de breadboard.

Sur la photo j'ai alimenté le circuit via une lipo et un régulateur L7805CV.
L'Atmega à droite n'est pas utilisé (mais c'est celui la qui sera intégré dans le montage final), je fais mes essais avec l'arduino.

Pour mon essai, c'est le fil bleu entouré en vert qui simule la future pointe de touche.

(https://lutim.lagout.org/7RRcsDI5/XXQjYtWW.png)

Et voici le code, à mon avis il peut être largement amélioré, j'espère ne pas avoir provoquée une crise cardiaque aux pros du code.  ;D
#include <Adafruit_MCP23X17.h>
#include <LiquidCrystal.h>

Adafruit_MCP23X17 mcp1;

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
void setup() {

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // set up the MCP
  mcp1.begin_I2C(0x20);      // Utiliser l'adresse par défaut 0x20
  activationEntreeMcp1();
 
}
void loop() {
 
  if (!mcp1.digitalRead(0)){
  affichagelcd("A");
  }

  if (!mcp1.digitalRead(1)){
  affichagelcd("B");
  }

  if (!mcp1.digitalRead(2)){
  affichagelcd("C");
  }

  if (!mcp1.digitalRead(3)){
  affichagelcd("D");
  }

  if (!mcp1.digitalRead(4)){
  affichagelcd("E");
  }

  if (!mcp1.digitalRead(5)){
  affichagelcd("F");
  }

  if (!mcp1.digitalRead(6)){
  affichagelcd("G");
  }

  if (!mcp1.digitalRead(7)){
  affichagelcd("H");
  }

  if (!mcp1.digitalRead(8)){
  affichagelcd("J");
  }

  if (!mcp1.digitalRead(9)){
  affichagelcd("K");
  }

  if (!mcp1.digitalRead(10)){
  affichagelcd("L");
  }

  if (!mcp1.digitalRead(11)){
  affichagelcd("M");
  }

  if (!mcp1.digitalRead(12)){
  affichagelcd("N");
  }

  if (!mcp1.digitalRead(13)){
  affichagelcd("P");
  }

  if (!mcp1.digitalRead(14)){
  affichagelcd("R");
  }

  if (!mcp1.digitalRead(15)){
  affichagelcd("S");
  }
}

void activationEntreeMcp1() {
  for (int entree=0; entree <=15; entree++){
    mcp1.pinMode(entree, INPUT_PULLUP);
  }
}

char affichagelcd(const char* point){
  lcd.setCursor(0, 1);
  lcd.print("Point ");
  lcd.print(point);
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("       ");
}
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 29, 2024, 04:19:39 pm
Et bien tu as bien avancé. C'est super. Des "if" répétés et du "delay" ne sont pas trop optimisés. Je vais regarder et te proposer une solution alternative.
Je n'ai pas de mcp, alors tu feras l'essai si tu veux.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 29, 2024, 04:31:05 pm
#include <Adafruit_MCP23X17.h>
#include <LiquidCrystal.h>

Adafruit_MCP23X17 mcp1;

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // set up the MCP
  mcp1.begin_I2C(0x20);  // Utiliser l'adresse par défaut 0x20
  activationEntreeMcp1();
}
void loop() {

  for (int pin = 0; pin <= 15; pin++) {
    if (!mcp1.digitalRead(pin)) {
      switch (pin) {

        case 0:
          affichagelcd("A");
          break;

        case 1:
          affichagelcd("B");
          break;

        case 2:
          affichagelcd("C");
          break;

        case 3:
          affichagelcd("D");
          break;

        case 4:
          affichagelcd("E");
          break;

        case 5:
          affichagelcd("F");
          break;

        case 6:
          affichagelcd("G");
          break;

        case 7:
          affichagelcd("H");
          break;

        case 8:
          affichagelcd("J");
          break;

        case 9:
          affichagelcd("K");
          break;

        case 10:
          affichagelcd("L");
          break;

        case 11:
          affichagelcd("M");
          break;

        case 12:
          affichagelcd("N");
          break;

        case 13:
          affichagelcd("P");
          break;

        case 14:
          affichagelcd("R");
          break;

        case 15:
          affichagelcd("S");
          break;
      }
    } else {
      affichagelcd("");
    }
  }
}
void activationEntreeMcp1() {
  for (int entree = 0; entree <= 15; entree++) {
    mcp1.pinMode(entree, INPUT_PULLUP);
  }
}

char affichagelcd(const char* point) {
  lcd.setCursor(0, 0);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print("Point ");
  lcd.print(point);
}
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Janvier 29, 2024, 04:33:34 pm
Cela te fera peut-être connaître la fonction "switch" qui est beaucoup plus rapide que des "if"
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Février 02, 2024, 01:31:55 pm
Bonjour.

As-tu essayé le code que je t’ai fait ?
Titre: Re : Le projet arduino d'un gros noob.
Posté par: Zofran le Février 02, 2024, 05:32:05 pm
Pas eu le temps de bidouiller cette semaine, je pense que demain ou après demain je pourrais essayer.

Je ne connaissais pas la fonction switch, j'avais essayé des choses avec for et while, mais sans réussir à faire quelque chose de fonctionnel.

J'ai un peu de mal à comprendre cette modification du code proposé (surtout les deux premières lignes) :
lcd.setCursor(0, 0);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print("Point ");
  lcd.print(point);
Pourquoi "reset" les caractères de la première ligne qui n'est pas vraiment utilisé pour afficher les points ?

Je n'aurais surement pas toujours des contacts francs quand je toucherais les fils avec ma pointe de touche, est ce que, sans delay, ça ne vas pas provoquer des "rebonds" (comme pour les bouton poussoir) ?

Sinon, je viens de me rendre compte que je n'ai pas mis de résistances de pullup sur ma liaison I2C, pourtant je n'ai pas rencontré de soucis de communication...

Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Février 02, 2024, 05:42:06 pm
C’est simplement pour que la première Ligne n’affiche pas de caractères hasardeux.

Fais un essai déjà comme ça et si tu as des rebonds, on fera un anti rebond avec millis, plutôt que delay mais étant donné que tu restes sur le même fil quelques secondes, un rebond ne devrait pas être gênant.

Je n’ai jamais mis de résistances pullup sur les liaisons I2C et je n’ai jamais eu de problème vu la courte longueur des fils.
Titre: Re : Le projet arduino d'un gros noob.
Posté par: philchamp51 le Février 27, 2024, 05:48:49 pm
Bonjour.

Où en es-tu de ta réalisation ? Ça fonctionne ?