São quatro leds que são controlados através do telefone celular com uma conexão bluetooth.
O projeto foi montando utilizando um microcontrolador ATMEGA328 com bootloader Arduino, e um módulo bluetooth HC-06.
O HC-06 funciona somente no modo escravo. Ele não se conecta a outros dispositivos, somente aceita conexões.
O funcionamento da conexão é através da comunição serial: RX e TX.
É possível enviar e receber informações entre o circuito e o dispositivo bluetooth conectado.
O módulo pode ser configurado alterando o seu nome, o PIN para pareamento e a velocidade de transmissão.
Pode-se configurar com o mesmo conectado ao Arduino em portas digitais configuradas para conexão serial com a biblioteca SoftwareSerial. A configuração é feita através de comandos AT.
Para configurar dessa forma, deve-se utilizar o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | /* BLUETOOTH - CONFIGURAÇÃO -COMANDO- -RESPOSTA- -FUNÇÃO- AT OK Teste de comunicação AT+VERSION OKlinvorV1.5 Mostra a versão do firmware AT+NAMExyz OKsetname Altera o nome do módulo AT+PIN1234 OKsetPIN Altera a senha do módulo AT+BAUD1 OK1200 Seta o baud rate em 1200 AT+BAUD2 OK2400 Seta o baud rate em 2400 AT+BAUD3 OK4800 Seta o baud rate em 4800 AT+BAUD4 OK9600 Seta o baud rate em 9600 AT+BAUD5 OK19200 Seta o baud rate em 19200 AT+BAUD6 OK38400 Seta o baud rate em 38400 AT+BAUD7 OK57600 Seta o baud rate em 57600 AT+BAUD8 OK115200 Seta o baud rate em 115200 AT+BAUD9 OK230400 Seta o baud rate em 230400 AT+BAUDA OK460800 Seta o baud rate em 460800 AT+BAUDB OK921600 Seta o baud rate em 921600 AT+BAUDC OK1382400 Seta o baud rate em 1382400 */ #include <SoftwareSerial.h> SoftwareSerial bluetooth(2, 3); //Módulo Bluetooth ligado aos pinos 2=RX e 3=TX void setup() { //Inicia a comunicação serial USB Serial.begin(9600); Serial.println("Comando AT:"); //Inicia a comunicação serial com o módulo bluetooth bluetooth.begin(9600); //JY-MCU v1.05 tem por padrão 9600 } void loop() { String command = ""; while (bluetooth.available()) { command += char(bluetooth.read()); delay(25); } if (command != "") { Serial.println(command); } if (Serial.available()) { delay(10); bluetooth.write(Serial.read()); } } |
Podemos também configurar o módulo bluetooth conectando-o diretamente a um módulo USB-TTL.
Dessa forma, basta apenas abrir um programa de conexão serial, podendo ser o próprio Monitor Serial da IDE Arduino. Lembrando que o RX do bluetooth deve ser conectado ao TX do módulo USB-TTL.
Após a configuração do módulo HC-06, é só conectar ao circuito e seguir com a programação.
No telefone celular Android, utilizei para testes de comunicação o aplicativo Bluetooth Terminal.
Primeiro efetue o pareamento do telefone com o módulo HC-06, e em seguida conecte o aplicativo. O PIN padrão de conexão é 1234.
O módulo bluetooth funciona com uma tensão de 3,6v a 6v. E sua tensão de comunicação RX é de 3,3v. Porém em todos os meus testes, a comunicação só funcionou corretamente quando não utilizei divisor de tensão no RX.
Segue a foto do circuito montado na protoboard, o esquema elétrico e o código-fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | /*--------------------------------------------------------- Programa : CONTROLE BLUETOOTH HC-06 Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 02/12/2017 ---------------------------------------------------------*/ #include <SoftwareSerial.h> //Biblioteca da SoftwareSerial [ https://www.arduino.cc/en/Reference/SoftwareSerial ] /*----- VARIÁVEIS -----*/ SoftwareSerial BT(2, 3); //Declara BT como uma SoftwareSerial, utilizando os pinos 2=RX e 3=TX const int leds[4] = {9, 10, 11, 12}; //Pinos dos leds boolean ledState[4] = {0, 0, 0, 0}; //Variável para controle do estado dos leds. Ligado/Desligado /*----- SETUP -----*/ void setup() { //Configura os pinos dos leds for (int i = 0; i < 4; i++) { pinMode(leds[i], OUTPUT); } //Inicializa a SoftwareSerial BT.begin(9600); //Exibe a mensagem informando os comandos BT.println(":: CONTROLE BLUETOOTH HC-06 ::"); BT.println("Comandos:"); BT.println(" 1 : Led Vermelho"); BT.println(" 2 : Led Verde"); BT.println(" 3 : Led Azul"); BT.println(" 4 : Led Amarelo"); BT.println(" 5 : Pisca todos"); BT.println(" 6 : Sequencial"); BT.println("Digite o comando:"); } /*----- LOOP PRINCIPAL -----*/ void loop() { //Variavel para receber o comando da serial via bluetooth String txtSerial = ""; //Efetua a leitura do valor da serial BT while (BT.available() > 0) { txtSerial += String(char(BT.read())); delay(25); } //Verifica o valor da variável txtSerial if (txtSerial == "1") { SwitchLed(0); } else if (txtSerial == "2") { SwitchLed(1); } else if (txtSerial == "3") { SwitchLed(2); } else if (txtSerial == "4") { SwitchLed(3); } else if (txtSerial == "5") { BlinkLeds(); } else if (txtSerial == "6") { SequenceLeds(); } if (txtSerial != "") { BT.println("Digite o comando:"); } } /*----- LIGA/DESLIGA LED -----*/ void SwitchLed(int led) { switch (led) { case 0: ledState[0] = !ledState[0]; digitalWrite(leds[0], ledState[0]); if (ledState[0] == 1) { BT.println(">> LED Vermelho: ON"); } else { BT.println(">> LED Vermelho: OFF"); } break; case 1: ledState[1] = !ledState[1]; digitalWrite(leds[1], ledState[1]); if (ledState[1] == 1) { BT.println(">> LED Verde: ON"); } else { BT.println(">> LED Verde: OFF"); } break; case 2: ledState[2] = !ledState[2]; digitalWrite(leds[2], ledState[2]); if (ledState[2] == 1) { BT.println(">> LED Azul: ON"); } else { BT.println(">> LED Azul: OFF"); } break; case 3: ledState[3] = !ledState[3]; digitalWrite(leds[3], ledState[3]); if (ledState[3] == 1) { BT.println(">> LED Amarelo: ON"); } else { BT.println(">> LED Amarelo: OFF"); } break; } } /*----- PISCAR TODOS OS LEDS -----*/ void BlinkLeds() { BT.println(">> Piscando Leds"); for (int i = 0; i < 10; i++) { //Acende todos for (int a = 0; a < 4; a++) { digitalWrite(leds[a], HIGH); } delay(200); //Apaga todos for (int a = 0; a < 4; a++) { digitalWrite(leds[a], LOW); } delay(200); } } /*----- SEQUENCIAL DE LEDS -----*/ void SequenceLeds() { BT.println(">> Sequencial ativado"); //Apaga todos for (int a = 0; a < 4; a++) { digitalWrite(leds[a], LOW); } for (int i = 0; i < 15; i++) { //Direita (vai) for (int a = 1; a < 4; a++) { digitalWrite(leds[a], HIGH); delay(80); digitalWrite(leds[a], LOW); } //Esquerda (volta) for (int a = 2; a >= 0; a--) { digitalWrite(leds[a], HIGH); delay(80); digitalWrite(leds[a], LOW); } } } |
Nenhum comentário:
Postar um comentário