Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1992 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  255  256  257  ..  264  265  266  267  268  269
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°404979
marcoluni
RAS
Posté le 14-06-2023 à 21:30:14  profilanswer
 

Reprise du message précédent :
Le module en question est Y3 sur ce schéma.  :D  
 
https://a.d-cd.net/4198c71s-960.jpg  
 
et la vue démontée pour mieux comprendre :
 
https://www.youtube.com/watch?v=5_tNSPS9AKE

Message cité 1 fois
Message édité par marcoluni le 14-06-2023 à 21:35:52
mood
Publicité
Posté le 14-06-2023 à 21:30:14  profilanswer
 

n°404981
tchou@happ​y
Posté le 14-06-2023 à 21:47:17  profilanswer
 

Salut,
je me suis amusé à l'aide de ChatGPt ( j'y comprends rien au code arduino  :pt1cable: ) à essayer de me faire un thermostat réglable à base de:
 
- arduino UNO R3
- écran 12864-14-V3.0 ( écran d'imprimante 3d eryone thinker SE)  
- 2 BP pour augmenter / baisser la consigne de tempèrature
- 1 transistor 2N2222A associé à la sortie relais pour piloter un contacteur
- 1 sonde de tempèrature HT-NTC 100K B3950 ( thermocouple 2 fils)  
 
Il m'a sorti un programme non sans mal, mais le problème est que je n'arrive pas à avoir un affichage sur l'écran.
Il s'allume bien, mais rien d'écrit...  
 
Je vous met le câblage qu'il m'a dit d'utiliser ainsi que la photo de l'écran et le programme crée en dessous, si jamais quelqu'un à la gentillesse d'y jeter un œil voir si y a des trucs à sauver ...
Merci
 
 
 

Code :
  1. #include <LiquidCrystal.h>
  2. // Initialisation de l'écran LCD avec RS sur D7 et E sur D9
  3. LiquidCrystal lcd(7, 9, 4, 5, 6, 8);
  4. // Broches pour les boutons poussoirs
  5. const int boutonPlusPin = 2;
  6. const int boutonMoinsPin = 3;
  7. // Broche pour la sonde de température
  8. const int sondePin = A0;
  9. // Broche pour le contrôle du relais
  10. const int relaisPin = 4;
  11. // Seuil de température
  12. const int seuilTemperature = 25;
  13. // Variables pour la température mesurée et le seuil réglé
  14. int temperature = 0;
  15. int seuilTemperatureRegle = seuilTemperature;
  16. void setup() {
  17.   // Initialisation de l'écran LCD
  18.   lcd.begin(16, 2);
  19.   // Configuration des boutons poussoirs
  20.   pinMode(boutonPlusPin, INPUT_PULLUP);
  21.   pinMode(boutonMoinsPin, INPUT_PULLUP);
  22.   // Configuration du relais
  23.   pinMode(relaisPin, OUTPUT);
  24.   // Affichage initial sur l'écran LCD
  25.   lcd.print("Temp: " );
  26.   lcd.setCursor(6, 0);
  27.   lcd.print(seuilTemperatureRegle);
  28.   lcd.print("C" );
  29. }
  30. void loop() {
  31.   // Lecture de la température
  32.   int valeurAnalogique = analogRead(sondePin);
  33.   temperature = map(valeurAnalogique, 0, 1023, -40, 125);
  34.   // Lecture des boutons poussoirs
  35.   boolean boutonPlusAppuye = digitalRead(boutonPlusPin) == LOW;
  36.   boolean boutonMoinsAppuye = digitalRead(boutonMoinsPin) == LOW;
  37.   // Réglage du seuil de température
  38.   if (boutonPlusAppuye) {
  39.     seuilTemperatureRegle++;
  40.   } else if (boutonMoinsAppuye) {
  41.     seuilTemperatureRegle--;
  42.   }
  43.   // Activation ou désactivation du relais en fonction du seuil de température
  44.   if (temperature >= seuilTemperatureRegle) {
  45.     digitalWrite(relaisPin, HIGH); // Le relais est activé
  46.   } else {
  47.     digitalWrite(relaisPin, LOW); // Le relais est désactivé
  48.   }
  49.   // Affichage sur l'écran LCD
  50.   lcd.setCursor(6, 1);
  51.   lcd.print("   " ); // Effacer l'ancienne valeur
  52.   lcd.setCursor(6, 1);
  53.   lcd.print(temperature);
  54.   lcd.setCursor(13, 0);
  55.   lcd.print("   " ); // Effacer l'ancienne valeur
  56.   lcd.setCursor(13, 0);
  57.   lcd.print(seuilTemperatureRegle);
  58.   delay(200); // Délai pour éviter la lecture rapide des boutons poussoirs
  59. }


https://i.ibb.co/GWzZdpL/cablage-12864.jpg
 
    EXP1.1 (Buzzer) : Pas de connexion si vous ne souhaitez pas utiliser le buzzer.
    EXP1.2 (Encoder1) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP1.3 (LCD4/SD) : Connectez cette broche à une autre broche disponible de l'Arduino (par exemple, D8).
    EXP1.4 (LCDRS/CS) : Connectez cette broche à la broche D7 l'Arduino.
    EXP1.5 (LCDE/SCLK) : Connectez cette broche à la broche D9 de l'Arduino.
    EXP1.6, EXP1.7, EXP1.8 : Pas de connexion (non utilisées).
    EXP1.9 (GND) : Connectez à la broche GND de l'Arduino.
    EXP1.10 (5V+) : Connectez à la broche 5V de l'Arduino.
    EXP2.1, EXP2.2 : Pas de connexion (non utilisées).
    EXP2.3 (Encoder2) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP2.4 : Pas de connexion (non utilisée).
    EXP2.5 (Encoder3) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP2.6, EXP2.7, EXP2.9, EXP2.10 : Pas de connexion (non utilisées).
    EXP2.8 (RESET) : Connectez cette broche à une broche digitale de votre choix de l'Arduino (par exemple, Pin 10) pour la réinitialisation.

Message cité 1 fois
Message édité par tchou@happy le 14-06-2023 à 22:13:51
n°404984
Natopsi
☄️Just end it already!☄️
Posté le 14-06-2023 à 22:01:25  profilanswer
 

marcoluni a écrit :

Le module en question est Y3 sur ce schéma.  :D  
 
https://a.d-cd.net/4198c71s-960.jpg
 
et la vue démontée pour mieux comprendre :
 
https://www.youtube.com/watch?v=5_tNSPS9AKE


C'est là que tu retrouve tout l'intérêt d'utiliser un truc open source, c'est que tu peux coder la fonction plutôt que de chercher à faire une électronique tordue.
 
Le L298N ou équivalent est adapté, et tu peux déjà essayer de faire un truc en partant d'une page blanche puis modifier le code existant.
 
En boucle ouverte tu contente juste de regarder la consigne de PWM. Si elle est "grande" c'est probablement que le soft veut ouvrir le papillon donc tu envoie une consigne dans le sens d'ouverture, si elle est "petite" c'est plutôt qu'il veut fermer donc tu tourne dans l'autre sens.
 
En boucle fermée faut que t'arrive à avoir une interruption pour compter le nombre d'impulsions du capteur à effet hall en tenant compte du sens de rotation du moteur et une tâche qui compare le nombre d'impulsions avec une consigne fournie par le reste du code et donne des ordres avancer / neutre / reculer au moteur. Avec en bonus un recalage à zéro quand t'as une consigne en butée.

Message cité 1 fois
Message édité par Natopsi le 14-06-2023 à 22:02:05

---------------
ACH/VDSHFRCoin◈1435mm⚡
n°404985
rat de com​bat
attention rongeur méchant!
Posté le 14-06-2023 à 22:02:05  profilanswer
 

EDIT: Réponse à tchou@happy:

 

Merci de mettre le code entre balises.

 

Visiblement ce code est écrit pour un afficheur 16x2 compatible HD44780, or sur ta photo je vois 12864 ce qui me fais penser que c'est un afficheur graphique avec un tout autre (mais lequel?) contrôleur. Si j'ai raison ça ne risque pas de fonctionner...

 

Aussi il faudrait vraiment prévoir de l'hystéresis dans le code pour éviter que le relais s'allume et s'éteint en alternant très rapidement tout le temps.


Message édité par rat de combat le 14-06-2023 à 22:02:46

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°404986
marcoluni
RAS
Posté le 14-06-2023 à 22:02:57  profilanswer
 

tchou@happy a écrit :

Salut,
je me suis amusé à l'aide de ChatGPt ( j'y comprends rien au code arduino  :pt1cable: ) à essayer de me faire un thermostat réglable à base de:

 

- arduino UNO R3
- écran 12864-14-V3.0 ( écran d'imprimante 3d eryone thinker SE)
- 2 BP pour augmenter / baisser la consigne de tempèrature
- 1 transistor 2N2222A associé à la sortie relais pour piloter un contacteur
- 1 sonde de tempèrature HT-NTC 100K B3950 ( thermocouple 2 fils)

 

Il m'a sorti un programme non sans mal, mais le problème est que je n'arrive pas à avoir un affichage sur l'écran.
Il s'allume bien, mais rien d'écrit...

 

Je vous met le câblage qu'il m'a dit d'utiliser ainsi que la photo de l'écran et le programme crée en dessous, si jamais quelqu'un à la gentillesse d'y jeter un œil voir si y a des trucs à sauver ...
Merci

  

#include <LiquidCrystal.h>

 

// Initialisation de l'écran LCD avec RS sur D7 et E sur D9
LiquidCrystal lcd(7, 9, 4, 5, 6, 8);

 

// Broches pour les boutons poussoirs
const int boutonPlusPin = 2;
const int boutonMoinsPin = 3;

 

// Broche pour la sonde de température
const int sondePin = A0;

 

// Broche pour le contrôle du relais
const int relaisPin = 4;

 

// Seuil de température
const int seuilTemperature = 25;

 

// Variables pour la température mesurée et le seuil réglé
int temperature = 0;
int seuilTemperatureRegle = seuilTemperature;

 

void setup() {
  // Initialisation de l'écran LCD
  lcd.begin(16, 2);

 

 // Configuration des boutons poussoirs
  pinMode(boutonPlusPin, INPUT_PULLUP);
  pinMode(boutonMoinsPin, INPUT_PULLUP);

 

 // Configuration du relais
  pinMode(relaisPin, OUTPUT);

 

 // Affichage initial sur l'écran LCD
  lcd.print("Temp: " );
  lcd.setCursor(6, 0);
  lcd.print(seuilTemperatureRegle);
  lcd.print("C" );
}

 

void loop() {
  // Lecture de la température
  int valeurAnalogique = analogRead(sondePin);
  temperature = map(valeurAnalogique, 0, 1023, -40, 125);

 

 // Lecture des boutons poussoirs
  boolean boutonPlusAppuye = digitalRead(boutonPlusPin) == LOW;
  boolean boutonMoinsAppuye = digitalRead(boutonMoinsPin) == LOW;

 

 // Réglage du seuil de température
  if (boutonPlusAppuye) {
    seuilTemperatureRegle++;
  } else if (boutonMoinsAppuye) {
    seuilTemperatureRegle--;
  }

 

 // Activation ou désactivation du relais en fonction du seuil de température
  if (temperature >= seuilTemperatureRegle) {
    digitalWrite(relaisPin, HIGH); // Le relais est activé
  } else {
    digitalWrite(relaisPin, LOW); // Le relais est désactivé
  }

 

 // Affichage sur l'écran LCD
  lcd.setCursor(6, 1);
  lcd.print("   " ); // Effacer l'ancienne valeur
  lcd.setCursor(6, 1);
  lcd.print(temperature);
  lcd.setCursor(13, 0);
  lcd.print("   " ); // Effacer l'ancienne valeur
  lcd.setCursor(13, 0);
  lcd.print(seuilTemperatureRegle);

 

 delay(200); // Délai pour éviter la lecture rapide des boutons poussoirs
}

 

https://i.ibb.co/GWzZdpL/cablage-12864.jpg

 

   EXP1.1 (Buzzer) : Pas de connexion si vous ne souhaitez pas utiliser le buzzer.
    EXP1.2 (Encoder1) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP1.3 (LCD4/SD) : Connectez cette broche à une autre broche disponible de l'Arduino (par exemple, D8).
    EXP1.4 (LCDRS/CS) : Connectez cette broche à la broche D7 l'Arduino.
    EXP1.5 (LCDE/SCLK) : Connectez cette broche à la broche D9 de l'Arduino.
    EXP1.6, EXP1.7, EXP1.8 : Pas de connexion (non utilisées).
    EXP1.9 (GND) : Connectez à la broche GND de l'Arduino.
    EXP1.10 (5V+) : Connectez à la broche 5V de l'Arduino.
    EXP2.1, EXP2.2 : Pas de connexion (non utilisées).
    EXP2.3 (Encoder2) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP2.4 : Pas de connexion (non utilisée).
    EXP2.5 (Encoder3) : Pas de connexion si vous ne souhaitez pas utiliser un encodeur.
    EXP2.6, EXP2.7, EXP2.9, EXP2.10 : Pas de connexion (non utilisées).
    EXP2.8 (RESET) : Connectez cette broche à une broche digitale de votre choix de l'Arduino (par exemple, Pin 10) pour la réinitialisation.

 

Ton écran est un écran matriciel ou graphique, la gestion déclarée dans le programme proposé s'appuie sur un écran alphanumérique 'basique' type contrôleur HD44780, cela ne peux donc pas fonctionner en l'état.
Il te faut déclarer une autre librairie spécifique et gérer l'exploitation du code.

 

Exemple : https://labprojectsbd.com/2023/03/2 [...] h-arduino/

 


edit : burned par rat de combat


Message édité par marcoluni le 14-06-2023 à 22:04:59
n°404988
tchou@happ​y
Posté le 14-06-2023 à 22:15:29  profilanswer
 

Merci pour vos réponses. j'ai essayé de mettre en forme le texte.
 
En cherchant dans le programme de mon imprimante 3D je suis tombé sur cette ligne, ne serai-ce pas le type de mon écran ?
 

Code :
  1. RepRapDiscount FULL GRAPHIC Smart Controller
  2. // https://reprap.org/wiki/RepRapDisco [...] Controller
  3. //
  4. #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Message cité 1 fois
Message édité par tchou@happy le 14-06-2023 à 22:35:27
n°404991
marcoluni
RAS
Posté le 14-06-2023 à 22:36:35  profilanswer
 

Natopsi a écrit :


C'est là que tu retrouve tout l'intérêt d'utiliser un truc open source, c'est que tu peux coder la fonction plutôt que de chercher à faire une électronique tordue.
 
Le L298N ou équivalent est adapté, et tu peux déjà essayer de faire un truc en partant d'une page blanche puis modifier le code existant.
 
En boucle ouverte tu contente juste de regarder la consigne de PWM. Si elle est "grande" c'est probablement que le soft veut ouvrir le papillon donc tu envoie une consigne dans le sens d'ouverture, si elle est "petite" c'est plutôt qu'il veut fermer donc tu tourne dans l'autre sens.
 
En boucle fermée faut que t'arrive à avoir une interruption pour compter le nombre d'impulsions du capteur à effet hall en tenant compte du sens de rotation du moteur et une tâche qui compare le nombre d'impulsions avec une consigne fournie par le reste du code et donne des ordres avancer / neutre / reculer au moteur. Avec en bonus un recalage à zéro quand t'as une consigne en butée.


 
Je vais jeter mon dévolu sur celui là, c'est le plus adapté.  :jap:  
 
Ce sera en boucle fermée, mais pas avec le capteur hall (sinon oui il faut gérer le homing et toutiquenti), c'est le régime (vitesse de rotation du moteur thermique en tr/min) qui est mesuré, et le module est là justement pour ouvrir / fermer le volet d'admission d'air pour réguler un régime consigne de genre 1000 tr/min avec marge de +/- 50 tr/min (hystérésis et PID a voir)
 
Je vais éventuellement regarder à l'oscilloscope le signal du capteur pour la science  [:meganne lapin]

n°404992
marcoluni
RAS
Posté le 14-06-2023 à 22:39:44  profilanswer
 

tchou@happy a écrit :

Merci pour vos réponses. j'ai essayé de mettre en forme le texte.

 

En cherchant dans le programme de mon imprimante 3D je suis tombé sur cette ligne, ne serai-ce pas le type de mon écran ?

 
Code :
  1. RepRapDiscount FULL GRAPHIC Smart Controller
  2. // https://reprap.org/wiki/RepRapDisco [...] Controller
  3. //
  4. #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER


 

Oui, c'est un contrôleur ST7565 comme sur le lien que je t'ai mis dans le post plus haut.


Message édité par marcoluni le 14-06-2023 à 22:40:07
n°404993
crazytiti
http://crazytiti.free.fr/
Posté le 14-06-2023 à 22:51:57  profilanswer
 

@marcoluni
Ok je comprends ta un minimum de compréhension du schmilblik :bounce:
Du coup ce qui me déraneg le plus c'est de faire la régulation de l'intensité du moteur de papillon en fonction du régime moteur.
Pour moi ça ne peux fonctionner ainsi (et encore...) que si tout le moteur et les périphs tournent rond.
Or ça part vite en sucette ces bestioles.
Et je ne sais pas si l'actuateur est protégé : que se passe t il si tu essaye de le faire tourner à fond alors qu'il est déja en buté min ou max ?
Bref je ne comprends pas comment peut marcher la version sans le capteur hall.
Sinon pour faire ça "propre" il faudrait (comme tu la dit) faire un homming à l'allumage + comptage des tour lors du fonctionnement.
Et bien sur ça veut dire de mettre un petit microcontrolleur pour gérer ça entre l'actuateur et le speeduino.
Sinon sur BMW E30 phase 2 essence (320 et 325) ya un actuateur qui marche en % et vaut 50€ sur ebay : 13411433626
Edit : je suis HS c'est une valve de bipasse et non un entrebailleur de pap.

 

Edit edit : en y réfléchissant je crois que ta tout intérêt à caler un pti µc et faire ça bien, de toute façon l'elec nécessaire pour convertir un PWM en un signal DC inversable sera tout aussi complexe.

 

Edit edit edit : punaise sur la vidéo youtube l'actuateur a un jeux de 4-5mm, tu m’étonne que ta un ralentit foireux avec ça !

 

https://i.ebayimg.com/images/g/7KMAAOSw1exiUDkd/s-l300.jpg


Message édité par crazytiti le 14-06-2023 à 22:58:47

---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°404996
tchou@happ​y
Posté le 14-06-2023 à 23:37:24  profilanswer
 

bon, chatgpt m'a pondu ça, mais ça ne fonctionne pas mieux.
 
Je n'arrive pas à trouver de docs sur cet écran ni comment le brancher  :(  
 

Code :
  1. #include <U8g2lib.h>
  2. // Initialisation de l'écran LCD
  3. U8G2_ST7920_128X64_1_SW_SPI lcd(U8X8_PIN_NONE, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 9);
  4. // Broches pour les boutons poussoirs
  5. const int boutonPlusPin = 2;
  6. const int boutonMoinsPin = 3;
  7. // Broche pour la sonde de température
  8. const int sondePin = A0;
  9. // Broche pour le contrôle du relais
  10. const int relaisPin = 4;
  11. // Seuil de température
  12. const int seuilTemperature = 25;
  13. // Variables pour la température mesurée et le seuil réglé
  14. int temperature = 0;
  15. int seuilTemperatureRegle = seuilTemperature;
  16. void setup() {
  17.   // Configuration des boutons poussoirs
  18.   pinMode(boutonPlusPin, INPUT_PULLUP);
  19.   pinMode(boutonMoinsPin, INPUT_PULLUP);
  20.   // Configuration du relais
  21.   pinMode(relaisPin, OUTPUT);
  22.   // Initialisation de l'écran LCD
  23.   lcd.begin();
  24.   lcd.setContrast(50); // Réglage du contraste de l'écran
  25.   // Affichage initial sur l'écran LCD
  26.   lcd.setFont(u8g2_font_helvB10_tf);
  27.   lcd.firstPage();
  28.   do {
  29.     lcd.setCursor(0, 2);
  30.     lcd.print("Temp: " );
  31.     lcd.setCursor(80, 2);
  32.     lcd.print("C" );
  33.     lcd.setCursor(0, 6);
  34.     lcd.print("Seuil: " );
  35.     lcd.setCursor(80, 6);
  36.     lcd.print("C" );
  37.   } while (lcd.nextPage());
  38. }
  39. void loop() {
  40.   // Lecture de la température
  41.   int valeurAnalogique = analogRead(sondePin);
  42.   temperature = map(valeurAnalogique, 0, 1023, -40, 125);
  43.   // Lecture des boutons poussoirs
  44.   boolean boutonPlusAppuye = digitalRead(boutonPlusPin) == LOW;
  45.   boolean boutonMoinsAppuye = digitalRead(boutonMoinsPin) == LOW;
  46.   // Réglage du seuil de température
  47.   if (boutonPlusAppuye) {
  48.     seuilTemperatureRegle++;
  49.   } else if (boutonMoinsAppuye) {
  50.     seuilTemperatureRegle--;
  51.   }
  52.   // Activation ou désactivation du relais en fonction du seuil de température
  53.   if (temperature >= seuilTemperatureRegle) {
  54.     digitalWrite(relaisPin, HIGH); // Le relais est activé
  55.   } else {
  56.     digitalWrite(relaisPin, LOW); // Le relais est désactivé
  57.   }
  58.   // Affichage sur l'écran LCD
  59.   lcd.firstPage();
  60.   do {
  61.     lcd.setCursor(40, 2);
  62.     lcd.print(temperature);
  63.     lcd.setCursor(40, 6);
  64.     lcd.print(seuilTemperatureRegle);
  65.   } while (lcd.nextPage());
  66.   delay(200); // Délai pour éviter la lecture rapide des boutons poussoirs
  67. }

mood
Publicité
Posté le 14-06-2023 à 23:37:24  profilanswer
 

n°404997
rat de com​bat
attention rongeur méchant!
Posté le 14-06-2023 à 23:53:19  profilanswer
 

Désolé de dire ça, mais si tu veux quelque chose va falloir mettre un minimum les mains dans le bazar... Si vraiment tu n'y comprend rien tu fais mieux de prendre un thermostat tout fait, c'est pas le genre de truc qui n'existe pas... Sinon tu regardes pour un autre language de prog' pour Arduino plus digeste pour toi, mais je ne saurais te conseiller.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°404999
M4vrick
Mad user
Posté le 15-06-2023 à 06:37:33  profilanswer
 

chatGPT peut te donner une structure de code, t'aider à mettre en place des routines spécifiques. Mais il ne peut pas écrire du code qui marchera tel quel en prenant en compte toutes les spécificités techniques de ton montage physique.
Il va forcément falloir que tu adaptes ton code...
 
Ensuite ce qu'il faut que tu fasses c'est travailler par petit bloc :
- Tu fais un bout de code qui valide le fonctionnement de l'écran
- Tu fais un bout de code qui valide le pilotage de l'actuateur de ralenti
- Tu fais un bout de code qui valide les entrées des boutons
 
Et ensuite tu mets tout ensemble pour réaliser ton projet.


---------------
--== M4vr|ck ==--
n°405014
crazytiti
http://crazytiti.free.fr/
Posté le 15-06-2023 à 10:35:08  profilanswer
 

+1, rien que pour lui faire écrire un casse brique en html j'ai du my reprendre à plusieurs fois et "ajuster"


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405015
M4vrick
Mad user
Posté le 15-06-2023 à 10:54:33  profilanswer
 

Rien que le delay(200) dans le loop() c'est une hérésie, ca veux dire qu'au mieux le programme peut travailler 5 fois par secondes.
Mais c'est classique de chatGPT, il a tendance à mettre des delay partout pour séquencer les choses.


Message édité par M4vrick le 15-06-2023 à 10:54:55

---------------
--== M4vr|ck ==--
n°405024
froggycorp
Posté le 15-06-2023 à 11:32:36  profilanswer
 

rat de combat a écrit :

Tu as parfaitement raison. Ce test "voir si quelqu'un parle avant de commencer à parler" a un nom compliqué aussi (collision avoidance-bidule-j'ai oublié :o ), de mémoire cela se fait p.ex. pour l'Ethernet (ce qui de mémoire explique la restriction de 100 mètres maxi et la taille minimale d'une trame). Mais si on teste puis on fait autre chose avant de commencer à émettre ce n'est pas très pertinent... Aussi si "les ondes sont occupées" il faut dans l'idéal attendre un temps aléatoire, car sinon on peut (théoriquement) avoir un dead-lock avec plusieurs modules qui veulent émettre.

 

Bref, perso je dirais soit implémenter un système genre le TCP (autrement dit d'"accusé de réception" ou je ne sais comment on appelle ça) soit simplement envoyer la requête plusieurs fois avec un peu d'intervalle et espérer. :o Après tout dépend de l'utilisation. Perso pour un capteur qui envoye une trame tout les quelque minutes j'ai utilisé la deuxième méthode, sachant que si une trame se perd c'est pas bien grave

 

Pour éthernet je pense pas, tu as un fil RX & un TX. J'avais bien vu l'histoire du dead-lock, surtout que si j'émets pendant une émission, bah je nique la trame en cours, donc de 1 problème, je passe à 2 problèmes (on se croirait sur une thread sur l'alcoolisme  :D ).
C'est ACK pour l'accusé, un des objectif m'amènerait à beaucoup de sondes (50-100 ?), donc potentiellement du gros bordel. Je vais voir pour tester le RSSI pour essayer d'augmenter la probabilité que le paquet arrive. Cela m'arrange actuellement moyen de faire de l'ACK car cela mange de la BP et de la batterie.
Mon idée de base, c'est de le faire à la méthode UDP. Comme les sondes envoient tous les X, bah si un paquet n'arrive pas à destination, ce n'est pas grave. Ensuite si je n'ai aps de chance, aucun n'arrivera jamais  :fou:

 
tchou@happy a écrit :


Je n'arrive pas à trouver de docs sur cet écran ni comment le brancher  :(

 

Du SPI avec 3 pins, cela va être compliqué à faire fonctionner. Je dis ça, je dis rien  :whistle: (sauf si la lib ne fait qu'envoyer mais bon ...)

 

Le datasheet : http://aitendo3.sakura.ne.jp/aiten [...] nualV1.pdf

 

Tu as le diagramme de l'écran, donc tu peux tracer les pistes.

 

Il n'y a pas de sérial, mais déjà pour tester que cela fonctionne, tu peux faire une boucle qui modifie la luminosité. Tu verras si la communication fonctionne avant d'attaquer le reste.

 

(et je ferais gaffe, on dirait que le SPI doit etre en 3V, mais c'est pas bien claire, le mieux est de tout mettre à 3V)

Message cité 1 fois
Message édité par froggycorp le 15-06-2023 à 12:13:25
n°405029
marcoluni
RAS
Posté le 15-06-2023 à 12:44:53  profilanswer
 

@crazytiti
 
Oui, l'idée de remplacer la butée de papillon par une valve de bypass d'air m'a traversé l'esprit aussi.
Mécaniquement hélas ce n'est pas trop optimal / possible sur le montage actuel, ils ont (les ingénieurs) mis l'injecteur juste au dessus du papillon ce qui fait que papillon fermé le mélange 'gaz' ne passerait pas bien par un bypass.
En plus d'être un poil dangereux  :o  
 
Pour exploiter leur actuateur sans le capteur hall, ils ont probablement limité l'intensité tout simplement pour éviter qu'en butée le bobinage du moteur crame, sale mais fonctionnel.
Ensuite ils ont fait une V2 avec le capteur hall pour au moins stopper le jus lorsque ça ne tourne plus  :lol:  (vu que c'est un seul capteur hall, tu ne peux déterminer le sens de rotation).
 
il faut admettre que c'est moyen bof en tout cas leur solution technique là   :pt1cable:

n°405031
rat de com​bat
attention rongeur méchant!
Posté le 15-06-2023 à 13:52:36  profilanswer
 

froggycorp a écrit :

Pour éthernet je pense pas, tu as un fil RX & un TX.

Après vérification je pensais au vieux 10BASE2. :o  https://en.wikipedia.org/wiki/CSMA/CD
Pour ton application (wireless) le mot magique semble être ceci: https://en.wikipedia.org/wiki/Carri [...] _avoidance - En regardant par la tu peux peut-être trouver une solution magique. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°405036
crazytiti
http://crazytiti.free.fr/
Posté le 15-06-2023 à 15:12:23  profilanswer
 

marcoluni a écrit :

@crazytiti

 

Oui, l'idée de remplacer la butée de papillon par une valve de bypass d'air m'a traversé l'esprit aussi.
Mécaniquement hélas ce n'est pas trop optimal / possible sur le montage actuel, ils ont (les ingénieurs) mis l'injecteur juste au dessus du papillon ce qui fait que papillon fermé le mélange 'gaz' ne passerait pas bien par un bypass.
En plus d'être un poil dangereux :o

 

Pour exploiter leur actuateur sans le capteur hall, ils ont probablement limité l'intensité tout simplement pour éviter qu'en butée le bobinage du moteur crame, sale mais fonctionnel.
Ensuite ils ont fait une V2 avec le capteur hall pour au moins stopper le jus lorsque ça ne tourne plus :lol: (vu que c'est un seul capteur hall, tu ne peux déterminer le sens de rotation).

 

il faut admettre que c'est moyen bof en tout cas leur solution technique là :pt1cable:


A oui c'est crade.
J'avais déjà vu l'injecteur cracher sur le pap sur une Fiat uno.
J'avais trouvé ça techniquement dégueulasse.
C'est justement à faible charge que tu as besoin d'une bonne pulvérisation. Et là tu jette un seau sur un mur en espérant que ça se vaporise dans l'air !
Le capteur te permet de savoir où tu en est car tu contrôle le sens de rotation.


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405038
froggycorp
Posté le 15-06-2023 à 16:15:16  profilanswer
 

rat de combat a écrit :

Après vérification je pensais au vieux 10BASE2. :o  https://en.wikipedia.org/wiki/CSMA/CD
Pour ton application (wireless) le mot magique semble être ceci: https://en.wikipedia.org/wiki/Carri [...] _avoidance - En regardant par la tu peux peut-être trouver une solution magique. :o

 

Ha vi, merci.
Le "Request to Send/Clear to Send" est intéressant, j'y avais po pensé. En pratique pour les nodes cela va bouffer trop d'énergie de faire un Tx/Rx/Tx je pense, je garde l'idée sous le coude.


Message édité par froggycorp le 15-06-2023 à 16:27:11
n°405051
crazytiti
http://crazytiti.free.fr/
Posté le 15-06-2023 à 21:55:47  profilanswer
 

CSMA-CD  [:adodonicoco]  c'est ce qu'il me reste des cours réseau avec la phrase clou-bec des néophytes qui se la pètent : "Ok mais tu te situe à quel niveau de la couche OSI ?"
CSMA-CD : carrier sense management access, colision detection (je vous le sort de mémoire !)
C'est d'ailleurs ce qui rend le réseau internet non déterministe.
Si c'est toujours occupé ton message n'arrivera jamais, et surtout même s'il arrive c'est après un trajet/temps non prévisible.

 

Edit : et d’ailleurs les "Request to send / Clear to send" c'est la fonction des pin RTS / CTS sur les ports série

Message cité 1 fois
Message édité par crazytiti le 15-06-2023 à 21:57:30

---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405081
rat de com​bat
attention rongeur méchant!
Posté le 16-06-2023 à 10:24:11  profilanswer
 

crazytiti a écrit :

Edit : et d’ailleurs les "Request to send / Clear to send" c'est la fonction des pin RTS / CTS sur les ports série

Toutafé, mais c'est plus franchement utilisé de nos jours... Généralement une interface série c'est juste GND+RX+TX, après certaines broches sont détournés genre pour faire un reset de l'Arduino ou similaire. Ces histoires de "hardware flow control" ça date de l'époque ou les PC et les modems étaient lents... :o  
 
Par contre, pour info: Il existe une autre version du flow control, à savoir le "software flow control" qui utilise deux valeurs 8 bits pour dire "stop"/"continuer". Typiquement c'est 0x11 et 0x13 et parfois (souvent sous Linux) c'est activé par défaut, donc si on a spécifiquement ces octets qui sont "perdues" lors de la transmission de données binaires faut regarder pour désactiver ce réglage. Perso ça m'a causé bien des ennuis cette histoire, d'où l'info...


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°405098
crazytiti
http://crazytiti.free.fr/
Posté le 16-06-2023 à 12:53:49  profilanswer
 

A oui !
D'ailleurs au taff on des soucis du même genre avec les FTP configurés par défaut en ascii, ça fait sauter les valeurs correspondant aux sauts de ligne :bounce:


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405128
SuperSic
Posté le 16-06-2023 à 20:50:58  profilanswer
 

crazytiti a écrit :

C'est pas possible, c'est un servo de type "treuil".
C'est fait pour enrouler/dérouler, pas pour se positionner.
Tu dit dans ton message "avoir 2 servo-moteurs pour gérer l'entrée/sortie "
Moi je te propose une solution avec 1 seul :lol:


Mais avec ta solution, tu bloques forcément soit l'entrée, soit la sortie. Ou alors, je ne comprends mal le schéma.


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°405129
crazytiti
http://crazytiti.free.fr/
Posté le 16-06-2023 à 20:57:40  profilanswer
 

Oui j'avais pas pensé qu'il fallait une position totalement libre.
Ya besoin des 4 positions  ?
- bloqué
- entrée
- sortie
- entrée et sortie
 
Ceci dit je doit pouvoir faire ça avec une forme plus étudiée...


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405130
SuperSic
Posté le 16-06-2023 à 21:06:16  profilanswer
 

crazytiti a écrit :

Oui j'avais pas pensé qu'il fallait une position totalement libre.
Ya besoin des 4 positions  ?
- bloqué
- entrée
- sortie
- entrée et sortie
 
Ceci dit je doit pouvoir faire ça avec une forme plus étudiée...


Oui, c'est ça, 4 positions. T'embete pas, j'ai commandé un pack de 2 servo 180°. ;)


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°405131
rat de com​bat
attention rongeur méchant!
Posté le 16-06-2023 à 21:07:34  profilanswer
 

Y'a qu'a mieux éduquer les chats, comme ça plus de soucis! :o  
 
(C'est une blague, je connais bien les chats. :love: )


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°405133
SuperSic
Posté le 16-06-2023 à 21:12:22  profilanswer
 

En l’occurrence, j'ai 3 chats. L'une des 2 femelles, c'est une tête de mule. Elle est intelligente, aucun doute. C'est juste une mauvaise tête qui ne veut pas utiliser la chatière. :fou:


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°405134
rat de com​bat
attention rongeur méchant!
Posté le 16-06-2023 à 21:17:52  profilanswer
 

L'avantage de l'intelligence c'est qu'on peut se faire passer pour un idiot. Le contraire est plus difficile. :o  
 
Désolé pour le HS. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°405135
crazytiti
http://crazytiti.free.fr/
Posté le 16-06-2023 à 21:18:20  profilanswer
 

Voila
https://rehost.diberie.com/Uploads/0/20230616-211810-16c5b7aa-2f5a-4365-a078-518643bbcf42.0.pic.gif


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405136
SuperSic
Posté le 16-06-2023 à 21:20:34  profilanswer
 


Merci, je verrai si j'arrive à faire fonctionner un servo 180°. Par contre, j'ai po d'imprimante 3D.


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°405138
crazytiti
http://crazytiti.free.fr/
Posté le 16-06-2023 à 21:56:35  profilanswer
 

En vrai la pièce orange tu peut la faire en découpant un bout de plastique que tu colle sur un cylindre (crayon stylo) ou en faisant 2 trous et une grosse vis.
ou sinon un des copains (ou moi même) du topic impression 3d ont te fait ça pour le prix du timbre.


Message édité par crazytiti le 16-06-2023 à 22:25:16

---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405139
SuperSic
Posté le 16-06-2023 à 21:58:21  profilanswer
 

je prends note, merci pour l'aide :jap:


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°405298
tchou@happ​y
Posté le 19-06-2023 à 18:09:46  profilanswer
 

me revoila avec mon programme arduino de thermostat réalisé avec chatgpt.
 
cela a été un poil laborieux, mais fonctionne presque bien.
Il me reste le PID à affiner.
Il m'a intégré une fonction d’hystérésis qui ne semble pas fonctionner, mais il n'arrive pas à me résoudre cela.
 
Y a surement à redire, mais pour mon utilisation cela fait le job.
 
Cela dit si vous avez des conseils je suis preneur  :jap:  
 
 

Code :
  1. #include <U8g2lib.h>
  2. #include <PID_v1.h>
  3. U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
  4. const int boutonPlusPin = 2;
  5. const int boutonMoinsPin = 3;
  6. const int relaisPin = 4;
  7. const int seuilTemperature = 25;
  8. const float hysteresis = 0.5; // Valeur d'hystérésis en degrés Celsius
  9. float temperature = 0.0;
  10. int seuilTemperatureReglable = seuilTemperature;
  11. float seuilTemperatureHaut = seuilTemperature + hysteresis;
  12. float seuilTemperatureBas = seuilTemperature - hysteresis;
  13. // Constantes pour la conversion de la thermistance NTC
  14. const int thermistorPin = A1;          // Broche analogique pour la thermistance NTC
  15. const int resistorValue = 22360;      // Valeur de résistance en ohms mesurée à 70°C
  16. // Configuration du régulateur PID
  17. double setpoint = 50.0;      // Valeur de consigne
  18. double input = 0.0;          // Valeur du système
  19. double output = 0.0;         // Signal de contrôle
  20. double Kp = 20.0;             // Coefficient proportionnel
  21. double Ki = 0.2;             // Coefficient intégral
  22. double Kd = 80.0;             // Coefficient dérivé
  23. PID myPID(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);
  24. unsigned long previousMillis = 0;
  25. const unsigned long interval = 50;  // Intervalle de mise à jour en millisecondes
  26. const unsigned long delayAppuiLong = 1000; // Durée pour considérer un appui comme long (en millisecondes)
  27. const unsigned long delayAppuiCourt = 200; // Durée pour considérer un appui comme court (en millisecondes)
  28. bool boutonPlusAppuyeLong = false;
  29. bool boutonPlusAppuyeCourt = false;
  30. unsigned long boutonPlusAppuyeMillis = 0;
  31. bool boutonMoinsAppuyeLong = false;
  32. bool boutonMoinsAppuyeCourt = false;
  33. unsigned long boutonMoinsAppuyeMillis = 0;
  34. // Logo de flamme en tableau d'octets
  35. const unsigned char flame_logo[] PROGMEM = {
  36.   0x00, 0x18, 0x18, 0x3C, 0x3C, 0x7E, 0x7E, 0xFF, 0xFF, 0xE7, 0xE7, 0xC3, 0xC3, 0x81, 0x81, 0x00,
  37.   0x00, 0x00, 0x0C, 0x0C, 0x3C, 0x3C, 0x7E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xC3, 0xC3,
  38.   0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x7E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
  39.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x7E, 0x7E, 0xFF, 0xFF, 0xFF,
  40.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0xFF,
  41.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E
  42. };
  43. #define flame_logo_width 16
  44. #define flame_logo_height 7
  45. void setup() {
  46.   pinMode(boutonPlusPin, INPUT_PULLUP);
  47.   pinMode(boutonMoinsPin, INPUT_PULLUP);
  48.   pinMode(relaisPin, OUTPUT);
  49.   u8g2.begin();
  50.   u8g2.setContrast(40);
  51.   // Initialisation du régulateur PID
  52.   myPID.SetMode(AUTOMATIC);
  53.   myPID.SetOutputLimits(0, 255);
  54.   // Initialisation de la communication série pour les messages de débogage
  55.   Serial.begin(9600);
  56. }
  57. double error = 0.0;
  58.     double integral = 0.0;
  59.     double lastError = 0.0;
  60. void loop() {
  61.   unsigned long currentMillis = millis();
  62.   if (currentMillis - previousMillis >= interval) {
  63.     previousMillis = currentMillis;
  64.     // Calcul de la température avec une précision d'un chiffre après la virgule
  65.   float voltage = analogRead(thermistorPin) * (5.0 / 1023.0);
  66.   float resistance = resistorValue * voltage / (5.0 - voltage);
  67.   temperature = 1.0 / (log(resistance / resistorValue) / 3950.0 + 1.0 / 298.15) - 273.15;
  68.     boolean boutonPlusAppuye = digitalRead(boutonPlusPin) == LOW;
  69.     boolean boutonMoinsAppuye = digitalRead(boutonMoinsPin) == LOW;
  70.     input = analogRead(thermistorPin);
  71.     myPID.Compute();
  72.     analogWrite(relaisPin, output);
  73.     // Vérification de l'appui long sur le bouton +
  74.     if (boutonPlusAppuye) {
  75.       if (!boutonPlusAppuyeLong && !boutonPlusAppuyeCourt) {
  76.         boutonPlusAppuyeMillis = currentMillis;
  77.         boutonPlusAppuyeCourt = true;
  78.       }
  79.       if (currentMillis - boutonPlusAppuyeMillis >= delayAppuiLong) {
  80.         if (!boutonPlusAppuyeLong) {
  81.           boutonPlusAppuyeLong = true;
  82.           seuilTemperatureReglable++;
  83.         }
  84.       }
  85.     } else {
  86.       boutonPlusAppuyeLong = false;
  87.       boutonPlusAppuyeCourt = false;
  88.     }
  89.     // Vérification de l'appui long sur le bouton -
  90.     if (boutonMoinsAppuye) {
  91.       if (!boutonMoinsAppuyeLong && !boutonMoinsAppuyeCourt) {
  92.         boutonMoinsAppuyeMillis = currentMillis;
  93.         boutonMoinsAppuyeCourt = true;
  94.       }
  95.       if (currentMillis - boutonMoinsAppuyeMillis >= delayAppuiLong) {
  96.         if (!boutonMoinsAppuyeLong) {
  97.           boutonMoinsAppuyeLong = true;
  98.           seuilTemperatureReglable--;
  99.         }
  100.       }
  101.     } else {
  102.       boutonMoinsAppuyeLong = false;
  103.       boutonMoinsAppuyeCourt = false;
  104.     }
  105.     // Gestion de l'action sur le bouton +
  106.     if (!boutonPlusAppuyeLong && boutonPlusAppuyeCourt) {
  107.       seuilTemperatureReglable++;
  108.       boutonPlusAppuyeCourt = false;
  109.     }
  110.     // Gestion de l'action sur le bouton -
  111.     if (!boutonMoinsAppuyeLong && boutonMoinsAppuyeCourt) {
  112.       seuilTemperatureReglable--;
  113.       boutonMoinsAppuyeCourt = false;
  114.     }
  115.     error = temperature - seuilTemperatureReglable;
  116.     double proportional = Kp * error;
  117.     integral += Ki * error;
  118.     double derivative = Kd * (error - lastError);
  119.     lastError = error;
  120.     double commande = proportional + integral + derivative;
  121.     seuilTemperatureHaut = seuilTemperatureReglable + hysteresis + commande;
  122.     seuilTemperatureBas = seuilTemperatureReglable - hysteresis + commande;
  123.     if (temperature >= seuilTemperatureHaut && digitalRead(relaisPin) == LOW) {
  124.       digitalWrite(relaisPin, HIGH);
  125.     } else if (temperature <= seuilTemperatureBas && digitalRead(relaisPin) == HIGH) {
  126.       digitalWrite(relaisPin, LOW);
  127.     }
  128.     // Affichage de la température avec un chiffre après la virgule dans le moniteur série
  129.     Serial.print("Température : " );
  130. Serial.println(temperature, 1);  // Affichage avec une décimale
  131. u8g2.setFont(u8g2_font_helvB08_tf);  // Utilisation d'une police plus petite
  132. u8g2.print("Temp: " );
  133. char temperatureStr[6];
  134. dtostrf(temperature, 4, 1, temperatureStr);  // Formater la température avec une décimale
  135. u8g2.print(temperatureStr);
  136. u8g2.print(" C" );
  137. Serial.print("   Seuil : " );
  138. Serial.println(seuilTemperatureReglable, 1);  // Affichage avec une décimale
  139. u8g2.clearBuffer();
  140. u8g2.setFont(u8g2_font_helvB10_tf);
  141. u8g2.setCursor(0, 20);
  142. u8g2.print("Temp: " );
  143. u8g2.print(temperatureStr);
  144. u8g2.print(" C" );
  145. u8g2.setFont(u8g2_font_profont12_mf);
  146. u8g2.setCursor(0, 45);
  147. u8g2.print("Seuil: " );
  148. u8g2.print(seuilTemperatureReglable);
  149. u8g2.print(" C" );
  150.     if (digitalRead(relaisPin) == HIGH) {
  151.       u8g2.drawXBMP(100, 40, flame_logo_width, flame_logo_height, flame_logo);
  152.     }
  153.     u8g2.sendBuffer();
  154.   }
  155. }


Message édité par tchou@happy le 19-06-2023 à 18:10:37
n°405302
ObsydianKe​nobi
peloton suicida
Posté le 19-06-2023 à 19:13:24  profilanswer
 

N'oublie pas de le rebooter tous les 50 jours :o


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°405310
tchou@happ​y
Posté le 19-06-2023 à 20:17:32  profilanswer
 

bon, la régulation ne fonctionne pas de toute façon...
Je pense que je vais repartir de 0  :o  
 
 
Pourquoi tu dis de rebooter tous les 50 jours ? :??:  

n°405315
ObsydianKe​nobi
peloton suicida
Posté le 19-06-2023 à 22:08:21  profilanswer
 

Parce que Millis() déborde après 50j donc repart à 0
 
Pour contourner ça y a des astuces https://www.norwegiancreations.com/ [...] nd-micros/


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°405318
crazytiti
http://crazytiti.free.fr/
Posté le 19-06-2023 à 22:50:30  profilanswer
 

Punaise il t'a mis un PID pour un régulateur de chauffage :lol:
Normalement on fait du on/off avec une hystérésis et ça suffit.
Au faite j'y pense j'ai déja fait ce que tu cherche à faire :
 Donc 1 capteur de température dallas ds1820, 1 arduino "pro mini", 1 écran LCD, 1 relais "bi stable" et 1 porte 18650.
On secoue le tout pendant 4-5H et on obtient un magnifique thermostat-cotton-tige !
Le code est sur mon GitHub : https://github.com/crazytiti/dumb-thermostat

 

Nb : le mien est un peu high-tech : il utilise une 18650 avec mesure de la tension pour prévenir la batterie vide.
Par contre il ne fait pas usage de millis donc pas besoin de reboot (mais en vrais la 18650 ne tiens pas 50j plutôt 1semaine)
Et puis il faut certainement modifier le code car j'avais un relais bistable qui n'a donc pas besoin d'être maintenu.

 

https://raw.githubusercontent.com/crazytiti/dumb-thermostat/master/IMG_20181117_000913.jpg


Message édité par crazytiti le 19-06-2023 à 23:03:44

---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405328
froggycorp
Posté le 20-06-2023 à 01:36:18  profilanswer
 

Comment faire en 500 lignes un truc qui doit en faire 100 à tout casser ^^

 

Genre :

Code :
  1. // Calcul de la température avec une précision d'un chiffre après la virgule
  2.   float voltage = analogRead(thermistorPin) * (5.0 / 1023.0);
  3.   float resistance = resistorValue * voltage / (5.0 - voltage);
  4.   temperature = 1.0 / (log(resistance / resistorValue) / 3950.0 + 1.0 / 298.15) - 273.15;
 

L'hystéresis c'est facil :

 
Code :
  1. if (temperature_piece < temperature_voulue -  hystéresis)
  2. Chauffage(on);
  3. if (temperature_piece > temperature_voulue + hystéresis)
  4.   Chauffage(off);


Message édité par froggycorp le 20-06-2023 à 01:46:39
n°405369
tchou@happ​y
Posté le 20-06-2023 à 14:53:26  profilanswer
 

Ben le PID c'est moi qui est demandé. Le chauffage a une énorme inertie.

 

Genre je coupe l'alimentation à 50°c, et il continue de monter jusqu'à 60°c.

 

C'est pour ça que j'ai rebuté l'option l'hystérésis.

 


n°405387
crazytiti
http://crazytiti.free.fr/
Posté le 20-06-2023 à 17:18:38  profilanswer
 

a oui je vois moi j'anticipais ça en mettant une consigne plus basse.
Mais ça atteint vite ses limites.


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°405397
tchou@happ​y
Posté le 20-06-2023 à 18:51:11  profilanswer
 

oui c'est pour cela que j’aimais bien l'idée du PID  :D  
je vais tester un autre programme trouvé sur le net en l'adaptant à mes besoins voir si ça fonctionne.
 
Je me tâte aussi à ajouter une simple tempo dans les conditions d'activation du relais de chauffage. genre je chauffe 5sec maxi en continu, puis je coupe 5 secondes et ainsi de suite.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  255  256  257  ..  264  265  266  267  268  269

Aller à :
Ajouter une réponse
 

Sujets relatifs
* Réparations de vos appareils électroniques & electromenager * 
Plus de sujets relatifs à : [arduino] Topic Unique blabla @ Arduino


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR