Go Down

Topic: Arduino e HC 05: matrimonio impossibile.  (Read 3796 times) previous topic - next topic

Karaard

Buonasera a tutti!

Oggi sono entrato nel meraviglioso (o almeno così pensavo) mondo di Arduino. Sono agli inizi con l'elettronica, ma studiando ingegneria elettronica e dovendo dare un meraviglioso esame di informatica, mi sono detto "why not?", e così mi sono procurato un Arduino Leonardo, una scheda HC 05 e un relè.
Del relè per ora non ne parlerò, perchè non è lui il problema (o almeno, non quello primario, penso).

Bando alle ciance, vi espongo il problema che mi assilla. O meglio, uno dei. Quello che spero di riuscire a risolvere in 24h.

Leonardo lo collego al PC con cavo USB collegato ad un HUB USB.

Mentre ho collegato il mio Leonardo al modulo HC 05 così :

HC 05 - Leonardo

Vcc     -    5 V

GND   -    GND

TXD    -    RX <- 0

RXD    -    TX -> 1


Il LED del modulo HC 05 lampeggia forsennatamente appena collego l'USB al Leonardo. E dovrebbe essere OK.

Avvio Arduino IDE 1.6.6 e cerco di entrare nelle impostazioni del modulo HC 05. Nulla. Non da' segni di vita.
Premo il pulsantino sul modulo HC 05, tolgo Vcc, rimetto Vcc, rilascio pulsantino, il LED lampeggia più lento, ma niente. Nessuna risposta OK al comando "AT" dato in monitor seriale (Baud rate 38400, NL&CR).

Come avrete probabilmente capito la mia idea sarebbe quella di pilotare, in un primo momento, il relè via BT. Anche caricando uno dei mille sketch che si trovano su internet per fare questo, sembra che HC 05 e Leonardo non comunichino.

Mi affido a voi, avete qualche idea/consiglio/incantesimo?

Grazie, Luca.

gpb01

Prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi, visto che non abbiamo la sfera di cristallo, se metti il programma che stai usando (... racchiuso negli appositi tag CODE, come da regolamneto) ... magari riusciamo pure a vedere cosa c'è che non va !

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

#2
Dec 01, 2015, 11:28 pm Last Edit: Dec 01, 2015, 11:31 pm by gpb01
... ah ... comunque, per esperienza con gli HC-05, specie con quelli cinesi da quattro soldi, è meglio usare la SoftwareSerial su due pin diversi che la vera seriale ... problemi di livello dei segnali ... ::)

Guglielmo

P.S.: ma ti sei letto l'intero thread dedicato ai moduli bluetooth ? Ci sono un sacco di informazioni !
Search is Your friend ... or I am Your enemy !

Karaard

Hai ragione, sorry :

Code: [Select]
#include <SoftwareSerial.h>

 // includo la libreria per la comunicazione seriale

SoftwareSerial mySerial(10, 11); // imposto i pin per la comunicazione seriale
// Collegare i pin: RX=>11 TX=>10

void setup()
{
  pinMode(2, OUTPUT); //questi sono i pin di ciascun relè
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);


   mySerial.begin(9600); // setto la comunicazione seriale
   Serial.println("dexter");  //scrivo sul monitor seriale
   delay(1000);
}


void loop()
{
   while (mySerial.available())
   {
       char dato= mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
       switch(dato)
       {
         case 'A': // Se ricevo la lettera A,
         {
  digitalWrite(2, HIGH); // attivo il relè collegato al pin12
            mySerial.println("Relè 1 ON");
           break;
         }
         case 'a': // Se ricevo la lettera a
         {
  digitalWrite(2, LOW); // Spengo il relè
           mySerial.println("Relè 1 OFF");
           break;
         }   
                   // E così anche di seguito...
                  case 'B':
         {
  digitalWrite(3, HIGH);
            mySerial.println("Relè 2 ON");
           break;
         }
         case 'b':
         {
  digitalWrite(3, LOW);
           mySerial.println("Relè 2 OFF");
           break;
         }   


         case 'C':
         {
  digitalWrite(4, HIGH);
            mySerial.println("Relè 3 ON");
           break;
         }
         case 'c':
         {
  digitalWrite(4, LOW);
           mySerial.println("Relè 3 OFF");
           break;
         }   
                  case 'D':
         {
  digitalWrite(5, HIGH);
            mySerial.println("Relè 4 ON");
           break;
         }
         case 'd':
         {
  digitalWrite(5, LOW);
           mySerial.println("Relè 4 OFF");
           break;
         }   
                  case 'E':
         {
  digitalWrite(6, HIGH);
            mySerial.println("Relè 5 ON");
           break;
         }
         case 'e':
         {
  digitalWrite(6, LOW);
           mySerial.println("Relè 5 OFF");
           break;
         }   
                  case 'F':
         {
  digitalWrite(7, HIGH);
            mySerial.println("Relè 6 ON");
           break;
         }
         case 'f':
         {
  digitalWrite(7, LOW);
           mySerial.println("Relè 6 OFF");
           break;
         }   
                  case 'G':
         {
  digitalWrite(8, HIGH);
            mySerial.println("Relè 7 ON");
           break;
         }
         case 'g':
         {
  digitalWrite(8, LOW);
           mySerial.println("Relè 7 OFF");
           break;
         }   
                  case 'H':
         {
  digitalWrite(9, HIGH);
            mySerial.println("Relè 8 ON");
           break;
         }
         case 'h':
         {
  digitalWrite(9, LOW);
           mySerial.println("Relè 8 OFF");
           break;
         }   
       }       
   }
}


La guida non l'avevo seguita, poiché non mi era comparsa nei risultati di ricerca di Google, e quindi ho seguito un'altra guida.

Anche collegando ai pin 10 - 11 la situazione non cambia.

Grazie mille!

Luca

fiodavid

Non mi è chiara una cosa:

-dal codice che hai inserito nel post, non capisco come usi il modulo HC-05, nel senso che hai definito i pin della seriale, leggi quello che ricevi dalla seriale e in base a cosa ricevi ecciti o non ecciti la bobina del relativo relè giusto?in modulo HC-05 al momento non lo stai utilizzando quindi?

Secondo me potrebbe essere utile che tu alleghi anche uno schema elettrico di come hai collegato i vari componenti.

Ciao
fiodavid



Karaard

L'idea è quella di arrivare ad eccitare la bobina via BT, ma in un secondo momento.

Ora mi basterebbe riuscire a verificare che l'HC05 funzioni e che comunichi correttamente con Leonardo.

Appena riesco allego schema utilizzato. Comunque ho eseguito i collegamenti, anche se presi da un'altra guida, come nella guida consigliata prima.

Grazie!

Luca

Ps stamattina ho provato a caricare lo sketch base

Code: [Select]
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}



E anche con questo, quando collego il pin In1 del relè ad un qualunque pin dal 2 al 9, la bobina si eccita.

Grazie ancora! Mi sta quasi dando più problemi Arduino di Analisi I.

gpb01

#6
Dec 02, 2015, 01:48 pm Last Edit: Dec 02, 2015, 01:50 pm by gpb01
Allora, fissiamo alcuni punti e collaudiamo il tuo HC-05 ...

1. di default il HC-05 lavora a 9600 baud
2. di default in modalità comandi il HC-05 lavora a 38400 baud
3. in modalità d'uso normale il pin KEY deve essere o lasciato sconnesso o LOW
4. per entrare in modalità comandi il pin KEY DEVE essere messo HIGH (+Vcc)

Detto questo, il seguente programma di prova è ampiamente collaudato e ti permette di usare il HC-05 sia in modalità comando che in modalità normale (devi commentare o meno una define in testa al programma):


Code: [Select]
// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

// #define  BT_CONTROLMODE      // Uncomment if you set the KEY pin to HIGH (Control mode)

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  #ifdef BT_CONTROLMODE
    btSerial.begin(38400);   // Initialize Bluetooth SoftwareSerial port for default control speed
  #else
    btSerial.begin(9600);    // Initialize Bluetooth SoftwareSerial port for selected data speed
  #endif
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
  #ifdef BT_CONTROLMODE
    delay(1000); 
    btSerial.print("AT");
    btSerial.print("\r\n");
  #endif
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}


Quello che scrivi sul monitor seriale arriva al HC-05, quello che il HC-05 risponde arriva sul monitor seriale.

Mi raccomando, i comandi AT vanno terminati con CR/LF.

Guglielmo
Search is Your friend ... or I am Your enemy !

Karaard

Sull'HC 05 non ho alcun PIN Key, ho EN (stessa cosa?), Vcc, GND, RXD, TXD e Status.

Con lo sketch linkato compare la scritta "Ports Ready" sul monitor seriale, ma ogni comando AT inviato, non riceve alcuna risposta.

Non essendo dal mio PC purtroppo non riesco ancora ad allegare uno schema, appena arrivo a casa, provvedo.

gpb01

Se non abiliti la modalità AT ... non ti risponderà MAI !

Hai un link al modulo che hai comprato (così vediamo le caratteristiche) ? ... perché, oltretutto, non tutti sono 5V tolerant !!!

Guglielmo
Search is Your friend ... or I am Your enemy !

Karaard

#9
Dec 03, 2015, 12:10 am Last Edit: Dec 03, 2015, 12:19 am by Karaard
La modalità AT non si abilità premendo il pulsantino sul modulo, togliendo Vcc e rimettendo Vcc? Lampeggia più lentamente così facendo.

Aukru HC-05 seriale a 6 Pin (così c'è scritto dove l'ho comprata)



Quote
3. Input voltage: 3.6V - 6V, 7V prohibit over
4. Power anti-reverse, reverse module does not work
5. leads to 6 pin: EN / VCC / GND / RXD / TXD / STATE (Bluetooth status leads to the foot, is not connected to the output low, output high after the connection)
6. En status indicator, LED flash means no Bluetooth connection; LED slow flash indicates into the AT command mode
7. On-board 3.3V regulator chip, the input voltage DC 3.6V-6V; when unpaired, current is about 30mA (because LED lights flashing, the current state of change); After the pairing is successful, the current is about 10mA
8. Level interface 3.3V, you can directly connect a variety of microcontroller (Arduino / 51 / AVR / PIC / ARM / MSP430, etc.), 5V microcontroller can also be directly connected. Directly connected to the microcontroller serial port, you can not go through MAX232 chip!
9. The open area effective transmission distance of 10 meters, over 10 meters are possible, but do not guarantee the quality of the connection
10. After the pairing is successful, can be used as a full-duplex serial interfaces. Do not need to know any of the Bluetooth protocol, but only supports 8 data bits, 1 stop bit, no parity communication format. This is the most common communication format, not support other format!
11. Press the button to give the Bluetooth module is powered up can enter AT mode, set parameters and query information
12. You can switch between master and slave mode via AT commands
13. The module default baud rate is 9600, the default passkey is 1234, the default name for the HC-05
14. protection with transparent heat shrinkable tube
pay your attention : Please do not connect the power supply with the signal pin directly,or it will result in broken
Grazie ancora una volta!

Luca

gpb01

#10
Dec 03, 2015, 12:25 pm Last Edit: Dec 03, 2015, 12:26 pm by gpb01
Ok, l'ennesima basetta adattatrice diversa dalle altre ...
... HC-05 in realtà è solo il modulino saldato sopra, poi, ogni rivenditore, lo applica su una basetta adattatrice e ... non c'è uno standard

Da quello che leggo, il KEY è in realtà collegato a quel pulsantino, quindi, probabilmente, per farlo andare in modalità AT, basta alimentarlo tenendolo premuto ... ::)

Non mi piace il punto 8 ... "Level interface 3.3V, you can directly connect a variety of microcontroller (Arduino / 51 / AVR / PIC / ARM / MSP430, etc.), 5V microcontroller can also be directly connected." ...
... HC-05 NON è 5V tolerant e, se la basetta adattatrice riporta 3.3V significa che non ha gli adattatori di livello (... mentre, come vedi, per l'alimentazione è chiaramente specificato che si può alimentare sino a 6V). Farlo lavorare a 5V, senza adattatori di livello ... porta, prima o poi, a danneggiarlo.

Io collegherei il TX del HC-05 direttamente al pin di Arduino che fa da RX, mentre il pin di RX del HC-05 lo collegherei al pin di Arduino che fa da TX tramite un piccolo partitore resistivo per portare i 5V a 3.3V ;)

Per il resto, usando il programma di test che ti ho dato, DEVE funzionare, altrimenti qualche cosa è collegata male/il modulo è guasto.

Guglielmo

P.S.: Occhio che sulla Leonardo NON tutti i pin possono essere usati per la SoftwareSerial ... usa quelli del mio esempio, 10 e 11.
Search is Your friend ... or I am Your enemy !

Karaard

Ok, penso che, avendolo pagato 5 euro lo butterò via sto modulino e ne comprerò uno decente. Dici che mi convenga? Anche perché vorrei alla fine qualcosa di affidabile nel tempo. Avrei dovuto pensarci prima.

Nelle prove ho usato prima TX e RX della Leonardo, poi, dopo i tuoi suggerimenti, sempre e solo 10 e 11.

Purtroppo con il programma di test non funziona, i collegamenti sono abbastanza basici, e arrogantemente dico che siano giusti.   :-[   :smiley-yell:

Grazie, sei stato gentilissimo!

PS per una gestione a distanza di pochi metri, mi conviene una ethernet shield o un altro modulo bluetooth, per la gestione di un relè? Lo so che è a seconda delle mie esigenze, per me è la stessa cosa.

gpb01

PS per una gestione a distanza di pochi metri, mi conviene una ethernet shield o un altro modulo bluetooth, per la gestione di un relè? Lo so che è a seconda delle mie esigenze, per me è la stessa cosa.
In effetti 5€ sono un po' pochini :D :D :D ...

Per la tua domanda ... dipende cosa vuoi fare e con cosa ti ci vuoi collegare. Ad esempio, se tu usassi dei device iOS (iPhone, iPad, ...) dovresti necessariamente usare WiFi o BLE, se usi Android va bene l'HC-05.

Ogni opzione ha i suo vantaggi ed i suoi svantaggi ... ::)

Per l'HC-05 guarda QUESTO ... EMBstore è abbastanza serio, è in Italia e molti qui hanno acquistato materiale da lui con soddisfazione.

Guglielmo
Search is Your friend ... or I am Your enemy !

Karaard

Cavolo, era una delle opzioni di acquisto quel negozio di Ebay.

Solo dispositivi Android. L'idea era quella di gestire strisce led posizionate su una trave, con attivazione da remoto. Da remoto in senso lato, mi va benissimo anche accedere ad una pagina da browser dello smartphone, e da lì attivare i relè.

Per altre cose che avevo in mente, non ho necessità di connessione.

Comunque, eventualmente, il PIN RX dell'HC-05 da te consigliato, dovrei comunque collegarlo con resistenza per portare la tensione a 3.3?

Grazie per i preziosi consigli!

Luca

gpb01

No, come puoi leggere nella descrizione:

Quote
Accetta alimentazione e comandi sia a 5Vdc che a 3,3Vdc.
... quello che ti ho linkato è fatto per essere connesso direttamente (ha probabilmente degli adattatori di tensione on board) e, come hai visto ... ha il pin KEY :D

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up