Comunicazione Bluetooth di Arduino
HC-05 Wireless Bluetooth Serial Transceiver Module per Arduino - Blu
Il modulo HC05 può essere utilizzato come Master e come Slave. La trasmissione TX e la ricezione RX lavorano a 3,3V quindi non è possibile collegarli direttamente al modulo arduino che ha i pin digitali che lavorano a 5V.
Per ovviare a ciò utilizziamo il convertitore di livelli logici bidirezionali che si occupa di tradurre i segnali con una tensione alta (5V) in una con una tensione bassa (3,3V) e viceversa.
Il modulo HC05 ha sei pin:
-STATE
-RX
-TX
-GND
-Vcc (5V)
- EN (Key)
-RX e TX sono i pin deputati allo scambio dei dati,;
- Vcc e GND sono per la alimentazione del modulo HC05;
-STATE è un oìpin di output che serve per passare dallo stato LOW allo stato HIGH quando il modulo è connesso; di solito si attacca qui il diodo led.
-Key serve a settare il modulo per i comandi AT.
Logic Level Converter - Convertitore di livello logico bidirezionale
Nel convertitore di livelli logici bidirezionale i 4 connettori centrali (HV, GND e LV,GND) dovranno essere collegati direttamente con i segnali di riferimento, quindi per la parte alta a 5 Volt (HV, GND), mentre la parte bassa del modulo, pin (LV,GND) con i 3,3 Volt.
I restanti connettori formano i 4 canali di comunicazione. La comunicazione è bidirezionale, cioè funziona in entrambe le direzioni e da un lato la tensione viene ridotta a 3,3 Volt, mentre dall'altro lato viene aumentata a 5 Volt.
Per entrare in modalità AT del modulo scriviamo questo piccolo schetch, in cui inseriamo la libreria SoftwareSerial.h, in modo da poter utilizzare la trasmissione seriale con i pin diversi da zero a uno.
Questo ci permette di utilizzare contemporaneamente il modulo seriale e il modulo Bluethooh evitando i conflitti, che si potrebbero verificare usando gli stessipin utilizzati dalla porta USB.
Creiamo così un oggetto della classe
SoftwareSerial BTSerial(2,3);
dove i numeri 2 2 3 sono rispettivamente i pin Rx (2) e TX(3).
Ricordiamoco inoltre che RX e TX devono essere invertiti in questo MODO
ARDUINO MODULO HC05
RX <-- TX
TX --> RX
Nella funzione setup() inizializziamo sia la comunicazione con il modulo seriale con l'istruzione:
Serial.begin(38400);
sia quella con il modulo Bluethooh, con l'istruzione:
BTSerial.begin(38400).
Nella funzione void loop() invece controlliamo se ci sono dei caratteri disponibili da leggere sul bluethooh con l'istruzione
If(BTSerial.available()){
Serial.Write(BTSerial.read();
}
if(Serial.available()){
BTSerial.write(Serial.read());
}
delay(10);
}
dove abbiamo inserito anche un piccolo ritardo di 10 millisecondi.
Dopo aver scritto il codice lo carichiamo su arduino e verifichiamo il funzionamento AT. Per entrare in modalità AT e quindi inviare i comandi è necessario che il piccolo pulsante sia premuto quando il modulo riceve l'alimentazione. Stacchiamo quindi il cavetto rosso collegato all'alimentazione di 5Volt, premiamo il pulante e poi tenendolo premuto ricollleghiamo il cavetto.
Setutto è andato a buon fine il led dovrebbe lampeggiare lentamente ad intervalli di circa due secondi , se invece lampeggia velocemente vuol dire che il modulo non è entrato in modalità AT e dunque bisogna ripetere il procedimento.
Accendiamo il monitor seriale facendo attenzione a mettere il baud rate a 38400 e che vengano inviati sia il ritono a capo che il ritorno carrello alla fine di ogni messaggio; per verificare che tutto funzioni correttamente dovremmo inviare il comando
AT
e dovrebbe rispondere con un messaggio di
OK.
Se scriviamo
AT+Version
visualizzeremo la versione del modulo
oppure la password con
AT+PSWD
digitando
AT+name=Bluethooth
per vedere il nome con cui verrà associato l nostro modulo.
Caratteristiche del modulo HC-05
Il modulo HC-05 è uno dei moduli più utilizzato, e può essere utilizzato come master e come slave, a differenza del HC-06 che può essere utilizzato solo come slave.
Il modulo ha una portata di 10 metri e si imposta facilmente tramite i comandi AT.
Caratteristiche tecniche
-Dimensione minime (riferito al solo modulo) 28 x 15 x 2,35 mm
-Versione del Bluetooth è la v 2.0 + EDR.
-Frequenza di funzionamento è 2.4GHz ISM band.
-Processore a bordo è un CSR Bluecore4.
-Tensione di alimentazione consigliata 3,3 V 50mA.
-Corrente richiesta in fase di accoppiamento è circa 30/40 mA mentre in fase di comunicazione è di circa 8 mA.
-Possibili velocità della seriale configurabili 4800, 9600, 19200, 38400, 57600, 115200, 234000, 460800, 921600, 1382400 bps.
-Il modulo HC Bluetooth è di classe 2 (potenza in mW 2,5, potenza dBm 4, distanza metri circa 10).
Collegamento
Per collegare il modulo HC-05 con, ad esempio, Arduino 2, dato che le linee dati lavorano a 3,3 Volt partendo da una tensione di 5 Volt, occorre un partitore di tensione.
Per calcolarlo basta porre Vout/Vin=3,3 Volt/5 Volt=0,66 per ottenere il coefficiente alfa
Se poniamo R1=1,2K otteniamo
R2/(R1+R2)=0,66 -->
R2 -R2*0,66=R1*0,66 -->
R2= R1*0,66/(1-0,66)=R1*1,94=1200*1,94=2329,4 Ohm
La resistenza che si avvicina di più è
R2=2,2K Ohm
Schegliamo quindi come partitore di tensione
R1=1,2 K Ohm
R2=2,2 K Ohm
Con queste due resistenze avremo
Vout= R2/(R1+R2)*Vi =( 2200/(2200+1200))*5 = 0,647*5=3,235 Volt
che sia avvicinano molto ai nostri 3,3 Volt.
Funzionamento del modulo HC-05 con Arduino mega 2560
Arduino Mega ha 4 canali seriali hardware, quindi non abbiamo bisogno di usare il software seriale, possiamo usare uno dei serial hardware extra per parlare con il modulo Bluetooth.Nell'esempio seguente, utilizzo serial1 per parlare con HC-05.
I moduli HC-05 zs-040 hanno una tensione regolare alla tensione di alimentazione. Ciò significa che possono accettare un voltaggio da 3,6 a 6 V e possono essere alimentati da Arduinos a 5V.
Tuttavia, i pin di dati non sono a 5v, ma sono solo 3.3v. Questo significa che dobbiamo ridurre il 5v dal pin TX di Arduino a 3.3v. Un metodo semplice consiste nell'utilizzare un partitore di tensione costituito da una coppia di resistori Come nel caso precedente oppure utilizzare come partitore di tensione le resistenze R1= 1K ohm e R2= 2K ohm ed ottenere come prima un rapporto di partizione di 0,66.
L'Arduino leggerà 3.3v come HIGH, il che significa che non abbiamo bisogno di convertire il BT TX in Arduino RX line. Possiamo fare una connessione diretta
Arduino 5V verso HC-05 VCC
Arduino GND su HC-05 GND
Arduino TX1 / Pin18 su partitore di tensione e quindi su HC-05 RX
Arduino RX1 / Pin 19 su HC-05 TX
Il partitore di tensione utilizza un resistore da 1K ohm e un resistore da 2K ohm.
per il software puoi vedere il seguente sito
http://www.martyncurrey.com/using-an-arduino-mega-with-a-hc-05-zs-040-at-mode/