Come controllare da remoto i motori elettrici con Arduino Bluetooth?

31 Gennaio 2020

Scroll

toy-680164_1920

Come controllare da remoto i motori elettrici con Arduino Bluetooth?

Licenza Creative Commons
Arduino Bluetooth Car diRiccardo Schifaudo è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale.
Based on a work at https://docs.google.com/document/d/1-Bc6mjCoifsMk65_AUJZmEv8n9OtqEDf-PZQkr890Yk/edit?usp=sharing.
Permessi ulteriori rispetto alle finalità della presente licenza possono essere disponibili presso https://www.the-shinobi-arts-of-eccentricity.com/blog/contattami/.

Presentazione del progetto

Il progetto nacque per realizzare un prototipo modellino di automobile costruita in Arduino che esegue dei movimenti di direzione comandato attraverso modulo bluetooth tramite app per smartphone.

Questo prototipo è stato tratto da una relazione di progetto di un esame d’Internet of Things quando ho studiato all’ITS da Mobile App Designer di Torino, così come per la Discoteca da Polso con Sensore di Movimento.

In questa pubblicazione è stato rivisto per creare una guida di come realizzare un circuito elettronico per controllare l’avanzamento in avanti, destra, sinistra e retromarcia tramite comandi bluetooth.


Lista di componenti necessari per il pilotaggio dei motori con Ponte H

  • Arduino Leonardo;
  • Ponte H L293D;
  • 4 Motori DC 9V(anche se il circuito prevede il controllo di due motori);
  • 4 Resistori dello stesso valore nominale;
  • Un pulsante di accensione;
  • Modulo Bluetooth HC-05;
  • Cavetti di collegamento;
  • 1 Breadboard;

Fasi di realizzazione del progetto

Il progetto per la realizzazione del circuito di controllo remoto via bluetooth dei motori DC(corrente continua), si articola nella seguenti fasi:

  1. Montaggio del circuito elettrico collegato ad Arduino come da schema di elettrico;
  2. Sviluppo dello sketch di funzionamento per la configurazione del modulo HC-05;
  3. Sviluppo dello sketch di funzionamento del circuito per il pilotaggio dei motori;
  4. Controllo da remoto del modellino con app Bluetooth dedicata.

Prima d’iniziare, a cosa serve il ponte H?

Il ponte H in parole povere, è un circuito elettronico che si può presentare sotto forma d’integrato o modulo elettronico.

Esso consente di determinare il verso di rotazione di un motore elettrico, semplicemente invertendo la polarità della corrente.

Quindi tramite un pin di controllo è possibile far scorrere la corrente da un verso + o – e vicerversa.

Questa variazione del flusso di corrente, determina una induzione magnetica negli avvolgimenti interni del motore, facendo girare il rotore in senso orario o antiorario.

Per ulteriori informazioni sul Ponte H clicca qui.

Per le nozioni di motore DC, ovvero a corrente continua gestiti dal Ponte H consulta questo link.

Bene, spero di averti fornito tutte le informazioni del caso, perciò iniziamo 😉


Fase 1
Schema elettrico di montaggio del circuito

circuito ponte h controllo motori in dc
Circuito elettrico di montaggio realizzato con Fritzing

Fase 2
Sviluppo sketch
per configurazione del modulo HC-05

modulo hc-05 circuito elettrico
circuito di montaggio modulo bluetooth HC-05

Lo scopo di questo sketch mira a configurare il funzionamento del modulo bluetooth HC-05.

Questo modulo permetterà la connessione in remoto del modellino d’auto o del circuito di pilotaggio motori.

Verrà comandato tramite i comandi trasmessi dall’utilizzo dell’app di controllo.

Il codice sorgente è stato preso dal sito d’Instructables per maggiori informazioni andate all’articolo originale

VAI AL SITO

In questo caso è stata ridotta la velocità di trasmissione seriale bluetooth dai 38400 baud a 9600 baud.

Oevvero la velocità standard di comunicazione della scheda Arduino.

Sketch di configurazione del modulo HC-05 per verifica dei comandi da App Bluetooth

#include SoftwareSerial BTSerial(10,11); // RX | TX


void setup() {
  // put your setup code here, to run once:
 // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode

  pinMode(9, OUTPUT);  
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(9600);  // HC-05 default speed in AT command more


}

void loop() {
  // put your main code here, to run repeatedly:
  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());

}

Spiegazione dello sketch di configurazione del HC-05

Viene dichiarata la libreria SoftwareSerial che consente la possibilità d’instaurare una connessione bluetooth tra la scheda Arduino e i motori tramite modulo HC-05.

Per mezzo della funzione SoftwareSeriale vengono definiti i pin di trasmissione e ricezione del segnale bluetooth dell’App.

Poi verranno interpretati a sua volta da Arduino.

A seconda del comando ricevuto, il firmware eseguirà la porzione di codice dedicata alla direzione dei motori in corrente continua.

Nella funzione setup(), vengono inizializzati i valori del piedino 9 e attibuito valore ALTO, al quale verrà collegato l’Enable che attiverà il modulo HC-05.

Vengono aperte le porte seriali della scheda Arduino e del modulo bluetooth a 9600 baud.

Nella funzione loop() due costrutti selettivi “if state” stamperanno nella seriale Arduino cosa viene ricevuto dal modulo bluetooth e viceversa.


FASE 3
Sviluppo sketch pilotaggio dei motori con Bluetooth

In questa fase svilupperemo lo sketch che permetterà di pilotare e controllare ogni direzione di rotazione dei motori.

Questo avverrà tramite controllo remoto con Bluetooth utilizzando l’app di controllo dello smartphone.

Lo sketch è stato sviluppato sul sorgente precedente modificato per lo scopo e qui sotto riportato.

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10,11); // RX | TX

//declaraction variable to enable flow energy of motor1 and control pins of direction
const int enablePin = 6;
const int controlPin1 = 5;
const int controlPin2 = 4;

//declaraction variable to enable flow energy of motor2 and control pins of direction
const int enablePin2 = 3;
const int controlPin3 = 12;
const int controlPin4 = 13;

//park variable to set value which it was read by module HC-05 bluetooth
char park = 'N';




void setup() {
  // put your setup code here, to run once:
 // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode

  pinMode(9, OUTPUT);  
  digitalWrite(9, HIGH);
  
 pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);

  pinMode(controlPin3, OUTPUT);
  pinMode(controlPin4, OUTPUT);

  pinMode(enablePin, OUTPUT);
  pinMode(enablePin2, OUTPUT);
  digitalWrite(enablePin, LOW);
  digitalWrite(enablePin2, LOW);
 



  Serial.begin(9600);
  BTSerial.begin(9600);  // HC-05 default speed in AT command more




}

void loop() {
  // put your main code here, to run repeatedly:
  // Keep reading from HC-05 and send to Arduino Serial Monitor
 

//Read value form HC-05 module bluetoothe and set data into park variable which determine state of rotation’s motors 

if (BTSerial.available()) {
    park = BTSerial.read();
    Serial.println(park);
 }else{park = 'N';}


  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());

 //Go ahead
  if (park == 'A') {
    Serial.println("Avanti!");
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
    digitalWrite(controlPin3, HIGH);
    digitalWrite(controlPin4, LOW);
    analogWrite(enablePin, 255);
    analogWrite(enablePin2, 255);
    delay(2000);
    park = 'N';
  }

  //Go back
  if (park == 'B') {
    Serial.println("Indietro!");
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
    digitalWrite(controlPin3, LOW);
    digitalWrite(controlPin4, HIGH);
    analogWrite(enablePin, 255);
    analogWrite(enablePin2, 255);
    delay(2000);
    park = 'N';
  }

  //Turn right
  if (park == 'R') {
    Serial.println("Destra!");
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
    digitalWrite(controlPin3, HIGH);
    digitalWrite(controlPin4, LOW);
    analogWrite(enablePin, 255);
    analogWrite(enablePin2, 255);
    delay(2000);
    park = 'N';

  }

 //Turn left
  if (park == 'L') {
    Serial.println("Sinistra!");
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
    digitalWrite(controlPin3, LOW);
    digitalWrite(controlPin4, HIGH);
    analogWrite(enablePin, 255);
    analogWrite(enablePin2, 255);
    delay(2000);
    park = 'N';

  }

  //Turn off motors - Stop
  if (park == 'N') {
    Serial.println("Motore Spento!");
    analogWrite(enablePin, 0);
    analogWrite(enablePin2, 0);

    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, LOW);
    digitalWrite(controlPin3, LOW);
    digitalWrite(controlPin4, LOW);
    delay(1000);
  }
}//close void loop()

DOWNLOAD

Spiegazione dello sketch finale di controllo remoto da bluetooth dei motori DC tramite Ponte H

Viene dichiarata la libreria SoftwareSerial che consente la possibilità di dialogare tramite una connessione bluetooth alla scheda Arduino usando il modulo HC-05.

Vengono dichiarati i pin di trasmissione(TX) e ricezione(RX) del segnale bluetooth del modulo HC-05.

Devono essere configurati tassivamente con i pin 10(TX) e 11(RX) se perché sono abilitati alla codifica del “bluetooth seriale”.

Dopo vari tentativi scoprii che la libreria della SoftwareSerial si serve dei pin PWM 10 e 11, altrimenti non avevo altro modo per permettere ad Arduino d’interpretare i segnali bluetooth.

Nella funzione setup(), vengono inizializzati i valori del piedino 9 e attibuito valore ALTO, al quale verrà collegato all’Enable che attiverà il modulo HC-05.

Vengono aperte le porte seriali della scheda Arduino e del modulo HC-05 a 9600 baud.

Nella funzione loop() due costrutti selettivi if stamperanno nella seriale Arduino cosa viene ricevuto dal modulo Bluetooth, e viceversa.

All’interno del primo costrutto selettivo if verrà depositato il valore letto ricevuto dal modulo HC-05 salvata in una variabile di appoggio di tipo char di nome ‘park’.

Altri cinque costrutti selettivi attiveranno i motori del modellino in base alla lettera ricevuta che è stata trasmessa dall’app dedicata in base alla lettera ricevuta:

  • A = Ahead:
    I motori ruoteranno entrambe le ruote in senso orario per andare avanti;
  • B = Back:
    I motori ruoteranno entrambe le ruote in senso antiorario per andare indietro;
  • L = Left:
    I motori ruoteranno uno in senso antiorario a sinistra e orario per la destra per girare a sinistra;
  • R = Right:
    I motori ruoteranno uno in senso  orario a sinistra e antiorario a destra per girare a destra;
  • N = Null:
    I motori vengono spenti.

Fase 4
Installazione “Arduino Bluetooth Controller” e configurazione dei comandi

Come controllare da remoto i motori elettrici con Arduino Bluetooth?

Arduino Bluetooth Controller

Questa applicazione sviluppata da Pegi3 svolge egregiamente il compito di controllo remoto via bluetooth.

Con questa applicazione potrete controllare i vostri prototipi Arduino in quattro modalità differenti.

  • Modalità Terminale;
  • Modalità Interruttore;
  • Modalità Joystick;
  • Modalità Pulsantiera;

In questa modalità terminale, una volta associato al modulo HC-05(e non HC-06), e inserito il codice di sblocco(in genere 0000 o 01234), potrete inserire uno dei “cinque comandi” riportati in precedenza.

La potete scaricare direttamente dal Play Store.

Se poi Google non è tuo amico grazie agli strumenti offerti dal Play Store 😉

VAI AL PLAY STORE


Utilizzare l’App in Modalità Joystick per il controllo del modellino di automobile o motori DC

In alternativa potete configurare i comandi bluetooth associandoli ai tasti dei Joystick virtuale di Android Bluetooth Controller.

Arduino Bluetooth Controller Joystick

Come procedere?

  1. Apri l’app;
  2. Collegati al modulo HC-05 e inserisci la password di associazione;
  3. Collegati al modulo in modalità “joystick”;
  4. Fai click sull’icona impostazioni in alto a destra;
  5. Associa le lettere di controllo bluetooth da inviare alla scheda Arduino.

Come controllare da remoto i motori elettrici con Arduino Bluetooth?
  • L = LEFT: Gira a Sinistra.
  • A = AHEAD: Vai Avanti.
  • R = RIGHT: Gira a Destra.
  • B = BACK: Retro marcia.
  • N = NULL: Spegni i motori.

Considerazioni tecniche di questo progetto

Come controllare da remoto i motori elettrici con Arduino Bluetooth?

Si ok lo so, potrebbe essere una rottura di scatole, ma per onestà intellettuale ti voglio condividere alcune problematiche riscontrate nella realizzazione di questo progetto che non troverai in altri tutorial.

Durante il nostro lavoro di realizzazione del progetto abbiamo riscontrato diverse difficoltà tecniche relative al funzionamento della connessione e trasmissione bluetooth.

In primo luogo anche se il modulo HC-05 veniva individuato dall’app e accoppiata al dispositivo mobile, non riceveva tuttavia il pacchetto trasmesso.

A tal punto abbiamo provato ad adottare una diversa soluzione elettronica adottando l’uso di un partitore di tensione di tipo resistivo, che prelevasse il segnale a ⅔ del suo valore nominale.

Facendo ripetute prove ci siamo accorti che la trasmissione dei dati avveniva solo quando i cavi di ricezione erano collegato al piedino di trasmissione e viceversa.

Perciò i collegamenti andavano invertiti.

Si è inoltre osservato che il modulo HC-05 funzionava se i collegamenti di ricezione e trasmissione si trovavano su i piedini 10 e 11.

Una volta stabilità la connessione bluetooth tra dispositivo mobile e la scheda Arduino tramite modulo HC-05, i dati ricevuti si presentavo con un formato di caratteri anomalo.


Fino a quando non ci sbatti la testa,
la soluzione non può saltar fuori!

Come controllare da remoto i motori elettrici con Arduino Bluetooth?

Al tal punto abbiamo constatato che una connessione bluetooth impostata a 38400 baud si rilevava troppo eccessiva per la lettura seriale del modulo HC-05, perciò la velocità di trasmissione del modulo bluetooth è stata equiparata a quella della porta seriale che di default di Arduino a 9600 baud.

Questo accorgimento ha permesso di realizzare una corretta trasmissione bluetooth.

Giunti alla corretta trasmissione del carattere, il passo successivo è stato il ricercare una modalità opportuna di settare il dato ricevuto all’interno di una variabile di appoggio, realizzato tramite la funzione .read() della seriale bluetooth della libreria Software Serial.

Per verificare la corretta ricezione del dato si sono utilizzate luci led per verificarne l’effettiva esecuzione del comando.

Collegati i motori, sono state scritte quelle parti di codice che a seconda della lettera letta dal modulo HC-05 aziona i motori nelle modalità di direzione prestabilite.

La connessione bluetooth alle volte è un po’ debole e può esser persa facilmente se il dispositivo non viene utilizzato, il che rende il modulo HC-05 utile solo a scopo di progetti amatoriali.

Il circuito è alimentato con un’alimentazione a 9 Volt che oltre ad alimentare la scheda Arduino, fornisce energia a un modulo bluetooth funzionante con almeno 3,3 Volt e 2(o 4)Motori DC da 9 Volt, che contribuiscono a ridurre drasticamente l’autonomia e la potenza degli stessi.

Il peso della circuiteria, della basetta di appoggio, della breadboard e dei motori stessi, creano un problema di tipo meccanico che ne impedisce il movimento.

Inoltre interviene anche un problema d’inerzia che impedisce di superare “l’attrito statico” del modellino, mentre con “l’attrito dinamico” che risulta molto minore, si origina uno spostamento minimo.

Link utili integrativi per il progetto

In alternativa potete consultare anche le risorse all’articolo in programmare è (quasi) un super potere!

Do you like the Article?


Prev Post
Next Post
Copied!