course du soleil
MichelHohm
21 Messages
Le mardi 19 novembre 2019 à 16:53:33
bonjour
j'ai réussi à faire drawLine en fonction de l'angle et je fais la simulation du soleil bitmap avec drawBitmap
mais la j'ai un soucis il fonctionne de tant en temp
mon code n'es surement pas bon , pourriez vous m'aider s'il vous plait
j'ai fait un switch case pour simuler la course du soleil
d'avance merci .
j'ai réussi à faire drawLine en fonction de l'angle et je fais la simulation du soleil bitmap avec drawBitmap
mais la j'ai un soucis il fonctionne de tant en temp
mon code n'es surement pas bon , pourriez vous m'aider s'il vous plait
j'ai fait un switch case pour simuler la course du soleil
d'avance merci .
https://github.com/
MichelHohm
21 Messages
Le mardi 26 novembre 2019 à 14:22:28
bonjour
j'ai réussi à faire drawLine en fonction de l'angle et je fais la simulation du soleil bitmap avec drawBitmap
mais la j'ai un soucis il fonctionne de tant en temp
mon code n'es surement pas bon , pourriez vous m'aider s'il vous plait
j'ai fait un switch case pour simuler la course du soleil
d'avance merci .
j'ai réussi à faire drawLine en fonction de l'angle et je fais la simulation du soleil bitmap avec drawBitmap
mais la j'ai un soucis il fonctionne de tant en temp
mon code n'es surement pas bon , pourriez vous m'aider s'il vous plait
j'ai fait un switch case pour simuler la course du soleil
d'avance merci .
void draw2(void){//écran secondaire DateTime now = RTC.now(); u8g.firstPage(); do { u8g.setFont(u8g_font_6x10); u8g.setPrintPos(2,10); u8g.print("SunAngle"); u8g.setPrintPos(55,62); u8g.print(EEPROM.read(13));//angle angle = (EEPROM.read(13)); u8g.drawLine(20, 50, 110, 50); u8g.drawCircle(x0, y0, r, U8G_DRAW_UPPER_RIGHT);//x0=65,y0=50,r=35 u8g.drawCircle(x0, y0, r, U8G_DRAW_UPPER_LEFT);// u8g.drawLine(x0,y0,x0-r*cos(1*angle*2*3.14/360),y0-r*sin(1*angle*2*3.14/360)); CalcSun (); myLord.SunRise(sunTime); // Computes Sun Rise. myLord.SunSet(sunTime); TimeMins = (now.hour() * 60) + now.minute(); uint16_t time = now.hour() * 60 + now.minute(); uint16_t angle = map(time, Sunrise, Sunset, 0, 180); if(angle < 0) angle = 0; else if(angle > 180) angle = 180; if(angle==0 ) {sun=1;} if(angle==10) {sun=2;} if(angle==20) {sun=3;} if(angle==30) {sun=4;} if(angle==40) {sun=5;} if(angle==50) {sun=6;} if(angle==60) {sun=7;} if(angle==70) {sun=8;} if(angle==80) {sun=9;} if(angle==90) {sun=10;} if(angle==100){sun=11;} if(angle==110){sun=12;} if(angle==120){sun=13;} if(angle==130){sun=14;} if(angle==140){sun=15;} if(angle==150){sun=16;} if(angle==160){sun=17;} if(angle==170){sun=18;} if(angle==180){sun=19;} switch(sun){ case 1: u8g.drawXBMP(23,41,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//0° break; case 2: u8g.drawXBMP(23,35,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//10° break; case 3: u8g.drawXBMP(25,30,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//20° break; case 4: u8g.drawXBMP(28,25,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//30° break; case 5: u8g.drawXBMP(30,20,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//40° break; case 6: u8g.drawXBMP(35,15,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//50° break; case 7: u8g.drawXBMP(40,10,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//60° break; case 8: u8g.drawXBMP(46,9,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//70° break; case 9: u8g.drawXBMP(51,8,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//80° break; case 10: u8g.drawXBMP(57,7,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//90° break; case 11: u8g.drawXBMP(64,7,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//100° break; case 12: u8g.drawXBMP(69,8,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//110° break; case 13: u8g.drawXBMP(74,10,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//120° break; case 14: u8g.drawXBMP(80,15,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//130° break; case 15: u8g.drawXBMP(85,18,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//140° break; case 16: u8g.drawXBMP(88,24,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//150° break; case 17: u8g.drawXBMP(90,29,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//160° break; case 18: u8g.drawXBMP(92,35,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//170° break; case 19: u8g.drawXBMP(93,41,u8g_logo_width, u8g_logo_height, u8g_sun_3_bits);//180° break; u8g.setFont(u8g_font_6x10); u8g.setPrintPos(5,62); if(EEPROM.read(9)<10); u8g.print("0"); u8g.print(EEPROM.read(9)); u8g.print (":"); if (EEPROM.read(10) <10) u8g.print("0"); u8g.print (EEPROM.read(10)); u8g.setPrintPos(95,62); if(EEPROM.read(11)<10) u8g.print("0"); u8g.print (EEPROM.read(11)); u8g.print (":"); if (EEPROM.read(12) <10) u8g.print("0"); u8g.print (EEPROM.read(12)); } while ( u8g.nextPage() ); }
https://github.com/
MichelHohm
21 Messages
Le mardi 26 novembre 2019 à 14:32:34
bonjour au big boss
a partir de la deuxième page tout est en italique tu pourrais s'il te plait me dire pourquoi c'est pour cela que j'ai rouvert un deuxième course du soleil
merci de ton aide
a partir de la deuxième page tout est en italique tu pourrais s'il te plait me dire pourquoi c'est pour cela que j'ai rouvert un deuxième course du soleil
merci de ton aide
https://github.com/
Le mardi 26 novembre 2019 à 20:18:46
Salut, si tu rafraichi la page y'a plus de problème 🙂
Mais il faudrait quand même que je prenne le temps corriger ça proprement ...
Mais il faudrait quand même que je prenne le temps corriger ça proprement ...
MichelHohm
21 Messages
Le jeudi 28 novembre 2019 à 17:22:11
Bonsoir
voila j'ai un soucis avec ma course du soleil
quand je trace drawLine tout ce passe bien
quand je remplace drawLine par bitmap j'ai un décalage par rapport a drawline pour le même angle .
quelqu'un pourrais m' expliquer mon erreur .
je pense que cela viens du bitmap (#define u8g_logo_width 16
#define u8g_logo_height 16 ) décalage de la moitié du soleil .
peut-être que le bitmap n'ai pas centrer , je ne sais pas si on peux le centrer .
d'avance merci.
angle =0, dessin sous la droite ,
angle =45 dessin ok idem à le drawLine
angle = 10 dessin équivalent à 0 angle sur la droite 0
angle = 145 différence un peu plus que le dessin toujours par rapport a drawLine
angle = 180 idem dessin sous 180°
voila j'ai un soucis avec ma course du soleil
quand je trace drawLine tout ce passe bien
quand je remplace drawLine par bitmap j'ai un décalage par rapport a drawline pour le même angle .
quelqu'un pourrais m' expliquer mon erreur .
je pense que cela viens du bitmap (#define u8g_logo_width 16
#define u8g_logo_height 16 ) décalage de la moitié du soleil .
peut-être que le bitmap n'ai pas centrer , je ne sais pas si on peux le centrer .
d'avance merci.
angle =0, dessin sous la droite ,
angle =45 dessin ok idem à le drawLine
angle = 10 dessin équivalent à 0 angle sur la droite 0
angle = 145 différence un peu plus que le dessin toujours par rapport a drawLine
angle = 180 idem dessin sous 180°
u8g.drawLine(20, 50, 110, 50);//droite du bas de l'écran
u8g.drawCircle(x1, y1, r_1, U8G_DRAW_UPPER_RIGHT);//x1=65, y1=50, r_1=35
u8g.drawCircle(x1, y1, r_1, U8G_DRAW_UPPER_LEFT);//cercle
u8g.drawLine(x0,y0,x0-r*cos(1*angle*2*3.14/360),y0-r*sin(1*angle*2*3.14/360)); // x0=65,y0=50,r=35,droite qui visualise l'angle du soleil
u8g.drawXBMP(x1-r_1*cos(1*angle*2*3.14/360),y1-r_1*sin(1*angle*2*3.14/360),u8g_logo_width,
u8g_logo_height, u8g_sun_3_bits);//dessin du soleil
https://github.com/
MichelHohm
21 Messages
Le jeudi 6 février 2020 à 15:30:43
Bonjour,
j'aimerai faire avancer un moteur stepper d'un nombre de pas défini .
entre une position qui change tout les jours et qui est position_cible .
alfa_1 =360*now.day()/max_day() ; et je reprend cette valeur que je converti en pas par int position_cible = map(alfa_1,0,360,0,64);
je compare la position cible à la position moteur anterieur et je fais avancer du nombre de pas qui manque .
mais cela ne fonctionne pas .
mon moteur et un stepper-28byj48 avec un Driver ULN2003
je vous met mon code :
si quelqu'un pourrais m'aider d'avance merci .
j'aimerai faire avancer un moteur stepper d'un nombre de pas défini .
entre une position qui change tout les jours et qui est position_cible .
alfa_1 =360*now.day()/max_day() ; et je reprend cette valeur que je converti en pas par int position_cible = map(alfa_1,0,360,0,64);
je compare la position cible à la position moteur anterieur et je fais avancer du nombre de pas qui manque .
mais cela ne fonctionne pas .
mon moteur et un stepper-28byj48 avec un Driver ULN2003
je vous met mon code :
si quelqu'un pourrais m'aider d'avance merci .
void turntable(void) { // c'est une petite animation qui reprend le turntable avec la positon du moteur en angle
DateTime now = RTC.now();
/* center */
int x2=128/2;
int y2=64/2;
/* radius */
int r2=22;
/* angle*/
max_day() ;
alfa_1 =360*now.day()/max_day();
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(1,50);
u8g.print(alfa_1);
u8g.setPrintPos(30,60);
u8g.print(EEPROM.read(21));//pos_moteur
u8g.setPrintPos(90,60);
u8g.print(EEPROM.read(20));//position_cible
u8g.setPrintPos(110,60);
u8g.print(EEPROM.read(22));//cptepas
/* affichage maxday */
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(110,30 );
u8g.print(max_day());
u8g.setPrintPos(62,9);
u8g.print("0");
u8g.setPrintPos(90,32);
u8g.print("90");
u8g.setPrintPos(56,64);
u8g.print("180");
u8g.setPrintPos(22,32);
u8g.print("270");
u8g.drawLine(x2,y2, x2+r2*sin(1*alfa_1*2*3.14/360), y2-r2*cos(1*alfa_1*2*3.14/360));
u8g.drawCircle(x2, y2, r2);
}
void moteur_pas(){
int position_cible = map(alfa_1,0,360,0,64);
EEPROM.update(20,position_cible);
int position_moteur = EEPROM.read(21);
if(position_moteur < position_cible ){
monmoteur.step(+1); // Avance de 1 pas.
cptepas++;
position_moteur = position_moteur + cptepas ;
EEPROM.update(22,cptepas);// Incrémente la variable cptepas pour compter les pas.
Serial.print("nombre de pas:" ); // Affiche dans le moniteur "série"
Serial.println(cptepas);// le nbre de pas effectué.
delay(500); // Pause d'une demi seconde entre chaque pas.
}
if(position_moteur > position_cible){
monmoteur.step(-1);//Recule de 1 pas.
cptepas--;// décrémente la variable cptepas pour compter les pas.
position_moteur = position_moteur - cptepas ;
EEPROM.update(22,cptepas);// decrémente la variable cptepas pour compter les pas.
Serial.print("nombre de pas:" ); // Affiche dans le moniteur "série"
Serial.println(cptepas); // le nbre de pas effectué.
delay(500);
}
EEPROM.update(21,position_moteur);
}
https://github.com/
Le jeudi 6 février 2020 à 16:01:55
Salut, pourquoi est-ce que tu store "position_cible" et "cptepas" dans l'EEPROM ?
Pour moi, ton algo peut être résumé à ça :
Pour moi, ton algo peut être résumé à ça :
int target = map(alfa_1, 0, 360, 0, 64);
int diff = motor_position - target;
my_motor.step(diff);
MichelHohm
21 Messages
Le jeudi 6 février 2020 à 17:20:03
juste pour les avoir en lecture sur void ecran
https://github.com/
MichelHohm
21 Messages
Le jeudi 6 février 2020 à 17:28:04
le resultat c'est que le moteur tourne mais ne s'arrête pas .
https://github.com/
MichelHohm
21 Messages
Le jeudi 6 février 2020 à 17:44:30
je voudrais faire un turntable ,
chaque jour le map calcul une nouvelle position que je calcul en pas mais je n'arrive à rien .
si quelqu'un à une idèe je suis preneur d'avance merci .
https://github.com/
MichelHohm
21 Messages
Le vendredi 12 juin 2020 à 16:44:39
bonjour à tout les membres du forum ,
cela fait pas mal de temps que je ne suis pas venu .
Voila j'ai fait un arrosage pour plante .
j'utilise un soil_moisture capacitif afin d'éviter la corrosion : https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193.
quand la terre est inférieur au réglage minimum la pompe arrose la terre par une quantité d'eau programmée par un flow water :https://www.seeedstudio.com/G1-8-Water-Flow-Sensor-p-1346.html.
quand la quantité d'eau est atteinte elle s'arrête , on attend un temps de 2 à 3 minutes le temps de rétention de l'eau dans la terre .
et si l'humidité de la terre est inférieur au réglage maximum , le cycle arrosage recommence .
je viens vous voir pour la sécurité de la pompe pour qu'elle ne tourne pas sans eau .
j'aimerai utiliser le water flow sensor pour détecter le manque d'eau .
j'ai fait un code (je suis amateur et j'aimerai que vous me donner votre avis , je pense qu'il y a surement mieux, d'avance merci )
j'ai mis une tempo/ If((millis()-StartTime>=teenSecondes)
ensuite
(totalMilliLitres<=0)
c'est le water flow sensor qui ne tourne pas puisque pas d'eau malgré que la pompe tourne .
(pompe_state_flag ==1)
contrôle que la pompe est en service ensuite j'ai mis un compteur , au bout de deux comptage la POMPE est coupée waterPumpOff();
et je fait clignoter ("vide") pour indiquer que le réservoir est vide .
merci d'avance .
cela fait pas mal de temps que je ne suis pas venu .
Voila j'ai fait un arrosage pour plante .
j'utilise un soil_moisture capacitif afin d'éviter la corrosion : https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193.
quand la terre est inférieur au réglage minimum la pompe arrose la terre par une quantité d'eau programmée par un flow water :https://www.seeedstudio.com/G1-8-Water-Flow-Sensor-p-1346.html.
quand la quantité d'eau est atteinte elle s'arrête , on attend un temps de 2 à 3 minutes le temps de rétention de l'eau dans la terre .
et si l'humidité de la terre est inférieur au réglage maximum , le cycle arrosage recommence .
je viens vous voir pour la sécurité de la pompe pour qu'elle ne tourne pas sans eau .
j'aimerai utiliser le water flow sensor pour détecter le manque d'eau .
j'ai fait un code (je suis amateur et j'aimerai que vous me donner votre avis , je pense qu'il y a surement mieux, d'avance merci )
[/code]
void defaut_eau(){
if((millis()-StartTime>=teenSecondes)&&(totalMilliLitres<=0)&&(pompe_state_flag ==1)){//détection pas d'eau 10s
compteur ++;
StartTime = millis();
}
if(compteur==2){
WaterPumpOff();
Serial.println("defaut_eau");
u8g.setFont(u8g_font_04b_03);
u8g.setPrintPos(55,30);
if (Sekund % 2 != 1)
u8g.print("Vide");
StartTime = millis();
}
}
j'ai mis une tempo/ If((millis()-StartTime>=teenSecondes)
ensuite
(totalMilliLitres<=0)
c'est le water flow sensor qui ne tourne pas puisque pas d'eau malgré que la pompe tourne .
(pompe_state_flag ==1)
contrôle que la pompe est en service ensuite j'ai mis un compteur , au bout de deux comptage la POMPE est coupée waterPumpOff();
et je fait clignoter ("vide") pour indiquer que le réservoir est vide .
merci d'avance .
https://github.com/
Le lundi 15 juin 2020 à 17:00:36
Salut Michel, voici un lien vers un très bon tuto sur l'utilisation de ton capteur water flow : https://www.seeedstudio.com/blog/2020/05/11/how-to-use-water-flow-sensor-with-arduino/
Sur ce principe tu peux alors décider que si le capteur mesure un débit trop faible (à définir) c'est qu'il n'y a plus assez d'eau. Mais je ne suis pas certain de l'efficacité de ce capteur pour cette application. Peut-être utiliser/bricoler un capteur de niveau d'eau dans le réservoir ?
Très intéressant comme projet en tout cas :)
Sur ce principe tu peux alors décider que si le capteur mesure un débit trop faible (à définir) c'est qu'il n'y a plus assez d'eau. Mais je ne suis pas certain de l'efficacité de ce capteur pour cette application. Peut-être utiliser/bricoler un capteur de niveau d'eau dans le réservoir ?
Très intéressant comme projet en tout cas :)
MichelHohm
21 Messages
Le vendredi 19 juin 2020 à 15:28:22
bonjour
j'essaye de faire une minuterie à rebours j'ai trouver un code qui incrémente de 0 à 60 .
j'ai changer le code maintenant il décrémente mais de deux par deux ( 60 , 58, 56, etc.........si quelqu'un pouvait m'aider .
j'aimerai décrémenter de 60 à 0 ;
je poste le code .
merci d'avance .
j'essaye de faire une minuterie à rebours j'ai trouver un code qui incrémente de 0 à 60 .
j'ai changer le code maintenant il décrémente mais de deux par deux ( 60 , 58, 56, etc.........si quelqu'un pouvait m'aider .
j'aimerai décrémenter de 60 à 0 ;
je poste le code .
merci d'avance .
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x03F, 20, 4);
signed short secondes;
char timeline[16];
void setup() {
lcd.begin();
}
void chrono(){
lcd.setCursor(0,0);
lcd.print("Chrono :");
lcd.setCursor(0, 1);
sprintf(timeline," %0.2d secs", secondes);
lcd.print(timeline);
secondes--;
if (--secondes < 0)
{
secondes = 60;
}
delay(1000);
}
void loop() {
chrono();
}
https://github.com/
Le vendredi 19 juin 2020 à 15:37:56
Salut, remplace ton if par ça :
if (secondes < 0)
MichelHohm
21 Messages
Le samedi 20 juin 2020 à 10:50:39
bonjour BIG BOSS ,
merci cela fonctionne , j'ai tellement essayer de chose hier sans succès .
j'ai du après avoir changer le code oublier de le televerser.
merci encore .
je te mets quelque photos de mon projet arrosage .
j'avais besoin de ce minuteur pour attendre entre deux arrosages .
bon week-end .
merci cela fonctionne , j'ai tellement essayer de chose hier sans succès .
j'ai du après avoir changer le code oublier de le televerser.
merci encore .
je te mets quelque photos de mon projet arrosage .
j'avais besoin de ce minuteur pour attendre entre deux arrosages .
bon week-end .
https://github.com/