Bonjour,
Je débute dans l'électronique et l'Arduino.
Je vais vous présenter mon projet et mes problèmes en espérant que quelqu'un puisse m'aider.
Projet :
-Création d'un "automate" pour un tableau électrique.
Cahier des charges :
-Récupérer l'information quand un disjoncteur tombe.
-Récupérer l'information quand un arrêt d'urgence est appuyé.
-Afficher les informations précédentes sur écran pour identifier plus vite le problèmes.
-Créer un voyant lumineux clignotant quand il y'a un défaut.
Explication :
J'utilise un Arduino UNO (non officiel) pour faire mes tests, je récupère mes infos d'ARU(Arret urgence), de disjonction avec des boutons sur une Bread board, j'incorpore dans le projet un
Ecran LCD I2C 20/04, une sonde de température DS18B20, une horloge RTC DS3231, et un relais 5V.Une fois tout ça branché tout fonctionne parfaitement. Le relais me sert pour faire clignoter un voyant 220v. Je met tout ça sur une prise secteur pour tester tout les composant sur le long terme, tout ce passe parfaitement bien. Je réalise un schéma sur EASYEDA pour ensuite faire fabriquer un PCB. Pour le PCB je passe sur un Arduino nano (non officiel) pour gagner en place.
Une fois les composants soudé je met tout ça sur une prise et je laisse tourner 1 semaine de plus. Apres tout mes tests je met mon PCB dans le Coffret électrique (coffret métal) avec l'écran LCD en façade. Je simule mes défauts (ARU, Disjonctions), et la tout ce met a déconné l'écran se met a s'effacé au bout de quelque secondes ca revient et ça tourne en boucle comme ça. Si j'enlève le défaut tout devient normal ou des fois ca me fais planter l'Arduino et plus rien ne se produits en interaction avec l'Arduino.
Essai :
J'ai essayé de :
-refaire le PCB avec un COPPER AREA en prenant le GND.
-mettre le PCB et l'écran dans une boite plastique a fin de les isolés des perturbations électriques.
Si vous avez des réponses a mon problèmes je vous en remercie.
Si vous avez des questions pour mieux comprendre n'hésité pas.
Voici le code :
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>
DS3231 rtc (SDA,SCL);
#define Temp A0
OneWire oneWire(Temp);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,20,4);
unsigned long timer;
unsigned long Timer1;
int SEC = 0;
bool ledState = false;
const int no1 = 2;
const int no2 = 4;
int State1;
int State2;
const int km = 13;
void setup() {
Wire.begin();
rtc.begin();
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(no1, INPUT_PULLUP);
pinMode(no2, INPUT_PULLUP);
pinMode(no3, INPUT_PULLUP);
pinMode(no4, INPUT_PULLUP);
pinMode(km, OUTPUT);
//rtc.setDOW(SUNDAY); // Set Day-of-Week to SUNDAY
//rtc.setTime(18, 48, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(05, 02, 2023); // Set the date to January 1st, 2014
timer = millis();
delay(10);
}
void loop() {
//HEURE
lcd.setCursor(0,0);
lcd.print("------");
lcd.print(rtc.getTimeStr());
lcd.print("------");
///////////////////////////////////////////////////////////////////////
//TEMPERATURE
/*sensors.requestTemperatures();
int Temp = sensors.getTempCByIndex(0);
lcd.setCursor(0,3);
lcd.print("------Temp:");
lcd.print(Temp);
lcd.print("c------");*/
///////////////////////////////////////////////////////////////////////
// DEFAUT
State1 = digitalRead(no1); // ARRET URGENCE
State2 = digitalRead(no2); // INTERRUPTEUR DIFFERENTIEL
if(State1 == HIGH){
lcd.setCursor(0,2);
lcd.print("Defaut ARRET URGENCE !");
Delay();
}else{
lcd.setCursor(0,2);
lcd.print(" ");
digitalWrite(km,LOW);
}
if(State2 == LOW{
lcd.setCursor(0,1);
lcd.print("Defaut Disjonction !");
Delay();
}else{
lcd.setCursor(0,1);
lcd.print(" ");
digitalWrite(km,LOW);
}
/////////////////////////////////////////////////////////////////////////
//RESET
if (millis() - timer > 995) {
timer = millis();
SEC = SEC + 1;
if (SEC > 1800) {
SEC = 0;
asm volatile("jmp 0x00");
lcd.clear();
timer = 0;
Timer1 = 0;
}
}
/////////////////////////////////////////////////////////////////////////
}
void Delay(){
if (millis() - Timer1 > 750) {
ledState=!ledState; // changer l'état de la LED
digitalWrite(km, ledState);
Timer1 = millis();
}
}

