Total-Informatique

Le blog de sablier94

Ventilateur rotatif contrôlé par télécommande infrarouge

août 6th, 2013

Je voulais tester mon capteur infrarouge avec mon  Arduino, et par cette chaleur, la bonne idée était de l’utiliser pour contrôler un petit ventilateur rotatif.

Résultat final

Résultat final

Pour ce montage, j’ai utilisé le matériel suivant :

  • Un Arduino (peu importe le modèle, ici je vais utiliser l’arduino UNO)
  • Un relai
  • Une breadboard
  • Un ventilateur d’une puissance que l’Arduino peut fournir
  • Un servomoteur
  • Un transistor NPN, deux résistances (220 Ω) et une diode Zener
  • Quelques petits câbles

Mon ventilateur est celui qui était dans les anciennes Xbox mais n’importe quel ventilateur qui a un 2 fils (VCC et GND) un fera l’affaire. Mon récepteur IR est un classique vs1338B (à 38 KHz), livré avec une télécommande compatible (celle-ci). Pour la télécommande vous n’êtes pas obligé d’en acheter une parce que quasiment toutes les télécommandes fonctionnent à cette fréquence. Chaque touche de votre télécommande envoie un signal différent et il est aussi différent pour chaque modèle (heureusement, parce que ce ne serait pas pratique que votre télévision s’éteigne quand vous voulez monter le son de votre lecteur DVD). Du coup vous devrez utiliser le moniteur de l’IDE Arduino (avec le code fourni dans cet article) pour récupérer les codes envoyés par votre télécommande.

Voilà un schéma pour savoir comment câbler tout ça (bien entendu, il peut différer suivant le matériel utilisé).

Schéma du câblage

Schéma du câblage

Ici j’utilise la sortie VIN de l’Arduino, c’est à dire le nombre d’ampères fourni par la sortie USB (5 Volts) auquel on a branché l’Arduino. Si votre ventilateur est plus gros, vous pouvez brancher le relai sur une alimentation externe.

Vue du montage

Vue du montage

Attention au sens du transistor (Dans l’exemple du relai sur le schéma Fritzing,  l’élément est, par défaut, du mauvais sens).

Pour le code Arduino, nous  allons utiliser la librairie IRremote à télécharger ici : http://www.pjrc.com/teensy/td_libs_IRremote.html

Modifiez les constantes du sketch ci-dessous en fonctions de vos paramètres (pins choisis et valeurs des commandes IR) puis uploadez-le. Une fois que tout fonctionne, utilisez du scotch (ou de la colle) pour fixer le ventilateur au servomoteur et le servo sur votre bureau. N’oubliez pas de laisser un peu de marge dans la taille des câbles d’alimentation du ventilateur vu qu’il va tourner.

#include <IRremote.h>
#include <Servo.h>

//Constante à modifier suivant votre montage
const int BUTTONTURN = 0xFFA25D;
const int BUTTONOFF = 0xFFA25D;
const int RECV_PIN = 11;
const int RELAY_PIN = 10;
const int SERVO_PIN = 9;
const int MAXSERVOVALUE = 140;
const int MINSERVOVALUE = 40;

Servo myservo;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean isPowerOn = false;
int valueServo = 90;
boolean blnServoOn = false;
boolean blnTurnServoUp = true;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  myservo.attach(SERVO_PIN);
  digitalWrite(RELAY_PIN, true);
  myservo.write(valueServo);
  delay(15);
}

void loop() {
  if (irrecv.decode(&results)) { //On reçois et décode les infos IR de la télécommande
  Serial.println(results.value, HEX); //Envoie sur le port USB la commande IR envoyée
    if(results.value == BUTTONOFF) //Eteindre le ventilateur
    {
      if(isPowerOn)
      {
        isPowerOn = false;
        Serial.println("OFF");
        digitalWrite(RELAY_PIN, true);
      }
      else
      {
        isPowerOn = true;
        Serial.println("ON");
        digitalWrite(RELAY_PIN, false);
      }
    }
    else if(results.value == BUTTONTURN) //Tourner le ventilateur ou non
    {
      if(blnServoOn)
      {
        blnServoOn = false;
      }
      else
      {
        blnServoOn = true;
      }
    }
    irrecv.resume();
  }
  if(blnServoOn)
  {
    //Sens de rotation :s
    if(valueServo <= MINSERVOVALUE)
    {
      blnTurnServoUp = true;
    }
    else if(valueServo >= MAXSERVOVALUE)
    {
      blnTurnServoUp = false;
    }
    if(blnTurnServoUp)
    {
      valueServo = valueServo + 1; //Avance d'un degré
    }
    else
    {
      valueServo = valueServo - 1; //Recule d'un degré
    }
    myservo.write(valueServo);
    delay(15); //Pour lui laisser le temps de bouger
  }
}

Alors, rafraichissant ?

Ventilateur fixé

Ventilateur fixé (ici pas très joli)

Your email address will not be published. Required fields are marked *

*

Total-Informatique

Le blog de sablier94