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

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  166  167  168  ..  266  267  268  269  270  271
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°236839
hush hush
je savais que ça te plairait
Posté le 04-12-2018 à 12:47:43  profilanswer
 

Reprise du message précédent :
 [:eponge]  
 

SuperSic a écrit :

:hello:  
 
- Il a le matos de base pour l'électronique (fer à souder, étain, breadboard, ... ) ?
- niveau capteur, temperature + humidité, c'est le meme capteur (DHT22 de mémoire). Tu peux y ajouter un capteur pour vérifier l'humidité du sol ;)
- concernant "sur un écran à distance dans la maison ou dans la serre", ça dépend aussi de la distance serre-maison


J'ai pris ça pour commencer: https://www.amazon.fr/gp/product/B0 [...] UTF8&psc=1
Y a pas mal de capteurs et composants pour débuter et tout le matos pour prototyper (breadboard, cables...)
ça fait quelques jours que je l'ai reçu et pour le moment, j'en suis très content (y a pas mal de doc et examples de projets avec chaque composants)
 
Je pense que ça te coutera aussi cher que d'acheter uniquement les composants dont il aura besoin :)

mood
Publicité
Posté le 04-12-2018 à 12:47:43  profilanswer
 

n°237033
PierrotLeD​ingue
Yes we KANTE !
Posté le 05-12-2018 à 16:21:02  profilanswer
 

Merci. Bon après tout vu que c'est pour se lancer autant apprendre les bases avec un kit. C'est pas plus mal.

n°237109
hyperboles​ke
Posté le 06-12-2018 à 07:58:39  profilanswer
 

Bonjour :o
 
Je reviens avec mon petit projet de serre et je butte sur un truc qui est, je pense, pourtant tout con.
 
L'idée est d'allumer progressivement le ruban LED pour simuler le lever de soleil et l'éteindre progressivement pour le coucher de soleil.
Ca, c'est bon, j'y arrive en utilisant un module RTC.
Cependant, j'essaye de prendre en compte l'allumage si je branche tout le bouzin en pleine journée.
 
Dans le code ci-dessous, j'ai retiré tout ce qui ne concerne pas l'éclairage (je n'ai pas mis les fonctions ON/OFF progressif non plus pour plus de visibilité)
 
Donc, le problème que je n'arrive pas à résoude, c'est dans le void setup(). Comment faire pour voir si je me trouve après l'heure programmée d'allumage et avant l'heure programmée d'extinction ? Pour le moment, j'utilise un if mais uniquement sur l'heure, pas sur une précision de la partie minute.
 
En fonctionnement nominal :
Quand le programme détecte que heure=7 et minute=30, alors il lance l'allumage.
Quand le programme détecte que heure=19 et minute=00, alors il lance l'extinction.
 
QUand je branche l'arduino, il déroule donc le void setup() :
- Si heure est > 7 et heure < ou = à 19 alors il lance l'allumage.
 
et ce que j'aimerai arrive pas à faire ça :  
- Si heure est > 7 avec minute >30 et heure <ou= à 19 avec minute <ou=15, alors il lance l'allumage.
 

Code :
  1. int StartHeure = 7;  //heure de démarrage des LEDs
  2. int StartMin = 30;  //minutes de démarrage des LEDs
  3. int EndHeure = 19;  //heure extinction des LEDs
  4. int EndMin = 15;  //minutes extinction des LEDs
  5. void setup() {
  6.     Serial.begin(9600); // Start Serial
  7.     tmElements_t tm;
  8.     if (RTC.read(tm)) {
  9.       if ((tm.Hour>StartHeure) && (tm.Hour<=EndHeure)){ //Allumage d'un coup si on branche le systeme en pleine journée
  10.         LightsON();
  11.       }
  12.     }
  13. }
  14. void loop() {
  15.   tmElements_t tm;
  16.   SendDataToDomoticz();
  17. if (RTC.read(tm)) {//--> Début de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  18.   if ((tm.Hour==StartHeure) && (tm.Minute==StartMin)){  //Allumage de la lumiere a partir de 7h30 le matin
  19.     LightsON();
  20.   }
  21.   else if ((tm.Hour==EndHeure) && (tm.Minute==EndMin)){ //Extinction de la lumiere a partir de 19h30 le soir
  22.     LightsOFF();
  23.   }
  24. }//<-- Fin de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  25. delay(2000);
  26. }


 
Sinon pour le reste, je suis assez content pour le moment.
L'arduino se connecte via le port USB (série) au RPi 0 sur lequel un script .py vient récupérer les différentes infos et les envoie à mon serveur domoticz :
- Humidité ambiante
- Température ambiante
- humidité de la terre (quoi qu'il faille que je comprenne l'unité de mesure renvoyée par cette sonde)
- état ON/OFF/Lever de soleil/coucher de soleil du ruban LED
- Valeur d'intensité que j'applique à l'éclairage (pour voir où j'en sui dans l'éclairage
- Image de la webcam (mais ça, c'est directement sur le RPi)
Je ne me suis pas encore attaqué à la pompe à eau. Il faut que je regarde comment traiter l'info de la sonde d'humidité de la terre.

n°237112
ObsydianKe​nobi
peloton suicida
Posté le 06-12-2018 à 08:25:45  profilanswer
 

C'est l'accumulation des if qui te pose souci? J'avoue ne pas trop comprendre ce qui te bloque.
 
Sinon pour simplifier les comparaisons entre heures, il est plus simple de tout convertir en minutes (Heure de démarrage S 7*60 + 30, S = 450, heure de fin E 19*60 + 15, E = 1155)
 
Si au démarrage D il est 8h23, bah 8*60+23  D = 503, suffit de comparer que D > S et D < E


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°237116
hyperboles​ke
Posté le 06-12-2018 à 09:05:13  profilanswer
 

ObsydianKenobi a écrit :

C'est l'accumulation des if qui te pose souci? J'avoue ne pas trop comprendre ce qui te bloque.
 
Sinon pour simplifier les comparaisons entre heures, il est plus simple de tout convertir en minutes (Heure de démarrage S 7*60 + 30, S = 450, heure de fin E 19*60 + 15, E = 1155)
 
Si au démarrage D il est 8h23, bah 8*60+23  D = 503, suffit de comparer que D > S et D < E


 
L'accumulation des if ? non, aucun problème avec ça :D (Après, je suis preneur tous types d'optimisation de code)
 
Pour tout convertir en minute, j'allais venir en parler. Un collègue vient de me proposer ça aussi :jap:

n°237122
Nitescent
Posté le 06-12-2018 à 09:24:48  profilanswer
 

C'est pas le "<=" qui devrait s'écrire "=<" ou une connerie comme ça ?
Je me fais tout le temps avoir avec ça  :fou:


---------------
Photos astro sur Flickr | Observatoire astronomique à distance Youtube
n°237131
JPlnx
Posté le 06-12-2018 à 10:15:40  profilanswer
 

hyperboleske a écrit :

Bonjour :o
 
Je reviens avec mon petit projet de serre et je butte sur un truc qui est, je pense, pourtant tout con.
 
L'idée est d'allumer progressivement le ruban LED pour simuler le lever de soleil et l'éteindre progressivement pour le coucher de soleil.
Ca, c'est bon, j'y arrive en utilisant un module RTC.
Cependant, j'essaye de prendre en compte l'allumage si je branche tout le bouzin en pleine journée.
 
Dans le code ci-dessous, j'ai retiré tout ce qui ne concerne pas l'éclairage (je n'ai pas mis les fonctions ON/OFF progressif non plus pour plus de visibilité)
 
Donc, le problème que je n'arrive pas à résoude, c'est dans le void setup(). Comment faire pour voir si je me trouve après l'heure programmée d'allumage et avant l'heure programmée d'extinction ? Pour le moment, j'utilise un if mais uniquement sur l'heure, pas sur une précision de la partie minute.
 
En fonctionnement nominal :
Quand le programme détecte que heure=7 et minute=30, alors il lance l'allumage.
Quand le programme détecte que heure=19 et minute=00, alors il lance l'extinction.
 
QUand je branche l'arduino, il déroule donc le void setup() :
- Si heure est > 7 et heure < ou = à 19 alors il lance l'allumage.
 
et ce que j'aimerai arrive pas à faire ça :  
- Si heure est > 7 avec minute >30 et heure <ou= à 19 avec minute <ou=15, alors il lance l'allumage.
 

Code :
  1. int StartHeure = 7;  //heure de démarrage des LEDs
  2. int StartMin = 30;  //minutes de démarrage des LEDs
  3. int EndHeure = 19;  //heure extinction des LEDs
  4. int EndMin = 15;  //minutes extinction des LEDs
  5. void setup() {
  6.     Serial.begin(9600); // Start Serial
  7.     tmElements_t tm;
  8.     if (RTC.read(tm)) {
  9.       if ((tm.Hour>StartHeure) && (tm.Hour<=EndHeure)){ //Allumage d'un coup si on branche le systeme en pleine journée
  10.         LightsON();
  11.       }
  12.     }
  13. }
  14. void loop() {
  15.   tmElements_t tm;
  16.   SendDataToDomoticz();
  17. if (RTC.read(tm)) {//--> Début de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  18.   if ((tm.Hour==StartHeure) && (tm.Minute==StartMin)){  //Allumage de la lumiere a partir de 7h30 le matin
  19.     LightsON();
  20.   }
  21.   else if ((tm.Hour==EndHeure) && (tm.Minute==EndMin)){ //Extinction de la lumiere a partir de 19h30 le soir
  22.     LightsOFF();
  23.   }
  24. }//<-- Fin de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  25. delay(2000);
  26. }


 
Sinon pour le reste, je suis assez content pour le moment.
L'arduino se connecte via le port USB (série) au RPi 0 sur lequel un script .py vient récupérer les différentes infos et les envoie à mon serveur domoticz :
- Humidité ambiante
- Température ambiante
- humidité de la terre (quoi qu'il faille que je comprenne l'unité de mesure renvoyée par cette sonde)
- état ON/OFF/Lever de soleil/coucher de soleil du ruban LED
- Valeur d'intensité que j'applique à l'éclairage (pour voir où j'en sui dans l'éclairage
- Image de la webcam (mais ça, c'est directement sur le RPi)
Je ne me suis pas encore attaqué à la pompe à eau. Il faut que je regarde comment traiter l'info de la sonde d'humidité de la terre.


 
 
 
Je pense que tu peux récrite ta boucle comme ça :

Code :
  1. void loop() {
  2.   tmElements_t tm;
  3.   SendDataToDomoticz();
  4. if (RTC.read(tm)) {//--> Début de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  5.   if ((tm.Hour>=StartHeure) && (tm.Minute>=StartMin) && (tm.Hour<=EndHeure) && (tm.Minute<=EndMin) ){  //Allumage de la lumiere a partir de 7h30 le matin
  6.     LightsON();
  7.   }
  8.   else {
  9.     LightsOFF();
  10.   }
  11. }//<-- Fin de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  12. delay(2000);
  13. }


 
L'idée c'est de passer dans les fonctions ON / OFF systématiquement comme ça en pleine journée tu auras le bon état quelle que soit l'heure. Pour plus de lisibilité, je te conseille de sortir le test du if dans une fonction.

n°237132
tomsoft
Posté le 06-12-2018 à 10:16:31  profilanswer
 

A 10h10, ton code ne marche pas

n°237145
JPlnx
Posté le 06-12-2018 à 10:59:56  profilanswer
 

tomsoft a écrit :

A 10h10, ton code ne marche pas


damned, oui j'ai fait n'importe quoi, je rectifie ça dès que j'ai un peu de dipo  :fou:

n°237154
hyperboles​ke
Posté le 06-12-2018 à 11:28:15  profilanswer
 

Pour moi, à chaque boucle du loop, il va rentrer dans la fonction ON ou OFF tant qu'on est dans la plage horaire, non ?

 

edit : ok, c'est ce que tu précise.
Et dans cette fonction, je regarde si on est déjà allumé. Si non, alors on mets ON.

 

je vais sortir le en effet, et faire juste des appels de fonctions dans le void loop() ça sera plus simple à maniper en effet. :jap:


Message édité par hyperboleske le 06-12-2018 à 11:29:54
mood
Publicité
Posté le 06-12-2018 à 11:28:15  profilanswer
 

n°237157
tomsoft
Posté le 06-12-2018 à 11:35:11  profilanswer
 

Si tu gardais le fonctionnement en séparant tes heures des minutes faudrait :
 

Code :
  1. if(heureActuelle > heureAllumage && heureActuelle < heureExtinction){
  2.      allumer();
  3. } else if(heureActuelle == heureAllumage && minuteActuelle >= minuteAllumage){
  4.     allumer();
  5. } else if (heureActuelle == heureExtinction && minuteActuelle < minuteExtinction){
  6.     allumer();
  7. } else {
  8.    éteindre();
  9. }


 
Ca c'est la version très comprehensible.
 
En version plus compactée ca donne :
 

Code :
  1. if((heureActuelle > heureAllumage && heureActuelle < heureExtinction) || (heureActuelle == heureAllumage && minuteActuelle >= minuteAllumage) || (heureActuelle == heureExtinction && minuteActuelle < minuteExtinction)){
  2.      allumer();
  3. } else {
  4.    éteindre();
  5. }

n°237162
hyperboles​ke
Posté le 06-12-2018 à 11:44:44  profilanswer
 

Je vais jouer avec la version compréhensible ce soir pour m'approprier le concept et je passerai à la compact après.
Merci ! :jap:

n°237165
JPlnx
Posté le 06-12-2018 à 12:10:37  profilanswer
 

hyperboleske a écrit :

Je vais jouer avec la version compréhensible ce soir pour m'approprier le concept et je passerai à la compact après.
Merci ! :jap:


Voilà, le mieux c'est de récrire le truc à ta manière :-) En rectification de mon poste précédent, je t'aurais suggéré un truc comme ça :

Code :
  1. if (( (tm.Hour*60 + tm.Minute) >= (StartHeure*60 + StartMin)
  2.  && (tm.Hour*60 + tm.Minute) < (EndHeure*60 + EndMin)) ) {
  3. allumer();
  4. } else {
  5.    éteindre();
  6. }


 

n°237174
SuperSic
Posté le 06-12-2018 à 13:17:03  profilanswer
 

hyperboleske a écrit :

Je vais jouer avec la version compréhensible ce soir pour m'approprier le concept et je passerai à la compact après.
Merci ! :jap:


Tu te bases uniquement sur l'heure pour allumer/éteindre ? Tu ne prends pas en compte la luminosité ambiante ?
Accessoirement, je ne suis pas certains que ça soit utile de s'emmerder à allumer/éteindre progressivement le ruban LED. C'est plus respect du cycle jour/nuit qui doit être important pour les plantes.


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°237199
hyperboles​ke
Posté le 06-12-2018 à 14:52:51  profilanswer
 

SuperSic a écrit :


Tu te bases uniquement sur l'heure pour allumer/éteindre ? Tu ne prends pas en compte la luminosité ambiante ?


La serre ne sera pas dans un lieu super éclairé.

SuperSic a écrit :


Accessoirement, je ne suis pas certains que ça soit utile de s'emmerder à allumer/éteindre progressivement le ruban LED. C'est plus respect du cycle jour/nuit qui doit être important pour les plantes.


Pas utile, je ne sais pas. Mais sympa à faire :D


---------------
Même si la bière est toujours vendue en bouteilles d'une pinte, cela n'entraîne pas que la bière soit constituée de parties indivisibles d'une pinte chacune.
n°237314
hyperboles​ke
Posté le 07-12-2018 à 09:07:24  profilanswer
 

JPlnx a écrit :


Voilà, le mieux c'est de récrire le truc à ta manière :-) En rectification de mon poste précédent, je t'aurais suggéré un truc comme ça :

Code :
  1. if (( (tm.Hour*60 + tm.Minute) >= (StartHeure*60 + StartMin)
  2.  && (tm.Hour*60 + tm.Minute) < (EndHeure*60 + EndMin)) ) {
  3. allumer();
  4. } else {
  5.    éteindre();
  6. }


 


Bon, j'ai pas eu le temps de tester quoique ce soit hier :(
Du coup je joue avec le code mais au boulot :D
 
question à la con : j'enregistre toutes mes valeurs  "fixes" dans des variables en début de module. Pour moi c'est plus simple à manipuler pour les retrouver et les modifier surtout si je les utilise à plusieurs endroits. Il n'y a pas de risque particulier à faire comme ça ? (outre le remplissage de la mémoire)

n°237319
JPlnx
Posté le 07-12-2018 à 09:14:33  profilanswer
 

hyperboleske a écrit :


Bon, j'ai pas eu le temps de tester quoique ce soit hier :(
Du coup je joue avec le code mais au boulot :D
 
question à la con : j'enregistre toutes mes valeurs  "fixes" dans des variables en début de module. Pour moi c'est plus simple à manipuler pour les retrouver et les modifier surtout si je les utilise à plusieurs endroits. Il n'y a pas de risque particulier à faire comme ça ? (outre le remplissage de la mémoire)


 
Clairement c'est pas optimal (mais peut-être que le compilateur est suffisamment malin pour que ça change rien au final).
C'est tout con mais une variable fixe ça s'appelle une constante :D
Et dans le cas de l'arduino, le plus simple c'est d'utiliser les #defines : http://www.mon-club-elec.fr/pmwiki [...] ain.Define

n°237329
Natopsi
☄️Just end it already!☄️
Posté le 07-12-2018 à 09:56:51  profilanswer
 

Heureusement le mot clé const est là pour préciser explicitement une constante, et même constexpr en C++   :jap:


---------------
ACH/VDSHFRCoin◈1435mm⚡
n°237350
hyperboles​ke
Posté le 07-12-2018 à 11:35:34  profilanswer
 

JPlnx a écrit :


 
Clairement c'est pas optimal (mais peut-être que le compilateur est suffisamment malin pour que ça change rien au final).
C'est tout con mais une variable fixe ça s'appelle une constante :D
Et dans le cas de l'arduino, le plus simple c'est d'utiliser les #defines : http://www.mon-club-elec.fr/pmwiki [...] ain.Define


 

Natopsi a écrit :

Heureusement le mot clé const est là pour préciser explicitement une constante, et même constexpr en C++   :jap:


 
Merci :jap:
J'ai utilisé pas mal de #define du coup. Mais en modifiant le nom pour être sûr de ne pas remplacer du texte qui ne devrait pas l'être :D
 
Je suis passé de ça :  

Code :
  1. int pl = 9;       //Pin par laquelle est pilotée le ruban LED
  2. int bght = 0;     //Initialisation du brightness  
  3. int fade = 5;     //Incrément utilisé pour allumer et eteindre progressivement les LEDs
  4. int maxlum = 255;   //Valeur maximale de la luminosite possible
  5. int minlum = 0;   //Valeur minimale de la luminosite possible
  6. int StartHeure = 7;   //heure de démarrage des LEDs
  7. int StartMin = 30;   //minutes de démarrage des LEDs
  8. int EndHeure = 18;   //heure extinction des LEDs
  9. int EndMin = 25;    //minutes extinction des LEDs
  10. int PinSoil = A1;   //sélection de la pin de mesure du capteur d'humidité de sol
  11. int SensorSoil = 0;  //initialisation de la valeur du capteur d'humidité de sol
  12. int etatLEDS = 0;   //initialisation de la variable qui indique a domoticz l'etat du ruban LED
  13. int lever = 10;   //Envoi 10 à domoticz pour indiquer que c'est le lever de soleil
  14. int coucher = 20;  //Envoi 20 à domoticz pour indiquer que c'est le coucher de soleil
  15. int on = 30;   //Envoi 30 à domoticz pour indiquer que les LEDs sont ON
  16. int off = 0;   //Envoi 30 à domoticz pour indiquer que les LEDs sont OFF
  17. int timefade = 30000;  //initialisation de la duree de la boucle qui fait varier la luminosite


 
à ça :
 

Code :
  1. #define maxlum 255  //Valeur maximale de la luminosite possible
  2. #define minlum 0  //Valeur minimale de la luminosite possible
  3. #define StartHeure 7 //heure de démarrage des LEDs
  4. #define StartMin 30  //minutes de démarrage des LEDs
  5. #define EndHeure 18  //heure extinction des LEDs
  6. #define EndMin 25  //minutes extinction des LEDs
  7. #define PinSoil A1  //sélection de la pin de mesure du capteur d'humidité de sol
  8. #define SensorSoil 0 //initialisation de la valeur du capteur d'humidité de sol
  9. #define lever 10  //Envoi 10 à domoticz pour indiquer que c'est le lever de soleil
  10. #define coucher 20  //Envoi 20 à domoticz pour indiquer que c'est le coucher de soleil
  11. #define ledon 30  //Envoi 30 à domoticz pour indiquer que les LEDs sont ON
  12. #define ledoff 0  //Envoi 0 à domoticz pour indiquer que les LEDs sont OFF
  13. #define stepfade 5  //Incrément utilisé pour allumer et eteindre progressivement les LEDs
  14. #define timefade 30000 //initialisation de la duree de la boucle qui fait varier la luminosite
  15. const int pl = 9;       //Pin par laquelle est pilotée le ruban LED
  16. int bght = 0;     //Initialisation du brightness qui va etre modifier
  17. int etatLEDS = 0;   //initialisation de la variable qui indique a domoticz l'etat du ruban LED


 
Ca fait plus propre...à mes yeux [:ddr555]

n°237353
Natopsi
☄️Just end it already!☄️
Posté le 07-12-2018 à 11:41:59  profilanswer
 

Vu que les #define c'est du préprocesseur, met des parenthèses autour de tes valeurs. Ça évitera des conneries potentielles car si tu fait par exemple #define toto 1 et après écrit par erreur tata = toto1 au lieu de tata = toto+1, le compilateur va remplacer "toto" par "1" donc comprendra tata=11 et tu ne comprendra pas pourquoi ça merde. Alors que si tu fait #define toto (1), le compilateur,en voyant tata=(1)1 va s'arrêter car c'est pas conforme.

Message cité 1 fois
Message édité par Natopsi le 07-12-2018 à 11:42:26

---------------
ACH/VDSHFRCoin◈1435mm⚡
n°237357
JPlnx
Posté le 07-12-2018 à 12:02:32  profilanswer
 

Nickel, au passage tu peux éventuellement  nommer les constantes en majuscule si tu veux te rapprocher des conventions ;-)
#define LED_OFF 0
#define STEP_FAD 5
Bon courage !

Message cité 1 fois
Message édité par JPlnx le 07-12-2018 à 12:03:07
n°237360
hyperboles​ke
Posté le 07-12-2018 à 12:29:21  profilanswer
 

Natopsi a écrit :

Vu que les #define c'est du préprocesseur, met des parenthèses autour de tes valeurs. Ça évitera des conneries potentielles car si tu fait par exemple #define toto 1 et après écrit par erreur tata = toto1 au lieu de tata = toto+1, le compilateur va remplacer "toto" par "1" donc comprendra tata=11 et tu ne comprendra pas pourquoi ça merde. Alors que si tu fait #define toto (1), le compilateur,en voyant tata=(1)1 va s'arrêter car c'est pas conforme.


 [:verdascobvious:4] Pas con

JPlnx a écrit :

Nickel, au passage tu peux éventuellement  nommer les constantes en majuscule si tu veux te rapprocher des conventions ;-)
#define LED_OFF 0
#define STEP_FAD 5
Bon courage !


Done :jap:

n°237580
hyperboles​ke
Posté le 09-12-2018 à 15:37:22  profilanswer
 

Salut !

 

Je viens de tester toutes les dernières modifs conseillées ici et ça tourne ! [:dawa]

 

Il me reste un dernier soucis.

 

sur l'arduino, j'ai une fonction qui envoi via le port série(USB) les infos au RPi :

 


Code :
  1. #include <Time.h>
  2. #include <TimeLib.h>
  3. #include <DS1307RTC.h>
  4. #include <Wire.h>
  5. #include "DHT.h"
  6. #define MAXLUM 255         //Valeur maximale de la luminosite possible
  7. #define MINLUM 0          //Valeur minimale de la luminosite possible
  8. #define STARTHEURE 07      //heure de démarrage des LEDs
  9. #define STARTMIN 30       //minutes de démarrage des LEDs
  10. #define ENDHEURE 19       //heure extinction des LEDs
  11. #define ENDMIN 00         //minutes extinction des LEDs
  12. #define PINSOIL A1        //sélection de la pin de mesure du capteur d'humidité de sol
  13. #define LEVER 10          //Envoi 10 à domoticz pour indiquer que c'est le LEVER de soleil
  14. #define COUCHER 20        //Envoi 20 à domoticz pour indiquer que c'est le COUCHER de soleil
  15. #define ONLED 30          //Envoi 30 à domoticz pour indiquer que les LEDs sont ON
  16. #define OFFLED 0          //Envoi 0 à domoticz pour indiquer que les LEDs sont OFF
  17. #define STEPFADE 5        //Incrément utilisé pour allumer et eteindre progressivement les LEDs
  18. #define FADETIME 500    //initialisation de la duree de la boucle qui fait varier la luminosite
  19. const int pl = 9;           //Pin par laquelle est pilotée le ruban LED
  20. int BGHT = 0;               //Initialisation du brightness qui va etre modifier
  21. int ETATLEDS = 0;           //initialisation de la variable qui indique a domoticz l'etat du ruban LED
  22. int SENSORSOIL = 0;           //initialisation de la valeur du capteur d'humidité de sol
  23. String MESSAGE = "";        //Initialisation du MESSAGE envoye par le port Serie/USB a domoticz sur le RPi
  24. DHT dht;
  25. void setup() {
  26.     Serial.begin(9600);           // Start Serial
  27.     pinMode(pl, OUTPUT);          // Pin utilisée pour les LED, declaree comme un output:
  28.     dht.setup(13);                // Pin utilisée pour la sonde DHT
  29.     LightCheckOn();               //On verifie l'heure pour allumer si on est en pleine journee
  30. }
  31. void loop() {
  32.   SendDataToDomoticz();           //On appelle la fonction qui permet d'envoyer les infos au serveur domoticz du raspberry
  33.   CheckTimeLED();            //Appel de la fonction qui regarde l'heure pour allumer ou eteindre le ruban LED
  34. delay(2000);
  35. }
  36. void CheckTimeLED(){
  37.   tmElements_t tm;
  38. if (RTC.read(tm)) {//--> Début de la boucle qui check l'heure pour allumer et eteindre le ruban LED
  39.   if ((tm.Hour==STARTHEURE) && (tm.Minute==STARTMIN)){  //Allumage de la lumiere a partir de l'heure definie
  40.     LightsON();
  41.   }
  42.   else if ((tm.Hour==ENDHEURE) && (tm.Minute==ENDMIN)){ //Extinction de la lumiere a partir de l'heure definie
  43.     LightsOFF();
  44.   }
  45. }
  46. }
  47. void LightsON(){              //Fonction qui allume les LEDs
  48.   while(BGHT<MAXLUM){       //tant que la luminosite commandée est inferieure à 255 on boucle
  49.     SendDataToDomoticz();     //A chaque boucle on envoit les infos a domoticz
  50.     ETATLEDS = LEVER;       //On enregistre l'etat LEVER DE SOLEIL des LEDs
  51.     BGHT=BGHT+STEPFADE;     //On incremente la luminosite de la valeur fade à chaque boucle
  52.     analogWrite(pl, BGHT);    //on commande le ruban LED
  53.     delay(FADETIME);        //Allumage progressif toutes les 25s
  54.   }
  55.   ETATLEDS = ONLED;         //On enregistre l'etat ON des LEDs
  56. }
  57. void LightsOFF(){             //Fonction qui éteint les LEDs
  58.   while(BGHT>MINLUM){       //tant que la luminosite commandée est superieure a 0 on boucle
  59.     SendDataToDomoticz();     //A chaque boucle on envoit les infos a domoticz
  60.     ETATLEDS = COUCHER;     //On enregistre l'etat COUCHER DE SOLEIL des LEDs
  61.     BGHT=BGHT-STEPFADE;     //On diminue la luminosite de la valeur fade à chaque boucle
  62.     analogWrite(pl, BGHT);    //on commande le ruban LED
  63.     delay(FADETIME);        //Extinction progressive toutes les 25s
  64.   }
  65.   ETATLEDS = OFFLED;        //On enregistre l'etat OFF des LEDs
  66. }
  67. void LightCheckOn(){
  68. tmElements_t tm;
  69.     if (RTC.read(tm)) {       //Allumage d'un coup si on branche le systeme en pleine journée
  70.       if (( (tm.Hour*60 + tm.Minute) >= (STARTHEURE*60 + STARTMIN) && (tm.Hour*60 + tm.Minute) < (ENDHEURE*60 + ENDMIN)) ) {
  71.         BGHT = MAXLUM;      //on force la luminosite au max
  72.         analogWrite(pl, BGHT);
  73.         ETATLEDS = ONLED;   //On enregistre l'etat ON des LEDs
  74.         }
  75.     }
  76. }
  77. void SendDataToDomoticz(){
  78.   delay(dht.getMinimumSamplingPeriod());
  79.   float humidity = dht.getHumidity();         //enregistre l'humidite ambiante
  80.   float temperature = dht.getTemperature();   //enregistre la temperature ambiante
  81.   SENSORSOIL = analogRead(PINSOIL);       //Enregistre l'humidite du sol
  82. //ENVOI DES INFOS AU RASPBERRY :
  83.   Serial.print(humidity, 1);
  84.   Serial.print("," );
  85.   Serial.print(temperature, 1);
  86.   Serial.print("," );
  87.   Serial.print(SENSORSOIL, 1);
  88.   Serial.print("," );
  89.   Serial.print(ETATLEDS);
  90.   Serial.print("," );
  91.   Serial.print(BGHT);
  92.   Serial.print("," );
  93.   Serial.println("END" );
  94. //FIN DE L ENVOI DES INFOS AU RASPBERRY
  95. }
 

Sur le RPi, j'ai cela :

 
Code :
  1. #!/usr/bin/env python
  2. import serial
  3. import os
  4. import glob
  5. import time
  6. import requests
  7. from requests.auth import HTTPBasicAuth
  8. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  9. # les parametres de Domoticz
  10. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11. domoticz_ip='IP DU SERVEUR'
  12. domoticz_port='PORT DU SERVEUR'
  13. user=*********
  14. password=***********
  15. domoticz_idx_soilmoisture=12 
  16. domoticz_idx_dht22=7
  17. domoticz_idx_etatLEDs=9
  18. domoticz_idx_niveauLEDs=13
  19. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  20. # Initialisation du port serie
  21. # Verifier ACM0 qui peut changer suivant la version raspbian et raspberry
  22. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23. ser = serial.Serial('/dev/ttyACM0', 9600)
  24. def maj_widget(val_url):
  25.     requete='http://'+domoticz_ip+':'+domoticz_port+val_url
  26.     #print requete
  27.     r=requests.get(requete,auth=HTTPBasicAuth(user,password))
  28.     if  r.status_code != 200:
  29.           print "Erreur API Domoticz"
  30. while i==1 :
  31.         ####CA CLIGNOTE UNE FOIS AVANT D'ARRIVER ICI !######
  32.         message = ser.readline()
  33.         print(message)
  34.         hum,temp,soil,etatLEDs,niveauLEDs,end = message.split(',')
  35.         print('Humidite : ', hum)
  36.         print('Temperature : ', temp)
  37.         print('Soil moisture : ', soil)
  38.         print('Eclairage LEDs : ', etatLEDs)
  39.         print('Niveau LEDs : ', niveauLEDs)
  40.          url='/json.htm?type=command&param=udevice&idx='+str(domoticz_idx_dht22)+'&nvalue=0&svalue='+str('{0:0.1f};{1:0.1f};2').format(float(temp), float(hum))
  41.         maj_widget(url)
  42.         url='/json.htm?type=command&param=udevice&idx='+str(domoticz_idx_soilmoisture)+'&nvalue=0&svalue='+str('{0:0.1f};2').format(float(soil))
  43.         maj_widget(url)
  44.         #url='/json.htm?type=command&param=udevice&idx='+str(domoticz_idx_etatLEDs)+'&nvalue='+str(float(etatLEDs))
  45.         url='/json.htm?type=command&param=udevice&idx='+str(domoticz_idx_etatLEDs)+'&nvalue=0&svalue='+str(float(etatLEDs))
  46.         maj_widget(url)
  47.         url='/json.htm?type=command&param=udevice&idx='+str(domoticz_idx_niveauLEDs)+'&nvalue=0&svalue='+str(float(niveauLEDs))
  48.         maj_widget(url)
  49.         time.sleep(120)
 

Bon, le python du RPi n'est pas optimisé mais ça marche.
Le seul problème, c'est au lancement du script python, mon arduino coupe pendant 1s la lumière du ruban LED.
Ensuite, tant que le script tourne sur le RPi, pas de soucis.
Seulement, je voudrais planifier ce script via CRON (toutes les 2min par exemple) au lieu de le faire tourner en permanence avec le time.sleep(120). Et donc si le script se lance par CON toutes les 2 minutes, la lumière va clignoter.
Qu'est-ce qui foire dans mon code arduino ou RPi ? [:klemton] Je suppose que ça à voir avec la coomunication avec le port série.


Message édité par hyperboleske le 09-12-2018 à 15:38:19
n°237581
hyperboles​ke
Posté le 09-12-2018 à 15:40:28  profilanswer
 

En faisant un test, je vois que c'est quand le RPi fait ça :  
 

Code :
  1. ser = serial.Serial('/dev/ttyACM0', 9600)


 
une idée ?

n°237582
rat de com​bat
attention rongeur méchant!
Posté le 09-12-2018 à 15:50:48  profilanswer
 

Il n'y a pas une histoire d'un des pins (DTR??) du port série qui est utilisé pour remettre à zéro l'Arduino? Tu as un scope? Branche le sur la broche 1 (Reset) du AVR qui est sur l'Arduino. Ca doit être possible de régler ça en coupant la bonne piste, par contre ça veut dire qu'on ne peut plus programmer l'Arduino. On pourrait mettre un interrupteur...

Message cité 1 fois
Message édité par rat de combat le 09-12-2018 à 15:51:57
n°237584
hyperboles​ke
Posté le 09-12-2018 à 15:53:08  profilanswer
 

Ha non, pas de scope sous la main [:ddr555]

n°237585
hyperboles​ke
Posté le 09-12-2018 à 15:55:22  profilanswer
 

rat de combat a écrit :

Il n'y a pas une histoire d'un des pins (DTR??) du port série qui est utilisé pour remettre à zéro l'Arduino? Tu as un scope? Branche le sur la broche 1 (Reset) du AVR qui est sur l'Arduino. Ca doit être possible de régler ça en coupant la bonne piste, par contre ça veut dire qu'on ne peut plus programmer l'Arduino. On pourrait mettre un interrupteur...


En effet
 

Citation :

Moreover, you have also noticed that when you uplaod the code in your Arduino board then the Arduino resets, another way of resetting Arduino is by opening the Serial Terminal in Arduino software, while connecting your Arduino board to your computer. As you open the Serial Terminal, the Arduino automatically gets reset.


 
https://www.theengineeringprojects. [...] cally.html
Je vais creuser un peu la question... j'ai pas fini de lire l'article.

n°237587
SuperSic
Posté le 09-12-2018 à 15:56:39  profilanswer
 

Qu'est-ce qui te gene avec le sleep(120) ?


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°237588
hyperboles​ke
Posté le 09-12-2018 à 16:08:03  profilanswer
 

SuperSic a écrit :

Qu'est-ce qui te gene avec le sleep(120) ?


Je ne sais pas, je prefère avoir un script qui tourne 1 fois toutes les 2 min plutot qu'en permanence.

n°237589
hyperboles​ke
Posté le 09-12-2018 à 16:12:31  profilanswer
 

C'est bon, j'ai trouvé la parade :  
 
un condensateur de 10µF entre une pin GND et la pin RESET :jap:

n°237590
rat de com​bat
attention rongeur méchant!
Posté le 09-12-2018 à 16:26:58  profilanswer
 

hyperboleske a écrit :

un condensateur de 10µF entre une pin GND et la pin RESET :jap:

et tu peux toujours programmer l'Arduino avec ça? :??:

n°237597
SuperSic
Posté le 09-12-2018 à 16:54:19  profilanswer
 

hyperboleske a écrit :


Je ne sais pas, je prefère avoir un script qui tourne 1 fois toutes les 2 min plutot qu'en permanence.


Il tourne pas vraiment s'il dort mais je comprend.


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°237602
hyperboles​ke
Posté le 09-12-2018 à 17:09:08  profilanswer
 

rat de combat a écrit :

et tu peux toujours programmer l'Arduino avec ça? :??:


Pas tester encore, mais si besoin, j'ai juste un fil à retirer du breadboard.

n°237621
hyperboles​ke
Posté le 09-12-2018 à 18:23:45  profilanswer
 

La serre tourne !
C'est pas super propre mais ça semble bien parti :D

 

Pour le moment, piment, citrouille et pépin de clémentine :D

 

https://reho.st/preview/self/8b2d8c215f7fc539e5d00b4880cbb11885d09e28.jpg
https://reho.st/preview/self/5f4825c2c441b422333216246932424f5a277cf7.jpg
https://reho.st/preview/self/0aeb2f934a3b94fa5baeff80aa46ad59d9a0ba2a.jpg

 

Je ferais un topo/résumé complet dans la semaine avec codes et schémas


Message édité par hyperboleske le 09-12-2018 à 18:24:39

---------------
Même si la bière est toujours vendue en bouteilles d'une pinte, cela n'entraîne pas que la bière soit constituée de parties indivisibles d'une pinte chacune.
n°237632
SuperSic
Posté le 09-12-2018 à 20:07:09  profilanswer
 

Cool de voir un projet qui avance :)


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Pronomoo
n°237862
flat4power
Posté le 11-12-2018 à 09:13:51  profilanswer
 

salut à tous
je cherche depuis un moment maintenant mais sans trouver (alors que ca se trouve peut-être sous mon nez :) )
je voudrais que ma carte arduino connecté en BT avec mon téléphone soit capable de l'indiquer l'état de charge de ma batterie.
Quand on connecte son téléphone à la voiture ou pas mal d'autre accessoire on récupéré le niveau de charge de la batterie, mais je ne trouve pas les instructions ou commande afin de connaître ce niveau.
Faut il un profil particulier au module BT, bref j'avoue que je rame un peu avec ça ;)
Si vous avez des pistes je suis preneur
 
Merci

n°238219
m_vincent
Posté le 13-12-2018 à 15:38:59  profilanswer
 

flat4power a écrit :

salut à tous
je cherche depuis un moment maintenant mais sans trouver (alors que ca se trouve peut-être sous mon nez :) )
je voudrais que ma carte arduino connecté en BT avec mon téléphone soit capable de l'indiquer l'état de charge de ma batterie.
Quand on connecte son téléphone à la voiture ou pas mal d'autre accessoire on récupéré le niveau de charge de la batterie, mais je ne trouve pas les instructions ou commande afin de connaître ce niveau.
Faut il un profil particulier au module BT, bref j'avoue que je rame un peu avec ça ;)
Si vous avez des pistes je suis preneur
 
Merci


 
via les commandes AT
AT+CBS si mes souvenirs sont bons

n°238259
flat4power
Posté le 13-12-2018 à 21:35:41  profilanswer
 

ta mémoire n'est pas trop mauvaise
ca m'a bien aidé, c'est la command AT+CBC

 

reste a trouvé si un simple HC-05 peut envoyer cette commande au téléphone pour récupérer le niveau de charge ;) parce que je ne veux pas que ce soit le module BT de mon arduino qui me réponde mais le device qui y sera connecté


Message édité par flat4power le 13-12-2018 à 21:44:16
n°238297
m_vincent
Posté le 14-12-2018 à 08:30:32  profilanswer
 

il faut juste etablir une COM entre les 2, après tu fais ce que tu veux

n°238940
_pollux_
Pan ! t'es mort
Posté le 18-12-2018 à 09:49:37  profilanswer
 

Salut,

 

Je reviens avec un MEGA suite à mon problème de mémoire sur l'UNO (utilisation de librairie graphique + carte SD + détecteur de poussière).

 

Plus de problème mémoire, mais un soucis avec le détecteur de poussière... il fonctionne bien avec l'UNO mais pas avec le MEGA (en gros, je ne détecte rien avec le MEGA alors que j'ai bien des retours sur l'UNO).

 

Le code est ici : https://github.com/AmphenolAdvanced [...] 1C_Int.ino

 

Je ne vois pas dans le programme ce qui pourrait faire que ça marche avec le UNO mais pas le MEGA... :(

 

J'ai viré toute la partie graphique parce que pas utile (i.e la librairie wire et arduino_gfx), ça fonctionne toujours sur le uno, mais pas sur le mega.

 

Si quelqu'un a une idée, je suis preneur :/

Message cité 1 fois
Message édité par _pollux_ le 18-12-2018 à 09:51:11

---------------
Le topic du sport électronique@hfr : watch the l33t !
n°238954
_pollux_
Pan ! t'es mort
Posté le 18-12-2018 à 10:41:36  profilanswer
 

_pollux_ a écrit :

Salut,  
 
Je reviens avec un MEGA suite à mon problème de mémoire sur l'UNO (utilisation de librairie graphique + carte SD + détecteur de poussière).
 
Plus de problème mémoire, mais un soucis avec le détecteur de poussière... il fonctionne bien avec l'UNO mais pas avec le MEGA (en gros, je ne détecte rien avec le MEGA alors que j'ai bien des retours sur l'UNO).
 
Le code est ici : https://github.com/AmphenolAdvanced [...] 1C_Int.ino
 
Je ne vois pas dans le programme ce qui pourrait faire que ça marche avec le UNO mais pas le MEGA... :(
 
J'ai viré toute la partie graphique parce que pas utile (i.e la librairie wire et arduino_gfx), ça fonctionne toujours sur le uno, mais pas sur le mega.
 
Si quelqu'un a une idée, je suis preneur :/


 
 
J'ai trouvé !
 
La blague, expliquée ici : http://rcarduino.blogspot.com/2013 [...] duino.html
 
En gros, les interruptions fonctionnent sur tous les ports digitaux de l'arduino uno, mais pas sur tous ceux du mega... en l’occurrence pas les ports 7 et 8 par défaut du programme que j'ai récupéré, ni évidemment les ports 2 et 3 que j'avais essayé pour test, mais uniquement les ports 10 à 15.


---------------
Le topic du sport électronique@hfr : watch the l33t !
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  166  167  168  ..  266  267  268  269  270  271

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