Avec ce montage, vous pourrez piloter une prise commandée par bluetooth. Pour cela, vous avez besoin d'une carte Arduino, d'un module récepteur bluetooth ainsi que d'un relais pilotables par l'Arduino.

Schéma du montage

 Codage :

/*Une partie de ce code a été fournie par HobbyComponents.com
concernant leur module bluetooth HCARDU0004*/

/* Ce programme permet à partir d'un appareil bluetooth (comme une tablette tactile,
un smatphone,etc.) de commander par example une prise électrique (prise commandée).
Pour cela, un module bluetooth connecté à une carte Arduino reçoit l'ordre et l'Arduino
commande un relais qui permettra d'alimenter une prise électrique.

ATTENTION : RESPECTER LES CONSIGNES DE SÉCURITÉ ÉLECTRIQUE LORSQUE L'ON TRAVAILLE
AVEC DU 220 Volts !!! DANGER DE MORT !!!

Par défaut, le module bluetooth communique à 9600 baud, sur 8 data bits et 1 stop bit.
Cependant, il est possible de modifier ces réglages (notamment le mot de passe)
en utilisant les commandes AT via l'interface série.
N'oubliez pas d'apparier votre appareil bluetooth pour ce module avec le code : 1234


INSTRUCTIONS DE MONTAGE :
Branchez le module Bluetooth à la carte Arduino comme indiqué ci-dessous

Arduino       Bluetooth module
5V            PIN 2 (VCC),
GND           PIN 3 (GND)
DIO 10        PIN 4 (TXD)
DIO 11        PIN 5 (RXD)

Connecter le relais Funduino comme suit :
Arduino      Relais
5V           PIN 1 (VCC)
GND          PIN 2 (GND)
DIO 2        PIN 3 (IN2)
Laisser le cavalier sur les 2 derniers PIN du relais (COM et GND) si l'alimentation
est celle de l'Arduino (enlever le cavalier si le relais est alimenté par une source
indépendante de l'Arduino).

Compilez ce sketch et téléversez-le vers l'Arduino.

Pour vérifier que la communication est bien établie, vous pouvez vous servir
du moniteur du port série dans l'IDE Arduino (CTRL+MAJ+M).*/


/* Insère la librairie software serial port*/
#include <SoftwareSerial.h>

/* DIO utilisée pour communiquer avec le pin TXD du module bluetooth*/
#define BT_SERIAL_TX_DIO 10 
/* DIO utilisée pour communiquer avec le pin RXD du module bluetooth*/
#define BT_SERIAL_RX_DIO 11
/* Initialise le port série logiciel */
SoftwareSerial BluetoothSerial(BT_SERIAL_TX_DIO, BT_SERIAL_RX_DIO);

/*Rajout pour commander un relais*/
#define RELAY_ON 1
#define RELAY_OFF 0
#define Relay_1  2  // Pin 2 Arduino Digital I/O

void setup() 
{
  /* Fixe le baud rate pour le port série matériel */
  Serial.begin(9600);
  /* Fixe le baud rate pour le port série logiciel */
  BluetoothSerial.begin(9600);
  //-------( Initialise les pins afin que le relais soit inactif après un reset)----
  digitalWrite(Relay_1, RELAY_OFF);
  //---( puis déclare les pins en tant que sorties)----  
  pinMode(Relay_1, OUTPUT);
  delay(4000); //Vérifie que tous les relais sont bien inactifs après un reset
  
  BluetoothSerial.println("Entrer vos commandes avec le bluetooth :");
  Serial.println("Entrer vos commandes par USB:");
}

//Fonction pour convertir des bytes  en un entier (integer)
int catchInteger(){
   int value = 0;
   int expNr = 0;
   int intVal[6]; // Nombre maxi : 999 999 
   
   //Capture des bytes
   while(BluetoothSerial.available()>0)
   {
     intVal[expNr] = (int)(BluetoothSerial.read()-'0');
     expNr++; 
   }
   //Calcule le nombre
   for(int i = 0; i < expNr; i++){
      int power = (int)(pow(10,expNr-i-1)+0.5);
      value = value + intVal[i]*power;
   }
   
   return value;
}

/* Boucle principale qui va permettre de transmettre ou de recevoir des données entre
le module bluetooth et l'Arduino */
void loop()
{
  /* Si des données sont disponibles à travers le module bluetooth alors celui-ci les envoie
  sur le port série matériel.
  if (BluetoothSerial.available())
    Serial.write(BluetoothSerial.read());
 
   /* Si des données sont disponibles à partir du port série matériel alors il les transmet
   au module bluetooth.*/
  while (Serial.available()>0){
        BluetoothSerial.write(Serial.read());}
  
  //Ajout par Thierry
  //Lit à partir du module bluetooth et écrit sur le port série usb
  while(BluetoothSerial.available()>0){
    char r = (char)BluetoothSerial.read();
    Serial.write(r); 
    //Écoute les instructions précédées par le signe #
    if(r == '#'){
      Serial.write("Nombre trouvé :");
      int value = catchInteger();
      Serial.write(value);
      if (value==1){
         digitalWrite(Relay_1, RELAY_ON);}
         else {
         digitalWrite(Relay_1, RELAY_OFF);}
       }
    }  

}