Cube à LEDs METEO

Envoyé par le 31 Jan 2013

Ce projet a  été réalisé durant la première semaine d’inter semestre  2012-2013 par Maurice KETEVI.

Objectif :

L’objectif  est  d’afficher des données météorologiques à partir d’un cube à leds : faire clignoter les leds de manière à représenter la situation météo en temps réel d’une , de deux,voire plusieurs villes.  J’ai donc choisi de construire un cube 5×5×5 pour avoir une meilleure visualisation de la situation.

La plateforme utilisée dans ce cas est un arduino MEGA  2560(pour la gestion et la matérialisation des  dessins voulus sur le cube) et aussi parce que le nombre de ports sur un arduino UNO  est théoriquement insuffisants pour gérer le nombre d’entrées du cube dès que la taille de celui –ci dépasse les 4×4×4  sans équipement intermédiaire.

Ce module (Arduino MEGA 2560)  devra être surmonté par un shield Ethernet qui nous permettra de nous connecter à un serveur  Web  et de récupérer des données météo  sur celui-ci. Ce serveur  retourne des données XML contenant les informations sur la météo dont on a besoin. Ici le serveur  utilisé est celui de Baptiste Gaultier : Ingénieur R&D www.baptistegaultier.fr, « Réseaux et Sécurité Multimédia » Télécom Bretagne Rennes    http://departements.telecom-bretagne.eu/rsm/

Pour l’occasion nous avons rajouter les données météo de Brest et de New York.

Eléments utilisés

  • Arduino MEGA 2560 ×1
  • Shield Internet ×1
  • Leds blanches (couleur au choix) ×125
  • Fer à souder

Une bonne quarantaine de câbles pour relier les entrées du cube aux sorties du module arduino+Shield Ethernet.

Première étape (probablement l’un des plus dures) : Construction du cube

Pour réaliser le cube il faut réaliser 5 carrés de 25 leds  chacune représentés de la manière suivante.

carré de 25 leds

Chaque cercle représente une led. Tous les autres traits représentent les masses  de nos leds (elles doivent toutes être reliées entre elles). Elles permettent directement de consolider la structure.Étant donné que chaque led ne possède qu’une masse il faudra rajouter des fils de conduction assez résistants pour consolider la structure.

Une fois les 5 carrés construits il suffit de les  superposer  de manière à relier les Pins (+) de Leds  du carré au dessus à ceux du carré en dessous. On obtient donc 25 pins correspondants donc aux 25 colonnes du cube. Le résultat  est le suivant :WP_20130123_002

Une fois le cube terminée  on peut le relier à l’arduino MEGA 2560. On peut relier les pins 2 à 26 de l’arduino à nos 25 pins (+) de notre cube représentés en vert sur la figure suivante, et les masses (en jaune sur la figure ) aux ports (49 à 56).

Pour décorer le tout je me suis servi de LEGO pour fabriquer la base du cube et ainsi y mettre les fils et l’arduino.WP_20130125_002

Pour tester l’allumage du cube je vous propose d’utiliser le code suivant :_5x5MatrixMauricetest

Pour modifier et contrôler l’affichage de chacune des leds vous pouvez modifier le patternTable [] du programme

Un petit problème rencontré lors de la création des figures météo et surtout faute de temps vu qu’il fallait modifier l’allumage des leds en fonction des données météo reçues.

 

Nota-Bene

Voici à quoi ressemble le code de Baptiste Gaultier de la page Xml où l’Arduino via le module Ethernet récupère les données météo. Pour récuperer les données météo on peut utiliser le code  » Files/Examples/Ethernet/Tweeter client ou Web client « . Le plus conseillé serait le tweeter client.

Exemple:

(filemtime(« Rennes.json ») + 300))

{ copy(« http://api.wunderground.com/api/947b3174d64aba0f/geolookup/conditions/forecast/q/Rennes.json », « Rennes.json »); } $json_string = file_get_contents(« Rennes.json »);

$parsed_json = json_decode($json_string);

$location = $parsed_json->{‘location’}->{‘city’};

$temperature = $parsed_json->{‘current_observation’}->{‘temp_c’};

$icon = $parsed_json->{‘current_observation’}->{‘icon’};

$icon_tomorrow = $parsed_json->{‘forecast’}->{‘simpleforecast’};

$temp_tomorrow_low = $parsed_json->{‘forecast’}->{‘simpleforecast’}->{‘forecastday’}[2]->{‘low’}->{‘celsius’};

$temp_tomorrow_high = $parsed_json->{‘forecast’}->{‘simpleforecast’}->{‘forecastday’}[2]->{‘high’}->{‘celsius’};

$icon_tomorrow = $parsed_json->{‘forecast’}->{‘simpleforecast’}->{‘forecastday’}[2]->{‘icon’}; $xml = « 

\n »; $xml .= « \n »;

$xml .= « \t0.8\n »;

$xml .= « \t\n »;

$xml .= « \t\n »; $xml .= « \t\t » . icon_to_number($icon) . « \n »;

$xml .= « \t\t${temperature}\n »;

$xml .= « \t\t » . icon_to_number($icon_tomorrow) . »\n »;

$xml .= « \t\t${temp_tomorrow_low}\n »; $xml .= « \t\t

${temp_tomorrow_high}\n »;

$xml .= « \t\n »; $xml .= « \n »; echo

$xml; function icon_to_number($icon) { switch($icon)

{ case « clear »:case « sunny »:case « mostlysunny »:case « partlysunny »: return 0;

break;

case « partlycloudy »: case « cloudy »: case « mostlycloudy »: return 1;

break;

case « chancerain »: case « rain »: case « mostlycloudy »: return 2;

break;

case « fog »: case « hazy »: return 3;

break;

case « chanceflurries »: case « chancesleet »: case « chancesnow »: case « sleet »: return 4;

break; default: return 1; break; } } ?>

 

Ici chaque numéro correspond à une situation météo bien précise . On peut donc en fonction de la situation allumer la/les Leds qu’il faut.

 

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *