natural_plunge_pool.jpg

L'été est arrivé à grand pas avec la chaleur aussi, vous n'avez qu'une envie : aller vous baigner !

Voici quelques ressources intéressantes trouvées par hasard sur Internet ce Week-end qui vous permettront de construire une piscine 100% naturelle avec quelques centaines d'euros seulement.

Il existe de nombreuses sociétés spécialisées dans les piscines naturelles en Europe, mais l'expert du DIY (do it yourself - fabriquez-le vous-même) est David Pagan Butler un anglais. David partage ses connaissances et retours d'expérience au travers de livres / DVD qu'il commercialise sur son site Internet organicpools.co.uk.

Pour découvrir à quoi ressemble une piscine naturelle, voici une présentation en vidéo:

Le principe de la piscine naturelle est très simple, ne pas utiliser de produits chimiques et polluants pour fabriquer sa piscine et la maintenir opérationnelle. Dans les faits, l'idée est de reproduire un écosystème digne d'un aquarium où tous les éléments s'équilibres pour permettre d'avoir un eau propre de qualité.

D'une manière générale, ces piscines sont constituées de 40 à 50% de zone de regénération et de 50 à 60% de zone de nage. La zone de regénération permet de purifier l'eau grâce aux plantes aquatiques et aux micro-organismes présents naturellement dans l'eau. Au bout d'un certain temps, un écosystème se créé et la piscine s'équilibre toute seule permettant à moindre coût de se baigner dans une pure et propre.

Voici un modèle de piscine naturelle plus petite :

Pour partager ses connaissances sur le sujet et vous permettre d'être autonome dans la construction d'une piscine organique, David Pagan Butler fournit un PDF gratuit sur les principes de la piscine organique. Pour fabriquer votre propre piscine, il vous faudra principalement de l'huile de coude, de l'EPDM (film étanche), du gravier et un mécanisme pompe pour permettre à l'eau d'être filtré par la zone de regénération.

Le concept de la piscine organique est très simple et semble être assez accessible pour des petits bricoleurs.

apache-cordova-google-analytics.jpg

Vous souhaitez profiter de la nouvelle API Google Analytics Universal.js pour tracer les événements de votre application cross-platform Cordova / Phonegap  ? Cependant, vous rencontrez des difficultés pour faire fonctionner Google Analytics dans votre application ? Voici la solution pour permettre à Google Analytics de fonctionner correctement avec les contraintes des frameworks de développement mobile Phonegap / Cordova.

Paramétrage du tracker

La première étape consiste à indiquer à Google Analytics que vous souhaitez suivre l'activité d'une application mobile lors de la création du "tracker".

option-app-mobile.jpg

Modification de la librairie Analytics.js

La seconde astuce est de copier la librairie Analytics.js fournie par Google localement au sein de l'application. Il vous faudra ensuite commenter le morceau de code suivant permettant d'empêcher la librairie de fonctionner dans un wrapper Cordova ou PhoneGap.

if("http:"!=a&&"https:"!=a)throw"abort";

Cette petite astuce vous permettra que la librairie Universal s'initialise correctement lors de l'inclusion de la librairie dans votre page.

Désactivation des cookies

La dernière astuce consiste à désactiver l'utilisation de cookie pour identifier l'utilisateur, les pages étant chargées depuis le "file://" il est impossible à Google Analytics de gérer des cookies.

Pour cela le code suivant est à déclarer après réception de l’événement DeviceReady transmis par Cordova dès que celui-ci est initialisé. Cet évènement est nécessaire pour pouvoir utiliser correctement la propriété "device.uuid" qui vous indiquera l'identifiant unique du terminal basé sur les données du matériel accessibles par Cordova / Phonegap.

ga('create', 'UA-XXXXXX-XX', {
 'storage': 'none',
 'clientId':device.uuid
 });

N'oubliez surtout pas d'ajouter les bonnes autorisations au niveau de votre projet pour pouvoir utiliser cette fonctionnalité de Cordova / Phonegap.

Une fois la librairie chargée, il ne vous reste plus qu'à inscrire les informations de version de votre application dans le contexte :

ga('set', {
  'appName': 'myAppName',
  'appId': 'myAppId',
  'appVersion': '1.0',
  'appInstallerId': 'myInstallerId'
});

Ces paramètres vous permettront de créer des filtres intéressants par version depuis l'interface de suivi des indicateurs de Google Analytics.

Pour tracer chaque page vue et chaque événement spécifique, il vous suffira d'appeler les fonctions suivantes :

ga('send', 'screenview', {'screenName': 'Home'});
ga('send', 'event', 'video', 'started');

Enfin, sachez qu'il est désormais possible de tracer les exceptions Javascript de votre application au travers d'un simple "handler" d'erreur, pour cela :

window.onerror = function (errorMsg, url, lineNumber) {
    ga('send', 'exception', {
      'exDescription': 'Error: ' + errorMsg + ' Script: ' + url + ' Line: ' + lineNumber,
      'exFatal': false
    });
}

Vous voilà prêt pour superviser votre application Cordova/Phonegap en production. Si vous souhaitez aller plus loin, sachez qu'il est aussi possible de superviser les temps de chargement et d'ajouter des champs personnalisés dans les indicateurs remontés à Google.

Vous pourrez vérifier que les indicateurs sont correctement collectés par Google au travers de la vue "Temps réel" proposée sur l'interface de suivi Google Analytics.

crucial-m500-ssd-1.jpg

Voici comme promis le résultat du concours Crucial. Vous avez été nombreux à être identifiés comme Expert ou Social, aucun anti-geek ne lit se blog ;-)

L'heureux gagnant du SSD Crucial M500 de 240 Go est le commentaire n°38 : nitrosurf

concours-crucial.jpg

Bravo à lui et merci à Crucial pour la co-organisation de ce concours.

A très bientôt pour d'autres concours ! Stay tuned !

envoye-special.jpg

Si jamais vous avez loupé l'excellent reportage diffusé hier soir sur Envoyé Spécial pour expliquer à vos parents comment fonctionnent les objets connectés, le voici :

Au programme : domotique, SmartTracker, SmartCity ... et surtout sécurité informatique.

La première personne au démarrage du reportage me ressemble beaucoup ;-)

domotique-arduino1.jpg

Les volets roulants sont souvent la première chose que l'on souhaite domotiser dans une maison, à la fois pour des raisons pratiques, mais aussi pour des raisons de confort l'été en cas de fortes chaleurs.

Venant de faire construire ma maison, j'ai fait le mauvais choix de retenir un fabricant de volets roulant proposant un système radio non ouvert et disposant de très peu de solutions de domotique (Bubendorff). Leur simple horloge me permettant de programmer les horaires d'ouverture et de fermeture coûte la bagatelle somme de 190€ et à ce prix-là, vous n'avez même pas la possibilité d'ouvrir vos volets avec votre téléphone.

Pour me permettre d'automatiser l'ouverture et la fermeture automatique de mes volets j'ai donc décidé d'utiliser un Arduino UNO équipé d'un shield Ethernet pour pouvoir communiquer avec lui à distance depuis mon réseau local ou mon Smartphone.

Le montage électrique est très simple :

  • Le Shield Ethernet est directement connecté à l'Arduino, ce shield permet à l'Arduino de communiquer avec mon réseau local.
  • Les deux relais qui me permettent de simuler l'appui sur la télécommande radio sont connectés sur les sorties 7 et 8 de l'Arduino. Ces deux relais peuvent être montés soit-même comme c'est le cas sur la photo, vous avez aussi la possibilité d'acheter ces deux relais 5V sur Internet prêts à brancher sur l'Arduino. Cela ne coûte que quelques euros.
  • Les deux relais sont connectés au bouton haut et bas de ma commande radio groupée via une petite soudure réalisée à la main. J'ai tout simplement glissé les fils en dessous des pattes existantes et utilisé de l'étain pour fixer les fils. Il faut juste penser à gratter un peu les pattes avec un tournevis plat pour une bonne adhérence de l'étain sur le circuit.



domotique-arduino2.jpg

J'utilise tout simplement l'alimentation 5V de mon Arduino pour alimenter les deux relais. Les sorties 7 et 8 sont quant à elles les sorties qui vont me permettre d'ouvrir et de refermer chacun des relais depuis le logiciel déployé sur l'Arduino.

domotique-arduino6.jpg

Les relais sont connectés aux boutons "haut" et "bas" de ma télécommande radio. Ces relais me permettent de simuler l'appui sur les boutons physiques de ma télécommande actuelle.

domotique-arduino5.jpg

J'ai ensuite développé un petit programme sur l'Arduino qui démarre un petit serveur Web capable de répondre à des commandes très simples transmises via des requêtes REST / JSON.

/*
   Arduino Bubendorff remote control
   Inspired from the Webserver sample code.
   
   @Author : Ludovic Toinel
 */



#define DEBUG false
#define BUFSIZE 255

#include <SPI.h>
#include <Ethernet.h>

// UP and Down Button
const int DOWN = 7;
const int UP = 8;

// Allowed commands
const String COMMAND_UP = "up";
const String COMMAND_DOWN = "down";
 
 
char buffer[BUFSIZE];
int index = 0;
String status = "UNKNOWN";

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xAA, 0xED };
IPAddress ip(192,168,1,4);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // initialize the digital pin as an output.
  pinMode(DOWN, OUTPUT);    
  pinMode(UP, OUTPUT);    
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
 
#if DEBUG
  Serial.print("WebServer started at ");
  Serial.println(Ethernet.localIP());
#endif

}

void loop() {
 
  // listen for incoming clients
  EthernetClient client = server.available();
 
  if (client) {
   
    //  Reset input buffer
    index = 0;
    for (int i = 0; i < (sizeof(buffer)); i++) {
       buffer[i] = '\0';
    }

#if DEBUG    
    Serial.println("New HTTP client");
#endif

    // While new clients connect to the Arduino
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       
        //  fill the buffer
        if(c != '\n' && c != '\r' && index < BUFSIZE){ // Reads until either an eol character is reached or the buffer is full
          buffer[index++] = c;
          continue;
        }  
        buffer[index] = '\0' ;
       
        client.flush();
         
#if DEBUG
        Serial.print("Request = ");
        Serial.println(buffer);
#endif        
       
        // Transform the char buffer into a String
        String request = String(buffer);
       
        //  we're only interested in the first part...
        int qr = request.indexOf('/') + 1;
        String command = request.substring(qr, request.indexOf(' ', qr));
       
#if DEBUG
        Serial.print("Command = ");
        Serial.println(command);
#endif    

        // Open
        if(command == "open") {
           
          digitalWrite(UP, HIGH);
          delay(1000);   // 1 seconde d'appui
          digitalWrite(UP, LOW);
          status = "OPEN";    
         
        // Close
        } else if (command == "close") {
                     
          digitalWrite(DOWN, HIGH);
          delay(1000);    // 1 seconde d'appui
          digitalWrite(DOWN, LOW);    
          status = "CLOSE";
         
        } else {
         
          // send a standard http 404 response header
          client.println("HTTP/1.1 404 OK");
          client.println("Content-Type: application/json");
          client.println("Connnection: close");
          client.println("Access-Control-Allow-Origin: *");
          client.println("Cache-Control: no-cache, no-store, must-revalidate");
          client.println("Pragma: no-cache");
          client.println("Expires: 0");
          client.println();
          client.println("{"status": -1, "message": "command not found", "state": "");client.print(status);client.println(""}");
          break;
        }
       
        // send a standard http response header
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: application/json");
        client.println("Connection: close");
        client.println("Access-Control-Allow-Origin: *");
        client.println("Cache-Control: no-cache, no-store, must-revalidate");
        client.println("Pragma: no-cache");
        client.println("Expires: 0");
        client.println();
        client.print("{"status": 0, "message" : "command succeeded", "state": "");client.print(status);client.println(""}");
        break;
      }
    }
    // give the web browser time to receive the data
    delay(1);
   
    // close the connection:
    client.stop();
   
#if DEBUG
    Serial.println("Client disonnected");
#endif
  }
}

Les entêtes HTTP de cache sont volontairement désactivés pour éviter toute mise en cache de la données par le proxy HTTP d'un opérateur télécom. Les CORS "Access-Control-Allow-Origin" sont quant à eux activés pour me permettre de solliciter ces services REST depuis une interface HTML mise à disposition sur un autre domaine réseau.

Je peux désormais grâce à ce montage simple, gérer mes volets à distance et de manière automatique depuis un simple navigateur sur mon réseau local. Il me suffit pour cela d'ouvrir les URL suivantes :

Pour ouvrir : http://192.168.1.4/open
Pour fermer: http://192.168.1.4/close

J'ai aussi la possibilité de continuer à utiliser manuellement la télécommande en cas de panne réseau.

Dans un prochain article : Le développement de l'interface sur Smartphone permettant de contrôler ses volets depuis n'importe où.

quel-geek-etes-vous.jpg

Les français sont des adeptes des nouvelles technologies. C'est la conclusion d'une étude menée par les experts en solution de mémoire et de stockage de Crucial.fr, l’Institut d’études Opinion Way et le site Le Journal du Geek.

Cette étude a permis d'identifier que 89% des sondés se sont montrés « techno-compatibles ». La répartition des 5 profils identifiés est la suivante :

  • L’expert (9%) : Passionné, très actif et pratiquant le multi-tasking (84%), l’expert adore les nouvelles technologies. Suréquipé avec une moyenne de 9 produits, il est attiré par les nouveautés, aime avoir ce qui se fait de mieux et recherche la performance (43%). Il prend plaisir à en parler : La Geek-attitude assumée.
  • Le social (29%) : Très intéressé et attiré par les nouvelles technologies, le social se considère comme expérimenté (96%). Il donne des conseils à sa famille et ses amis (69%) et exprime son opinion sur des blogs et des forums (68%).
  • Le prudent (26%) : Méfiant à l’égard d’un secteur qu’il a encore du mal à appréhender, c’est un débutant qui cherche à se perfectionner (98%). La prise de risque est exclue et le cap de l’achat n’est franchi qu’à condition que le produit ait fait ses preuves. 54% s’informent via les comparateurs de prix sur Internet et 73% achètent en grande distribution.
  • Le pragmatique (25%) : C’est un débutant qui fait face à un domaine qu’il juge compliqué et très changeant (71%). Près de 89% des pragmatiques se décident avant tout en fonction des prix et attendent qu’ils baissent pour acheter. Environ 25% dépensent de 200 à 499 € par an on produits de nouvelles technologies. Bien que désireux d’apprendre et de se perfectionner, toute folie budgétaire est proscrite.
  • L’anti-geek (11%) : Novice et désintéressé (79%), son rapport aux nouvelles technologies est distant. Il possède l’équipement de base (5,7 produits en moyenne) et déclare pouvoir se passer des nouvelles technologies. 69% décident d’acheter avec l’avis de leurs proches.

Pour permettre à chacun de déterminer son techno profil, Crucial.fr propose un calculateur de Geekitude que vous trouverez ci-dessous :

Et vous quel est votre profil ? Expert je suppose ? ;-)

Partagez votre profil sous forme de commentaire ci-dessous, l'un des commentaires remportera ni plus ni moins un disque SSD Crucial M500 de 240 Go.

Le tirage au sort sera réalisé le dimanche 8 juin à 21h via Random.org.

N'oubliez pas de partager cet article à vos amis !

C'est déjà la fin du concours permettant de vous faire gagner un Starter Kit Arduino.

Le grand gagnant du concours tiré au sort sur Random.org est le commentaire 37 : Dirty Henry

random-arduino.jpg

Il remporte un kit de démarrage Arduino d'une valeur de 63,25€ et commercialisé sur le site de Farnell.

Le kit contient tous les éléments électroniques pour démarrer un projet sur Arduino Uno :

  • 1 Arduino Board Rev3
  • 1 Straight single line pinhead connectors 2,54 40x1
  • 1 Breadboard, 840 tie points
  • 1 Set of 70 breadboard jumper wires
  • 5 10K Ohm Resistors 1/4W
  • 5 2.2K Ohm Resistor 1/4 W
  • 10 220 Ohm Resistors 1/4W
  • 5 330K Ohm Resistors 1/4W
  • 5 100nF capacitor polyester
  • 5 10nF capacitor polyester
  • 3 100uF electrolytic capacitor 25Vdc
  • 1 4,7K Ohm Thermistor
  • 1 70..100K Ohm LDR VT90N2
  • 3 5mm RED LED
  • 1 5mm GREEN LED
  • 1 5mm YELLOW LED
  • 1 10Kohm potentiometer, pcb terminals
  • 2 BC547 Transistor in TO92 Package
  • 1 Piezo buzzer
  • 5 PCB Pushbutton, 12x12mm size
  • 2 4N35 Optocoupler DIL-6 package
  • 2 Tilt sensor
  • 1 Diode 1n4007
  • 1 MOS Irf520
  • 1 USB cable

Merci pour vos nombreux commentaires.

A très bientôt pour d'autres concours !

gaetan-vs-rahan.jpg

Vous êtes peut-être déjà tombé sur les vidéos de Gaëtan sur toile en début d'année, si ce n'est pas le cas (tout comme moi il y a trois jours), voici certainement l'une de ses meilleures vidéos : Gaëtan vs Rahan

671563990_343.jpg

Parmi mes projets geeks, j'avais comme ambition d'installer un lecteur d'empreinte pour ouvrir mon portail qui est la seule porte d'entrée à ma maison, c'est chose faite avec le Zksoftware MA300.

J'ai installé un lecteur d'empreinte / RFID pour gérer l'ouverture de mon portail, en plus de la télécommande radio fournie avec la motorisation de mon portail.
Cela me permet de sortir de chez moi sans devoir embarquer une télécommande radio qui risque à tout moment de perdre ses piles et cela me permet surtout d'éviter de distribuer des télécommandes radio à toutes les personnes que je souhaite laisser rentrer.

Contrairement à ce que l'on peut penser, les lecteurs d'empreinte digitale sont très bons marchés et sont même moins chers qu'un simple clavier numérique de chez Castorama ou Leroy Merlin. Celui retenu coûte 96€.
Je reconnais que le produit choisi est assez austère quand on essaie de comprendre sa fiche produit sur Internet sur les sites chinois, mais il fonctionne très bien.

Il peut fonctionner, de manière autonome mais aussi en mode connecté à un PC pour vérifier les accréditations de la personne. En mode autonome, il suffit d'utiliser une carte RFID d'administration pour enregistrer de nouvelles empreintes, cela se fait très simplement.
Pour une administration plus poussée, il est possible de le connecter en Ethernet / USB ou en série à un PC pour administrer l'ensemble des données stockées sur l'appareil via les logiciels fournis dans le CD accompagnant le lecteur d'empreinte.


Au niveau branchement, le lecteur propose des prises Ethernet / USB / Série pour la connexion à un PC, des sorties NC/NO pour l'ouverture de votre portail / porte. Il propose aussi de connecter un mécanisme d'alarme en cas d'ouverture de la porte sans validation du lecteur. Les possibilités de branchement sont multiples.

MA300.png

En alimentation, le lecteur prend du 12V DC, vous pouvez donc l'alimenter au travers d'un transformateur 24V->12V depuis la motorisation de votre portail. Vous pouvez un transformateur comme celui présenté ci-dessous dans les magasins d'électronique pour quelques euros.

sku_263738_1.jpg

Au niveau solidité / étanchéité le produit pèse son poids et est certifié IP54. Toute la connectique est très bien protégée de l'humidité externe, cependant la glace du lecteur reste fragile et peut être malheureusement facilement dégradée par des personnes externes.

Les difficultés d'installation rencontrées:

  • Prévoyez un boitier dans votre mur pour recevoir tous les câbles de connexion. Ils sont très volumineux, prévoyez à minima un câble ethernet pour le 12V, le NO ou NC et l'accès Ethernet.
  • Anticipez l'achat d'un transformateur 12V DC pour alimenter correctement le lecteur.
  • Essayez de différencier le lecteur de la sonnette, mon facteur n'a pas encore compris que ma sonnette est dans le boitier juste à coté.
  • Mettez bien de coté les vis de sécurité, j'ai perdu les miens lors de la phase d'installation et le SAV ne m'a toujours pas répondu.

Je suis allé à la soiré Codelab proposée par le GDG Nantes afin de découvrir l'Arduino et la manière dont on peut l'utiliser pour réaliser rapidement des prototypes.

Sujet vaste mais très intéressant, au programme : clignotement de LED, thermomètre, relais électrique, potentiomètre ...

Voici les slides du Codelab si le sujet vous intéresse, attention la navigation se fait aussi de bas en haut ;-)

Le code des différents montages se basent sur les exemples de code proposés dans la rubrique "Basic" de l'éditeur Arduino 1.0.5.

Les plans des différents montages ont été réalisés via le superbe outil gratuit de dessin : Fritzing.

Si vous souhaitez tenter de gagner un Starter Kit Arduino, N'hésitez pas à participer au concours Arduino actuellement sur mon blog pour tenter votre chance, un seul commentaire suffit.