Web, Technologies, IA, Vidéo...

mai 30, 2011

Tweet via l'Arduino et un PC

Dans ma découverte de l'Arduino, ma première envie fût de réaliser un tweet avec l'Arduino grâce à la détection de courant via une de ses entrées (ou changement d'état). On s'amusera par la même occasion à faire allumer une LED. Pour cela, nous aurons besoin d'une plaque de pratique, de différents composants électronique (LED, transistors, résistance), d'un Ethernet Shield et bien entendu de l'Arduino.

L'Arduino en lui même n'est pas capable de faire un tweet, en revanche, il est tout à fait à même de faire un appel réseau via un Ethernet Shield et la librairie Ethernet. Il vous faudra donc un ordinateur également relié au réseau et sur lequel sera présent le code permettant de faire le tweet. Je me suis basé sur ce tutoriel: Envoyer un tweet simplement en PHP avec OAuth pour tweetter. Le montage donne le résultat suivant :

Pour vous aider, voici une vision plus claire grâce un petit schéma. J'ai utilisé un transistor PNP BC32725, trois résistances de 110 Ohms, une LED. Attention au sens du transistor, vous risquez d'avoir des surprises ;-)

Pour les électroniciens, le schéma suivant vous donnera une meilleure vision du montage :

Pour rappel, notre objectif est de faire un tweet depuis un changement d'état (électrique) via une des entrées de l'Arduino. Dans le schéma ci-dessus, j'ai utilisé un interrupteur pour simuler le changement d'état. Je vous laisse voir pour les utilisations possibles en modifiant l'interrupteur par un capteur ;-)

Maintenant, passons au code qui sera dans l'Arduino :

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

byte mac[] = {  0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz }; // l'adresse MAC est indiqué sur l'Ethernet Shield
byte ip[] = { xxx, xxx, xxx, xxx }; // l'adresse ip pour le shield
byte server[] = { yyy, yyy, yyy, yyy }; // l'adresse ip de la cible (qui permettra le tweet)

// Cette variable permet de savoir si un tweet a déjà été effectuée
bool tweet = false;

Client client(server, 80);

void setup()  {
  pinMode(7, OUTPUT); // on définit le pin 7 en sortie (qui servira pour allumer la LED)
  Serial.begin(9600);
  Ethernet.begin(mac, ip); // on configure l'ethernet
  delay(1000);
} 

void loop()  {
  Serial.print("Etat pin 2 : ");
  int val = analogRead(2); // on lit l'état de l'entrée Analogique 2
  Serial.println(val);
  if(val >= 900 && !tweet) { // si la valeur du pin A2 est supérieur à 900 on considère un changement d'état et donc on lance le tweet
    analogWrite(7, 255);
    sendTweet();
    analogWrite(7, 0);
  }else{ // sinon on attends 2 sec
    delay(2000);
  }
}
// l'envoi du tweet via le code PHP se fait ici
bool sendTweet() {
  Serial.println("connecting...");
  if (client.connect()) {
    Serial.println("connected");
    client.println("GET /tweet.php HTTP/1.0");
    client.println();
    delay(2000);
    do { // on fait "tourner" le script pour récupérer tout l'appel HTTP
      char c = client.read();
      Serial.print(c);
    } while((client.available()));

    if (!client.connected()) { // on clôt la connexion une fois la requête HTTP faite
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
      tweet = true; // on bloque ici les tweets potentiels suivants
    }
  }
}

Une fois embarquée sur l'Arduino, vous pouvez effectuer vos premiers tests. En fermant l'interrupteur, l'Arduino lancera un appel réseau sur le serveur que vous aurez défini et effectuera le tweet. Et voilà le tour est joué. Pour refaire un tweet, il vous faudra faire un reset sur l'Arduino.

Bon amusement ;-)

mai 26, 2011

De l'Arduino à mes retours à l'électronique

Depuis un petit moment, j'ai laissé de côté ce blog, pour plusieurs raisons : le travail, l'animation sur le portail www.titanium-news.com, mais également car depuis quelques temps, je bidouille sur Arduino : une carte intégrant un microprocesseur en open-source, mais également un IDE également en open-source. Je vais dans les prochains temps me remettre à écrire plus ardemment, enfin je l'espère.

Le site arduino.cc fourmille de documentation, de spécifications et d'exemple à propos de l'Arduino. Pour ma part, j'ai acheté le module sur Lextronic, et j'ai reçu le colis sous 3 jours. Je recommande également de se munir d'un kit contenant différents composants électronique, des fils et une plaque de pratique (exemple de kit sur le store.arduino.cc). Cela vous permettra de ne pas être bloquer au premier tutoriel.

Une fois que vous aurez reçu tout ces éléments, vous pourrez commencer, tout comme moi, à vous amuser. Vous aurez cependant assez rapidement besoin de notions en électronique afin de ne pas faire griller vos composants (comme une de mes LEDs dernièrement). Pour ma part, la découverte de l'Arduino m'oblige à reprendre mes bases d'électronique (auxquelles je n'avais pas touché depuis près de 10ans, l'IUT c'est loin déjà ;-) ).

Quelques idées de projet sont présentes dans mon esprit et je vais essayer de les mettre en place. Pour vous faire profiter de mes expériences, j'ai créé deux nouvelles catégories dans le blog : Arduino et Electronique.

Bonne bidouille.