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.
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);} } } }