?>{"id":828,"date":"2019-12-18T22:49:45","date_gmt":"2019-12-18T21:49:45","guid":{"rendered":"http:\/\/www.lemailletdejoigny.fr\/?p=828"},"modified":"2021-11-06T12:13:00","modified_gmt":"2021-11-06T11:13:00","slug":"prototype-de-suiveur-solaire","status":"publish","type":"post","link":"https:\/\/www.lemailletdejoigny.fr\/index.php\/2019\/12\/18\/prototype-de-suiveur-solaire\/","title":{"rendered":"Prototype de suiveur solaire"},"content":{"rendered":"
Le cahier des charges \u00e9tait le suivant :<\/p>\n
Pour la r\u00e9alisation mat\u00e9rielle, chute de planche, r\u00e9cup\u00e9ration d’un moteur 12V dans un ventilateur de voiture, r\u00e9cup\u00e9ration de fil \u00e9lectrique, \u00e9lastique…<\/p>\n
On distingue, au centre, l’\u00e9l\u00e9ment qui mesure la lumi\u00e8re re\u00e7ue \u00e0 droite et \u00e0 gauche de la s\u00e9paration. \u00c9videmment, lorsqu’un panneau solaire sera pos\u00e9 sur le plateau, cet \u00e9l\u00e9ment changera de place.<\/p>\n
Le truc en noir, c’est le moteur qui fait tourner dans un sens ou dans l’autre.<\/p>\n
On distingue deux boutons poussoirs qui sont actionn\u00e9s par les petites \u00e9querres et limitent la rotation vers l’Est et l’Ouest (un peu plus en fait,parce qu’\u00e0 nos latitude, en \u00e9t\u00e9, le soleil va du nord-est au sud-ouest.<\/p>\n
Avec seulement un axe, le plateau n’\u00e9tait pas assez stable, alors je me suis inpir\u00e9 du four \u00e0 micro-onde pour bricoler un roulement avec un plaque de contreplaqu\u00e9 et des roues de voitures miniatures.<\/p>\n
\u00a0<\/p>\n
<\/p>\n
<\/p>\n
Afin que l’axe du moteur qui entra\u00eene le plateau soit en pression sur celui-ci, voil\u00e0 le montage r\u00e9alis\u00e9.<\/p>\n
\u00a0<\/p>\n
\u00a0<\/p>\n
<\/p>\n
Voil\u00e0 ce que \u00e7a donne !<\/p>\n
Pas tr\u00e8s lisible ? Vous croyez ?<\/p>\n
<\/p>\n
<\/p>\n
Je ne suis pas un grand sp\u00e9cialiste de la programmation et d\u00e9butant avec l’arduino. Je vous mets ce que j’ai fait parce que \u00e7a marche. Il y a s\u00fbrement plus \u00e9l\u00e9gant, plus optimis\u00e9…<\/p>\n
Mais pour arriver \u00e0 ce code, il est peut-\u00eatre int\u00e9ressant de d\u00e9crire les \u00e9tapes interm\u00e9diaires. Je me suis beaucoup servi du port s\u00e9rie, qui permet de lire dans le moniteur s\u00e9rie (une fonctionnalit\u00e9 du logiciel arduino) un certain nombre de valeur, voir un bout de texte qui me prouve que les conditions des boucles fonctionnent. J’\u00e9crivais des petits bouts de code pour tester fonction par fonction, condition par condition.<\/p>\n
C’est notamment comme \u00e7a que j’ai d\u00e9termin\u00e9 la valeur d’\u00e9cart entre les deux photo-r\u00e9sistances qui d\u00e9clenche un action du moteur.<\/p>\n
Vous n’\u00eates pas oblig\u00e9 de lire ce code. Je pense que l’int\u00e9r\u00eat, c’est de tatonner, puis de venir voir ensuite, comment j’avais r\u00e9solu les probl\u00e8mes qu’on peut rencontrer.<\/p>\n
<\/p>\n","protected":false},"excerpt":{"rendered":" R\u00e9alisation d’un prototype de suiveur solaire pilot\u00e9 par un Arduino, destin\u00e9 \u00e0 recevoir un panneau photovolta\u00efque et \u00e0 l’orienter en permanence vers le maximum de lumi\u00e8re. Le cahier des charges \u00e9tait le suivant : orientation face \u00e0 la source de lumi\u00e8re Arriv\u00e9 \u00e0 l’Ouest (un peu plus en fait), il […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-828","post","type-post","status-publish","format-standard","hentry","category-lowtech"],"_links":{"self":[{"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/posts\/828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/comments?post=828"}],"version-history":[{"count":1,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/posts\/828\/revisions"}],"predecessor-version":[{"id":1075,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/posts\/828\/revisions\/1075"}],"wp:attachment":[{"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/media?parent=828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/categories?post=828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lemailletdejoigny.fr\/index.php\/wp-json\/wp\/v2\/tags?post=828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<\/a>
Suiveur solaire de \u00c9ric APFFEL est mis \u00e0 disposition selon les termes de la
licence Creative Commons Attribution – Pas d\u2019Utilisation Commerciale – Partage dans les M\u00eames Conditions 4.0 International<\/a>.<\/p>\n\/* SUIVEUR SOLAIRE POUR PANNEAU SOLAIRE<\/span>
**************************************<\/span>
* ERIC APFFEL *<\/span>
* Le Maillet de Joigny *<\/span>
* Fablab *<\/span>
**************************************<\/span>
2 capteurs photor\u00e9sistance sur broches A0 et A1<\/span>
2 capteurs de bout de course sur broches 13 pour l'ouest et 12 pour l'est<\/span>
1 moteur pilot\u00e9 par 2 relais sur broche 2 pour aller vers l'ouest<\/span>
et broche 3 pour aller vers l'est<\/span>
Montage du moteur :<\/span>
+ 12V ------------|<\/span>
borne 1 moteur----| Relais 1<\/span>
Gnd --------------|<\/span>
+12V -------------|<\/span>
borne 2 moteur ---| Relais 2<\/span>
Gnd --------------|<\/span>
*\/<\/span>
\/\/ Constantes<\/span>
const int<\/span> moteurOuest = 2; \/\/ broche du relais ouest<\/span>
const int<\/span> moteurEst = 3; \/\/ broche du relais est<\/span>
const int<\/span> buteeOuest = 13; \/\/ broche de la butee ouest. 1 = relache, 0 = enfonce<\/span>
const int<\/span> buteeEst = 12; \/\/ broche de la butee est<\/span>
const int<\/span> pvOuest = A0; \/\/ broche analogique pour cellule pv ouest<\/span>
const int<\/span> pvEst = A1; \/\/ broche analogique pour cellule pv est<\/span>
const int<\/span> nuit = 100; \/\/ Valeur en-dessous de laquelle on consid\u00e8re qu'il fait nuit<\/span>
const int<\/span> ecart = 50; \/\/ \u00c9cart d'\u00e9clairement qui d\u00e9clenche le mouvement<\/span>
\/\/ Variables<\/span>
boolean<\/span> atteintEst = true<\/span> ; \/\/ But\u00e9es atteintes. Si rebond sur la but\u00e9e, \u00e9vite les actions r\u00e9p\u00e9titives<\/span>
boolean<\/span> atteintOuest = true<\/span> ;
int<\/span> lumiereEst = 0 ; \/\/ Lecture lumi\u00e8re capteur est<\/span>
int<\/span> lumiereOuest = 0; \/\/ Lecture lumi\u00e8re capteur ouest<\/span>
\/\/initialisation<\/span>
void setup<\/strong><\/span>() {
\/\/ broche de commande moteur<\/span>
pinMode<\/span> (moteurOuest, OUTPUT<\/span>);
pinMode<\/span> (moteurEst, OUTPUT<\/span>);
\/\/ broche de d\u00e9tection but\u00e9e<\/span>
pinMode<\/span> (buteeOuest, INPUT<\/span>);
digitalWrite<\/span> (buteeOuest, HIGH<\/span>); \/\/activer r\u00e9sistance pull-up<\/span>
pinMode<\/span> (buteeEst, INPUT<\/span>);
digitalWrite<\/span> (buteeEst, HIGH<\/span>); \/\/activer pull-up<\/span>
}
void loop<\/strong><\/span>() {
lumiereEst = analogRead(pvEst);
lumiereOuest = analogRead(pvOuest);
\/\/Si il ne fait pas nuit<\/span>
if<\/span> (lumiereEst > nuit){
\/\/======================================================================<\/span>
\/\/ Si Ouest plus \u00e9clair\u00e9, boucle pour tourner vers l'ouest jusqu'\u00e0 butee<\/span>
while<\/span> ((lumiereOuest - lumiereEst > ecart) && (atteintOuest)) {
digitalWrite<\/span>(moteurOuest, HIGH<\/span>); \/\/ mettre un coup de moteur vers l'ouest<\/span>
atteintEst = true<\/span>; \/\/ relacher but\u00e9e est<\/span>
lumiereEst = analogRead<\/span>(pvEst); \/\/ Relire les \u00e9clairements<\/span>
lumiereOuest = analogRead<\/span>(pvOuest);
atteintOuest = digitalRead<\/span>(buteeOuest); \/\/ Tester la butee et sortir de la boucle<\/span>
if<\/span> (!atteintOuest) {
break<\/span>;
}
}
digitalWrite<\/span>(moteurOuest, LOW<\/span>); \/\/ Eteindre le moteur<\/span>
\/\/==================================================================<\/span>
\/\/ Si Est plus \u00e9clair\u00e9, boucle pour tourner vers l'est jusqu'a butee<\/span>
while<\/span> ((lumiereEst - lumiereOuest > ecart) && (atteintEst)) {
digitalWrite<\/span>(moteurEst, HIGH<\/span>); \/\/Mettre un coup de moteur \u00e0 l'est<\/span>
atteintOuest = true<\/span>; \/\/ Lib\u00e9rer butee ouest<\/span>
lumiereEst = analogRead<\/span>(pvEst); \/\/ Relire les \u00e9clairements<\/span>
lumiereOuest = analogRead<\/span>(pvOuest);
atteintEst = digitalRead<\/span>(buteeEst); \/\/ Lire si la butee est atteinte pour arret<\/span>
if<\/span> (!atteintEst){
break<\/span>;
}
}
digitalWrite<\/span>(moteurEst, LOW<\/span>); \/\/ Eteindre le moteur
}
\/\/===============================================<\/span>
\/\/ S'il fait nuit, retour \u00e0 l'est<\/span>
else{ <\/span>
while<\/span> (atteintEst){
digitalWrite<\/span>(moteurEst, HIGH<\/span>);
atteintOuest = true<\/span> ; \/\/Lib\u00e9rer butee ouest<\/span>
atteintEst = digitalRead<\/span>(buteeEst);
}
digitalWrite<\/span>(moteurEst, LOW<\/span>);
}
}<\/pre>\n\n\n