samedi 9 juillet 2016

circuits.io

Comment apprendre l'électronique avec un simple navigateur web

Je suis tombé sur un site extraordinaire d'Autodesk.
On peut y programmer des Arduino, les connecter sur des composants, faire marcher, debugger, afficher les sorties du moniteur (liaison série).

On peut aussi faire de l'électronique analogique, numérique, des possibilités infinies.

Un exemple rapidement pour vous montrer les possibilités :
Un capteur Ultrason one pin, on envoie un pulse et il répond par un pulse plus ou moins long, donnant la distance.
Egalement, un buzzer qui joue une petite mélodie au début du programme.
Comme on ne peut pas inclure plusieurs fichiers ou bibliotèques personnelle, j'ai inclus les notes du .h dans le fichier de l'Arduino, donc descendez en bas du programme pour visualiser les routines setup() et loop().

Pour exécuter, il suffit de lancer la simulation. Pour visualiser les sorties du moniteur de la liaison série. Il faut afficher le code et cliquer à droite. On interagit avec l'ultrason en le sélectionnant et en déplaçant le point obstacle sur le cone de détection, voir ci-dessous une image capture d'écran :

On peut aussi partager son code avec les autres et c'est justement le but de ce genre de site web.
Voici comment est visualisé le partage et comment vous pouvez interagir directement sur mon blog sans même ouvrir un compte Autodesk.

More to read: https://circuits.io/blog/building-the-most-versatile-electronics-simulator-in-the-world

il y a 20 vidéos de tutorial.

Clonez puis développez !


vendredi 8 juillet 2016

RTC, SalatTime et Arduino


Real Time Clock, heures de prière et Arduino

Code pour Arduino


Le code suivant (trois fichiers) permet d'implanter une horloge à l'aide d'une  RTC afin de prendre directement l'heure et la date de l'horloge, de calculer les horaires de prière et de détecter l'heure de l'Athan.

Il faut d'abord effectuer les connexions suivantes :

Il suffit de relier le module RTC à l'Arduino via la liaison I2C (SDA, SCL). Attention les pins A4, A5 sont les pins SDA, SCL obligatoirement sur la carte Arduino.
On relie aussi le 5V et le GND du module RTC à ceux de l'Arduino. Ce dernier sera alimenté par le port USB ou bien par une alim séparée sur Vin ou sur +5V.

Voici le pinout de l'Arduino Nano V3. Je choisi cette carte car c'est la moins chère sur le marché (moins de 3 USD sur ebay ou banggood).

Le programme contient une librairie (mainroutines) comportant les fonctions nécessaires au calcul mais aussi les coordonnées de la ville :
[code] const double latitude = 34.88*deg2rd; const double longitude = -1.31*deg2rd; const int TimeZoneTown = 1; const int Convention = 1; const int DST = 0; [/code]
La convention est à choisir en fonction du pays :  0 : UOIF, 1 : Algérie... (voir librairie).

Il comporte aussi les fonctions
[code] void GetDate() { DateTime now = rtc.now(); date.a = now.year(); date.m = now.month(); date.j = now.day(); #ifdef Verbose Serial << date.j <<F ("/") << date.m << F("/") << date.a <<endl; #endif } //--------------------------------------------------------------------------- void GetHeure() { DateTime now = rtc.now(); heure.h = now.hour(); heure.m = now.minute(); heure.s = now.second(); heure.ms=0; // heure.h=12; heure.m=00; heure.s=00; #ifdef Verbose Serial << heure.h << F(":") << heure.m << F(":") << heure.s <<endl; #endif } [/code]
qui permettent de lire la date et l'heure du calcul à partir de la RTC.

Ce qui donne le fonctionnement suivant :
lat=34.8800010681 long=-1.3099999427
latitude=34°52'48.0038450000" longitude=-1°-18'-35.9997940000"
Conv 1

8/7/2016 16:56:51
8/7/2016
T=0.1651745414  JC à 12h GMT
T=0.1651747226  JC à 12h9'55.0160980000"
meridien/Zuhr=13.1643514633 ie : 13h9'51.6652680000"
Fajr    =4:14
Chourouk=6:0
Zuhr    =13:10
Asr     =16:57
Maghrib =20:25
Isha    =21:59
8/7/2016 16:56:52
SalatT.m[4] =59
SalatT.m[3] =25
SalatT.m[2] =57
Recherche de 16:57
8/7/2016 16:56:53
8/7/2016 16:56:54
8/7/2016 16:56:55
8/7/2016 16:56:56
8/7/2016 16:56:57
8/7/2016 16:56:58
8/7/2016 16:56:59
8/7/2016 16:57:0
Athan 2            2 : Asr, 3 : Maghrib...
SalatT.m[4] =59
SalatT.m[3] =25
SalatT.m[2] =57
Recherche de 16:57
8/7/2016 16:57:1
8/7/2016 16:57:2
8/7/2016 16:57:3
...
8/7/2016 16:57:57
8/7/2016 16:57:58
8/7/2016 16:57:59
8/7/2016 16:58:0
SalatT.m[4] =59
SalatT.m[3] =25
Recherche de 20:25
8/7/2016 16:58:1
8/7/2016 16:58:2
8/7/2016 16:58:3
...

Vous pouvez télécharger le code sur :
https://codebender.cc/sketch:341753


Applications :
Horloge de calcul des horaires de prières
Athan
Calendriers

Ceci est un doua3ware, c'est-à-dire que, si vous êtes musulman, merci de prier pour mon salut.

jeudi 7 juillet 2016

Position du Soleil et SalatTime pour Arduino



Position du Soleil et heures de prière pour Arduino

Calcul de la position du soleil

Le code suivant (trois fichiers) permet de faire le calcul de la position du soleil à n'importe quelle heure de la journée, de l'année, du lieu.
Il contient une librairie (mainroutines) comportant les fonctions nécessaires au calcul mais aussi les coordonnées de la ville :
[code] const double latitude = 34.88*deg2rd; const double longitude = -1.31*deg2rd; const int TimeZoneTown = 1; const int Convention = 1; const int DST = 0; [/code]

Il comporte aussi les fonctions
GetDate()
et
GetHeure()
qui permettent de spécifier la date et l'heure d'observation.
Ils peuvent être modifiées comme on le verra dans un prochain blog pour utiliser une RTC afin de prendre directement l'heure et la date de l'horloge.

Le calcul de la position du soleil se fait par l'appel de la fonction
Calc_hazClick();

le code ne compile pas sur codebender mais marche très bien avec l'IDE de l'Arduino.

Le résultat pour le 6 juillet à 10h est le suivant :
lat=34.8800010681 long=-1.3099999427
latitude=34°52'48.0038450000" longitude=-1°-18'-35.9997940000"
Conv 1
6/7/2016
6/7/2016
10:0:0
Date=6/7/2016Heure=9.00DST does not apply1
az=273.42° (orgine Sud) ie : azimut 273°25'0.1831054700"
------az=93.42° (orgine Nord) ie -180 : azimut 93°25'0.1281738300"
h=46.98°  ie altitude 46°58'35.1855470000"


A comparer avec la version PC qui donne des résultats à peine plus précis (calcul en double précision : double 64 bits au lieu de float 32 bits de l'Arduino).
Cela suffit amplement pour connaître correctement la position du soleil.
_____________________________________________________________
__ Lieu : Algérie, Tlemcen latitude= 34°52'48"   longitude= -1°-18'-36" Convention 1
latitude=34.88°  longitude=-1.31°
__ Date : Jeudi 6/7/2016 à 9.00833333333333 h UT    *DST does not apply*  TZ (include DST)=1
T=0.165116368164879 JC
Soleil Longitude L=104.731736033691°  ie 06h58'56"
theta0=59.9020313587971°  ie 03h59'36"
theta=58.5920313587971°  ie heure sidérale 03h54'22"
RA=105.991297501229°  ie 07h03'58"
delta=22.6231272290966°  ie DE  22°37'23"
tau=-47.3992661424321°  ie angle horaire -3h-9'-36"
az=273.515069036948° (orgine Sud) ie : azimut273°30'54"
------az=93.5150690369481° (orgine Nord) ie -180 : azimut 93°30'54"
h=47.0992260396189°  ie altitude  47°05'57"

Applications :
Station météo connectée
Orientation des panneaux photovoltaïques (PV)
Automatisation de l'ouverture et de la fermeture des stores

Calcul des horaires de prière

Afin de calculer les horaires de prière, il suffit d'appeler la routine 
ComputeSalatTime();
comme suit
[code] // SalatTime without RTC #include "mainroutines.h" void setup() { Serial.begin(115200); // Init SalatTime STinit(); ComputeSalatTime(); } //---------------------------------------------------------------------------- void loop() { } [/code]