Laboratório Digital - comunicação com um smartphone via Bluetooth

Nas duas primeiras revisões ( 1 , 2 ), apresentamos a composição e os principais recursos do kit NR05 Digital Laboratory do alfabeto da série Electronics Worker .



Dissemos repetidamente que as possibilidades de recrutamento não se limitam às experiências e projetos que incluem o manual de treinamento. As possibilidades do conjunto são muito maiores!

Vamos considerar como você pode implementar o controle de dispositivos executivos em seu smartphone ou tablet usando o Laboratório Digital.

A comunicação entre o smartphone e o módulo Arduino instalado na placa de expansão será implementada usando a tecnologia Bluetooth. Obviamente, isso limitará a capacidade de controlar sem fio a distância de cerca de 10 metros, mas em casa, muitas vezes não é necessário. Com base nessa tecnologia, você pode controlar com êxito robôs simples ou dispositivos de automação residencial, e seu telefone ou smartphone funcionará como um painel de controle universal gratuito que pode ser facilmente reprogramado para melhor resolver a tarefa.

Na Internet, você pode encontrar vários projetos que permitem conectar o Arduino a um telefone via Bluetooth, e esses projetos certamente ajudarão a dominar o princípio dessa comunicação, mas sua principal desvantagem é a incapacidade de adaptar a funcionalidade do programa de controle e sua aparência às necessidades específicas do usuário.

Seguiremos o caminho de um pouco mais complicado, mas mais universal - escreveremos programas para o telefone e para o Arduino por conta própria. Isso o ajudará a entender o princípio de escrever esses aplicativos e usá-lo em seu desenvolvimento.
Primeiro, vamos explicar em que princípio se baseia a conexão que usaremos. Como você sabe, quando o módulo Arduino está conectado a um computador, uma porta serial virtual - uma porta COM - é configurada no computador. É usado para fazer upload de esboços para o Arduino, bem como para trocar informações entre um computador e o microcontrolador Arduino. Também na placa do Arduino, há dois contatos combinados com os pinos D1 e D0 e designados RX e TX - respectivamente, a transmissão (Receber) e a recepção (Transmitir) da interface UART padrão.

Depois de conectar o adaptador Bluetooth-UART a esses contatos (o módulo HC-05 acabou por estar à nossa disposição, ele não está incluído no kit), obtemos um canal de comunicação de hardware entre o dispositivo conectado via adaptador Bluetooth ao adaptador e o Arduino.
Assim, escrevendo informações de um dispositivo para a porta serial e lendo-as de outro (isso pode ser feito em duas direções), podemos organizar a troca de informações entre dispositivos. A velocidade dessa troca entre o Arduino e um smartphone no caso de usar o módulo HC-05 será de 57600 baud.

Para maior clareza, usamos um LED RGB e um servoconversor, ambos controlados por sinais PWM.

Aqui está o diagrama de conexão dos componentes do projeto:



Para controlar os elementos executivos, transferiremos do smartphone uma determinada letra que determina a qual elemento o comando se destina e um número que corresponde ao parâmetro de comando. O parâmetro pode ser uma figura que determina se algum atuador deve ser ligado ou desligado ou uma figura que define o parâmetro PWM.

Nós fornecemos o texto do programa para o Arduino. O programa recebe dados do adaptador Bluetooth, descriptografa-os e executa as ações necessárias: liga ou desliga o LED, ajusta seu brilho ou o ângulo de rotação do servo-eixo.

O texto está equipado com um número suficiente de comentários para entender a lógica do programa:

Spoiler
// LCD-
#include <Servo.h>
#include <LiquidCrystal.h>
// 5
// get_key
#define NUM_KEYS 5
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};
// LCD-
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
//
Servo servo;

int btValue; // BT-
char command; // , COM-

void setup() {

// COM- bluetooth, , -
Serial.begin(57600);
Serial.flush();
Serial.setTimeout(4);
// LCD (16 , 2 )
lcd.begin(16, 2);
lcd.clear();
lcd.print(«Master Kit-READY»);
delay(2000);
lcd.clear();
// 3-
servo.attach(3);

pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);

}

void loop() {

int key = get_key(); // ,
// , COM-
//
if (key > 0){
Serial.print(key);
delay(500);
}

// , bluetooth,
if (Serial.available() > 0) {
// ()
command = Serial.read();
// ( )
btValue = Serial.parseInt();

// LCD , bluetooth
lcd.setCursor(0,0);
lcd.print(command);
lcd.print(' ');
lcd.print(btValue);
lcd.print(" ");

delay(10);

switch (command) {
case 'P': // P,
pinSwitch(btValue);
break;
case 'S': // S — c 1 ( )
pwm5(btValue);
break;
case 'M': // — 2 ( )
servo3(btValue);
break;


}
}
}
//
void pinSwitch(int Pin){
digitalWrite(Pin, !digitalRead(Pin));
}
// 5 ( )
void pwm5(int pwmValue){
analogWrite(5, pwmValue);
}
// 3
void servo3(int angleValue){
int angle = map(angleValue, 0, 180, 5, 180);
servo.write(angle);
}
//
int get_key()
{
int input = analogRead(A6);
int k;
for(k = 0; k < NUM_KEYS; k++)
if(input < adcKeyVal[k])
return k + 1;
return 0;
}



Agora, vamos dar um programa para um smartphone, que deve transmitir um comando com um parâmetro. Usaremos os recursos do projeto MIT App Inventor para isso.

O MIT App Inventor é um ambiente de programação desenvolvido no Instituto de Tecnologia de Massachusetts (MIT). É usado para desenvolver aplicativos para dispositivos móveis (smartphones e tablets) em execução no sistema operacional Android.

Esta não é uma linguagem de programação no sentido geralmente aceito; ao usá-la, você não precisa escrever código de texto na forma de linhas. O programa é formado na forma de blocos exibidos na tela, que são simplesmente arrastados e empilhados como quebra-cabeças. Se os blocos se encaixam de acordo com a lógica do programa, eles "se unem"; se não se encaixam, não podem ser conectados. Inicialmente, esse método de programação foi desenvolvido para educar os alunos, por isso é bastante simples de aprender. Obviamente, como em todos os idiomas, ele tem suas próprias sutilezas e truques, mas o site tem informações e exemplos suficientes para dominar o idioma. Muitos programas estão disponíveis no site em domínio público.

Para usar o ambiente de programação do App Inventor, disponível em ai2.appinventor.mit.edu, é necessário ter uma conta do Google através da qual é realizada a autorização no site do projeto. O programa é criado em qualquer navegador. O computador executando este navegador deve estar constantemente conectado à Internet. O smartphone ou tablet no qual o programa criado usando o App Inventor será instalado deve ter uma versão do sistema operacional Android de pelo menos 4.0.

No navegador, você cria o design (aparência) e a lógica do programa na forma de blocos, no mesmo local em que o projeto final é compilado em um arquivo executável com a extensão apk. Este arquivo pode ser baixado e executado em um dispositivo móvel de várias maneiras. Talvez o mais conveniente desses métodos seja instalar o aplicativo MIT AI2 Companion no dispositivo móvel (no Play Market). O App Inventor gera um código QR que contém um link para o aplicativo que você criou e o AI2 Companion o lê e instala (ou atualiza). Você pode até desenhar e fazer upload de seu próprio ícone para iniciar seu aplicativo. Assim, o App Inventor permite criar aplicativos totalmente funcionais e intuitivos para Android. Embora o código deles não seja o ideal, mas a conveniência,a simplicidade e a velocidade de criação de tais aplicativos, em muitos casos, compensam essa desvantagem.

O aplicativo que funciona em nosso projeto é carregado na galeria do MIT AI2 Appiventor sob o nome BToothHC05.
O aplicativo permite encontrar um dispositivo Bluetooth, conectar-se a ele, gerar comandos com parâmetros e enviá-los ao dispositivo conectado, ler dados do dispositivo e exibir o número do botão pressionado na placa de expansão.

O design da tela se parece com a figura a seguir:



Existem elementos (quadrados verdes que simbolizam as imagens inseridas) que não possuem funcionalidade, mas servem como separadores para melhorar a aparência.

Se você foi ao site do AppInventor e está no ambiente de programação no modo Designer, quando clicar com o botão direito do mouse no elemento de design correspondente, verá as propriedades à direita. Depois de mudar para o modo Blocos, você pode ver todos os blocos do aplicativo em desenvolvimento.

De fato, quase todos os blocos são manipuladores de eventos: pressionar um botão na tela de toque, mudar o controle deslizante, acionar um timer, alterar a inclinação do telefone (sim, quase todos os sensores de um dispositivo móvel podem ser usados ​​no App Inventor!).

Considere o objetivo funcional de cada bloco.



Nesse bloco, quando você clica no botão da tela Conectar / Desconectar (evento Button4Connect.Click), o dispositivo Bluetooth é desconectado (chame BluetoothClient1.Disconnect) se já estiver conectado (BluetoothClient1.IsConnected), o texto no botão mudará para “Disconnected” e sua cor mudará para cinza ou chamando a lista de possíveis dispositivos para conectar (ListPicker1.Open) se não houver conexão. Como você pode ver, o bloco é bastante legível do ponto de vista de um programador iniciante!



Nestes três blocos (de cima para baixo):

- atribua uma variável global (todos os blocos “verão”) o switch1 para alternar os modos de operação: controle deslizante ou inclinação;
- ao chamar a lista de dispositivos ListPicker1 para conexão, queremos exibir seus endereços e nomes;
- ao escolher um dispositivo na lista ListPicker1, conecte-o, altere a cor do botão e exiba o texto Conectado ao nome do dispositivo. Nome do dispositivo é formado a partir de uma longa sequência de caracteres; São tirados 8 caracteres a partir do dia 18.



Os três blocos mostrados acima enviam pela conexão estabelecida os caracteres “P5”, “P9” e “P6”, que devem ativar ou desativar a cor vermelha, verde ou azul do LED, respectivamente.



Quando o controle deslizante Slider1, que controla o brilho da cor vermelha do LED, é deslocado, esse bloco envia o símbolo "S" e os números correspondentes à posição do controle deslizante.



Quando o Slider2, que controla o servo, é deslocado, se o modo correspondente estiver ativado (switch1 = 0), enviamos o caractere M e a posição do slider.



Se o modo de operação do sensor de inclinação estiver ativado, a unidade enviará M e um ângulo de inclinação de + 90 graus para controlar o servoconversor.



Esta unidade alterna os modos de operação do servo do sensor deslizante ou de inclinação e, consequentemente, altera o texto no botão (Texto) e sua cor (BackgroundColor).



Esses dois blocos são acionados por um evento de timer. O primeiro bloco (Clock1) a cada 0,1 segundos (esse intervalo é definido nas propriedades do timer do Clock1) verifica se há dados sobre se o botão na placa de expansão foi pressionado. Se o botão foi pressionado, em 1 segundo (segundo bloco - Relógio2), as informações sobre o número do botão pressionado serão exibidas na tela do smartphone.
Agora, veremos o vídeo como o LED e o servo controle do smartphone de acordo com nossos programas realmente acontecem.



Da mesma forma, um número suficientemente grande de atuadores conectados ao Arduino pode ser controlado. Isso não exige muito trabalho do programador ao usar o AppInventor, e a programação do Arduino é bastante simples e clara. Você pode adicionar ou remover facilmente blocos de programas desnecessários e obter a funcionalidade necessária.
Como você pode ver neste material, a placa de expansão do kit Digital Laboratory permite que você use os módulos complementares do Arduino de maneira conveniente e visual.

Aplicação

Introdução ao ambiente de programação do MIT AppInventor.

Como já escrevemos, para trabalhar no projeto AppInventor, você precisa de uma Conta do Google. Se você possui um smartphone no Android, provavelmente já possui uma conta. Caso contrário, você pode obtê-lo acessando o Google no seguinte link .

Em seguida, acesse o site do AppInventor e clique no link Criar aplicativos !, localizado no canto superior direito da página principal do site, no site do ambiente de programação.

Como ilustração, abaixo está um link para um pequeno vídeo que demonstra a criação de um programa simples que exibe texto quando você clica em um botão formado na tela de toque de um smartphone.

Source: https://habr.com/ru/post/pt391383/


All Articles