Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

Messages récents

#71
Papyblue a raison, erreur de ma part.

Voici le code modifié:

#include <arduino.h>

// Définition des pins du microcontrôleur (A voir selon la conficguration du PCB)
#define Bouton1 4  // (Bouton poussoir 1 sur PB4 soit Pin 3 de l'ATTiny85)
#define Bouton2 2  // (Bouton poussoir 2 sur PB2 soit Pin 7 de l'ATTiny85)
#define Led1    5  // (Led 1 sur PB5 soit Pin 1 de l'ATTiny85)
#define Led2    3  // (Led 2 sur PB3 soit Pin 2 de l'ATTiny85)
#define Motor1  0   // (Commande moteur 1 sur PB0 soit Pin 5 de l'ATTiny85)
#define Motor2  1   // (Commande moteur 2 sur PB1 soit Pin 6 de l'ATTiny85)

void setup() {
  pinMode(Bouton1, INPUT_PULLUP);
  pinMode(Bouton2, INPUT_PULLUP);
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Motor1, OUTPUT);
  pinMode(Motor2, OUTPUT);
  digitalWrite(Led1, LOW);
  digitalWrite(Led2, LOW);
  analogWrite(Motor1, 0);
  analogWrite(Motor2, 0);
}

void loop() {
  // Si on appuie sur le bouton 1, le moteur tourne dans un sens
  if (digitalRead(Bouton1) == LOW) {
    analogWrite(Motor1, 255);
    analogWrite(Motor2, 0);
    digitalWrite(Led1, HIGH);
    digitalWrite(Led2, LOW);
    // Si on appuie sur le bouton 2, le moteur tourne dans l'autre sens
  } else if (digitalRead(Bouton2) == LOW) {
    analogWrite(Motor1, 0);
    analogWrite(Motor2, 255);
    digitalWrite(Led1, LOW);
    digitalWrite(Led2, HIGH);
    // Si aucun bouton n'est appuyé ou si on appuie sur les deux en même temps, le moteur ne tourne pas
  } else if ((digitalRead(Bouton1) == HIGH && digitalRead(Bouton2) == HIGH) || (digitalRead(Bouton1) == LOW && digitalRead(Bouton2) == LOW)) {
    analogWrite(Motor1, 0);
    analogWrite(Motor2, 0);
    digitalWrite(Led1, LOW);
    digitalWrite(Led2, LOW);
  }
}
#72
Voila ce que c'est que de taper trop vite un code et ne pas se relire consciencieusement...
#73
Bonjour X.

Je vois une erreur dans le code, j'ai laissé des digitalWrite au lieu de analogWrite.

Mets ceci dans le setup à la place:

Au lieu de:

digitalWrite(Motor1, LOW);
digitalWrite(Motor2, LOW);

écrit:

analogWrite(Motor1, 0);
analogWrite(Motor2, 0);
#74
Bonjour,
Il y a un bug :
Bouton2 == HIGH  va donner un booléen ( donc 0 ou 1 )
or digitalRead () attend un numéro de broche
il fallait écrire :
if (digitalRead(Bouton2) == HIGH )
#75
Bonjour Philippe,

Comme promis je reviens aux nouvelles.Je suis déçu du résultat.
J'ai soudé l'ATtiny85 à l'emplacement de la puce grillée.
J'ai coupé 3 pistes et mis 3 pontages (schéma ci-joint).
Maintenant, je ne sais plus où se situe mon erreur.
Dans le code code ou dans le câblage?

Ci-dessous le code utilisé:
#include <arduino.h>

// Définition des pins du microcontrôleur (A voir selon la conficguration du PCB)
#define Bouton1 4  // (Bouton poussoir 1 sur PB4 soit Pin 3 de l'ATTiny85)
#define Bouton2 3  // (Bouton poussoir 2 sur PB2 soit Pin 7 de l'ATTiny85)
#define Led1    5  // (Led 1 sur PB5 soit Pin 1 de l'ATTiny85)
#define Led2    4  // (Led 2 sur PB3 soit Pin 2 de l'ATTiny85)
#define Motor1  0   // (Commande moteur 1 sur PB0 soit Pin 5 de l'ATTiny85)
#define Motor2  1   // (Commande moteur 2 sur PB1 soit Pin 6 de l'ATTiny85)

void setup() {
  pinMode(Bouton1, INPUT_PULLUP);
  pinMode(Bouton2, INPUT_PULLUP);
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Motor1, OUTPUT);
  pinMode(Motor2, OUTPUT);
  digitalWrite(Led1, LOW);
  digitalWrite(Led2, LOW);
  digitalWrite(Motor1, LOW);
  digitalWrite(Motor2, LOW);
}

void loop() {
  // Si on appuie sur le bouton 1, le moteur tourne dans un sens
  if (digitalRead(Bouton1 == LOW)) {
    analogWrite(Motor1, 255);
    analogWrite(Motor2, 0);
    digitalWrite(Led1, HIGH);
    digitalWrite(Led2, LOW);
    // Si on appuie sur le bouton 2, le moteur tourne dans l'autre sens
  } else if (digitalRead(Bouton2 == LOW)) {
    analogWrite(Motor1, 0);
    analogWrite(Motor2, 255);
    digitalWrite(Led1, LOW);
    digitalWrite(Led2, HIGH);
    // Si aucun bouton n'est appuyé ou si on appuie sur les deux en même temps, le moteur ne tourne pas
  } else if ((digitalRead(Bouton1 == HIGH) && digitalRead(Bouton2 == HIGH)) || (digitalRead(Bouton1 == LOW) && digitalRead(Bouton2 == LOW))) {
    analogWrite(Motor1, 0);
    analogWrite(Motor2, 0);
    digitalWrite(Led1, LOW);
    digitalWrite(Led2, LOW);
  }
}

Au branchement de la batterie une led s'allume.
La pression sur les boutons n'a aucun effet sur le moteur.
Il ne tourne pas. Peine perdue!

Merci beaucoup pour tout ce que tu as fait.

Bonne journée.
#76
Vos projets et Montages d'Électronique / Re : AOP sur Filtre inverseur ...
Dernier message par papyblue - Mars 24, 2025, 11:08:02 AM
Bonjour,
Oui vous avez raison, le plasma est un magnifique générateur de perturbations de toutes sortes. J'ai moi-même galéré avec une CNC sous mach3 qui plantait au démarrage de la torche.
L'isolation galvanique est fortement conseillée (et même plus), elle peut être double comme dans le diagramme joint d'un THC du commerce.
D'une manière générale les règles de l'art de la CEM  doivent être respectées (en particulier masses et blindages) car l'isolation galvanique ne protège pas des problèmes de rayonnements.
Les solutions que vous proposez sont à priori envisageables, les plus simples sont souvent les meilleures. 
#77
Vos projets et Montages d'Électronique / Re : AOP sur Filtre inverseur ...
Dernier message par Scarabe24 - Mars 24, 2025, 08:42:47 AM
Bonjour,

J'ai bien pris en compte vos recommandations et mon montage fonctionne correctement, je vous en remercie.

J'ai cependant un souci avec les perturbations liées au fonctionnement du plasma, ce qui est bien connu.
Je souhaiterais donc isoler la partie commande de la partie puissance au niveau du signal analogique de tension de l'arc, après le pont diviseur (-5V/masse en sortie pont actuellement).

Je réfléchis à plusieurs solutions :

  1/ Conversion en PWM / transmission par photocoupleur / conversion PWM en analogique / traitement THC
  2/ Conversion numérique par un microcontrôleur / transimission Bluetooth / traitement THC
  3/ Traitement THC direct du signal -5V (microcontôleur local sur plasma) / liaison contrôleur CNC par optocoupleurs (commandes pilotes moteurs PAP, signaux de commande utilisateur, ...)

Plus simplement : comment transmettre un signal analogique sans liaison électrique (masses séparées) ?

La conversion numérique paraît indispensable mais comment éviter de rajouter un microcontrôleur ?
Il existe des circuits spécialisés comme le LTC6992 (analogique > PWM) et le LTC2644 (PWM > analogique) mais est-ce une solution adaptée à cet environnement (solution 1/ ci-dessus) ?
#78
Promis pour un retour. En fait, c'est grâce à toi que je suis arrivé à ce stade.
Par reconnaissance, je te dois bien ça.

Dès que j'aurai plus de temps. J'envisage de souder l'ATtiny85 à l'emplacement de la puce grillée.
Je couperai des pistes et ferai les pontages nécessaires.

Dans le fichier ci-joint, j'ai adapté les pins. J'espère ne pas avoir fait de bêtises.

Bonne soirée.
#79
De rien.

C'est sûr que la micro-électronique demande du matériel adapté.

Oui, tu peux utiliser 1, 2, 3, 7 comme tu veux en entrée ou sortie, à condition de les définir dans la partie setup du programme. Les boutons doivent être définis en INPUT_PULLUP et les leds en OUTPUT.

Le PULLUP met une résistance au VCC de la pin concernée, à l'intérieur du micro-contrôleur, puisqu'en appuyant sur un bouton on met cette pin au GND, ainsi on a bien deux niveaux distnctifs sur la pin concernée: Bouton relaché, pin = +5V, Bouton appuyé, pin = 0V.

Au tout début du programme, on donne des noms au pins:

#define Bouton1 5  // (Bouton poussoir 1 sur PB5 soit Pin 1 de l'ATTiny85)
#define Bouton2 3  // (Bouton poussoir 2 sur PB3 soit Pin 2 de l'ATTiny85)
#define Led1    4  // (Led 1 sur PB4 soit Pin 3 de l'ATTiny85)
#define Led2    2  // (Led 2 sur PB2 soit Pin 7 de l'ATTiny85)
#define Motor1  0   // (Commande moteur 1 sur PB0 soit Pin 5 de l'ATTiny85)
#define Motor2  1   // (Commande moteur 2 sur PB1 soit Pin 6 de l'ATTiny85)

puis dans le setup, on donne le type:

void setup() {
  pinMode(Bouton1, INPUT_PULLUP);
  pinMode(Bouton2, INPUT_PULLUP);
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Motor1, OUTPUT);
  pinMode(Motor2, OUTPUT);
  digitalWrite(Led1, LOW);
  digitalWrite(Led2, LOW);
  digitalWrite(Motor1, LOW);
  digitalWrite(Motor2, LOW);
}

Tiens-moi au courant stp.
A+
#80
Je te remercie pour tes explications.

En effet,8 petits fils feraient l'affaire. Mais je n'ai pas tous le nécessaire d'un électronicien.
De plus avec l'âge, la vue et la dextérité ont fortement baissées.
Réaliser des soudures sur une puce de surface, ça être dur pour moi.

Merci, je reviendrai aux nouvelles.

edit: Donc je peux utiliser les pins 1, 2, 3 et 7 comme je veux.
 c'est à dire soit pour les diodes ou pour les boutons poussoirs.
Et, adapter les numéros au sein du programme.