Open top menu
terça-feira, 10 de fevereiro de 2015


Hoje vamos apresentar um projeto de automação com o Automation Shield, Bluetooh JY-MCU / HC-06 e um aplicativo de exemplo Android para acionamento das saídas.

Aplicativo Android para acionamento da placa
A nova versão do aplicativo mostra o estado das saídas da placa. A melhoria do código fonte do arduino é armazenar na EEPROM os últimos comandos do usuário, dessa forma, quando  a placa for reiniciada, ela será reestabelicida com os últimos comandos enviados pelo usuário.

A placa JY-MCU ou HC-06 Bluetooth pode ser encontrada com barra de terminais para conexão e faixa de tensão de alimentação entre 3.6 e 6V. Essa versão pode ser alimentada através do pino OUT + 5V do Shield.








Ou em uma versão sem barra de terminais e tensão de alimentação em 3.3V. Essa versão só pode ser alimentada através do pino 3V3 do Shield e deve ser utilizado um divisor de tensão entre os pinos TX (Arduino) e RX (módulo)




Lista de componentes
1 - Arduino NANO V3.0
1 - Placa Nano Automation Shield, a venda em nossa loja virtual.
1 - Fonte 12V x 3A.
1 - Placa JY-MCU ou HC-06 Bluetooth.
4 - Fios com conectores MODU para conexão do projeto.
1- Fita RGB
1 -  Resistor de 10K.
1 - Resistor de 20K.

Preparação da placa Bluetooh sem terminais.

Soldagem dos pinos.


Placa pronta com termo retrátil para isolamento das conexões.



GND - Preto
3,3V - Vermelho 
TX- Verde 
RX - Marrom 


Conexões do projeto

A conexão deve ser feita TX <-> RX entre o shield de Automação e a placa Bluetooh  JY-MCU. Se o módulo bluetooth trabalhar apenas com nível de sinal de 3,3 V será necessário utilizar um divisor de tensão no pino RX para não danificar o módulo. Conecte o pino TX do arduino com o pino RX do módulo com um resistor de 10K e o pino RX do módulo com um resistor de 20K ao GND.

Conexões das saídas

Código fonte do projeto
O código fonte do projeto é bem simples, dentro do loop do programa, ficamos esperando algum comando que venha pela porta serial, o caracter "|" define o início e fim do protocolo de envio de comandos. Durante o desenvolvimento, podemos testar nosso programa através do console serial do Arduino, e enviar os comandos, conforme exemplo abaixo:

|D11| Envia comando: Digital - Saida 1 - Sinal 1 -> Ligar Saida 1
|D10| Envia comando: Digital - Saida 1 - Sinal 0 -> Desligar Saida 1

|D21| Envia comando: Digital - Saida 2 - Sinal 1 -> Ligar Saida 2
|D20| Envia comando: Digital - Saida 2 - Sinal 0 -> Desligar Saida 2

|D31|
Envia comando: Digital - Saida 3 - Sinal 1 -> Ligar Saida 3
|D30|
Envia comando: Digital - Saida 3 - Sinal 0 -> Desligar Saida  3

|D41|
Envia comando: Digital - Saida 4 - Sinal 1 -> Ligar Saida 4
|D40|
Envia comando: Digital - Saida 4 - Sinal 0 -> Desligar Saida 4

|A60|
Envia comando: LED Vermelho - 0 (Desligado) -> Desligar Led Vermelho
|A69|
Envia comando: LED Vermelho - 9 (Maximo) -> Maxima pontencia Led Vermelho

O nível de potencia pode ser variado entre 0 (desligado) e 9 (máximo)
Led Verde
|A50|  ate |A59| 
Led Azul
|A30| até |A39|

Para evitar falhas no processo de upload, desconecte o Arduino do Shield ou remova as conexões com o Bluetooth. 

Código fonte Arduino

/*
  Software serial multple serial test

    https://drive.google.com/file/d/0B0t-Nu1Eo1b8OFdOWkg5QkMwMVE/view?usp=sharing

  VCC 3V
  GND  GND
  TX  RX
  RX  TX

  Protocolo
  |D21|
  |D20|

  |A64|

  Versão 1.1 -> Incluido persitencia de comandos na EEPROM e WACHTDOG

  */


#include <EEPROM.h>
#include <avr/wdt.h>

#define PIN_RED 6
#define PIN_GREEN 5
#define PIN_BLUE 3

int MemSaveSaida1 = 1;
int MemSaveSaida2 = 2;
int MemSaveSaida3 = 3;
int MemSaveSaida4 = 4;
int MemSaveRed    = 5;
int MemSaveBlue   = 6;
int MemSaveGreen  = 7;

int ValueSaveSaida1 = 0;
int ValueSaveSaida2 = 0;
int ValueSaveSaida3 = 0;
int ValueSaveSaida4 = 0;
int ValueSaveRed    = 0;
int ValueSaveBlue   = 0;
int ValueSaveGreen  = 0;

int inicioucomando;
String comando = "";

void setup()
{

  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);

  inicioucomando = 0;
  comando = "";

  Serial.begin(9600);

  ValueSaveSaida1 = EEPROM.read(MemSaveSaida1);
  ValueSaveSaida2 = EEPROM.read(MemSaveSaida2);
  ValueSaveSaida3 = EEPROM.read(MemSaveSaida3);
  ValueSaveSaida4 = EEPROM.read(MemSaveSaida4);
  ValueSaveRed = EEPROM.read(MemSaveRed);
  ValueSaveBlue = EEPROM.read(MemSaveBlue);
  ValueSaveGreen = EEPROM.read(MemSaveGreen);

  digitalWrite(A0, ValueSaveSaida1);
  digitalWrite(A1, ValueSaveSaida2);
  digitalWrite(A2, ValueSaveSaida3);
  digitalWrite(A3, ValueSaveSaida4);

  analogWrite(5, ValueSaveRed);
  analogWrite(6, ValueSaveGreen);
  analogWrite(3, ValueSaveBlue);

  wdt_enable(WDTO_8S); //Watchdog 8 Segundos
}

void loop()
{
  aguardacomandos();
  wdt_reset(); //Reset WatchDog
  RetornaComandos();

}

void aguardacomandos()
{
  char ch;
  while (Serial.available()) {
    ch = Serial.read();
    if (ch == '|')
    {
      if (inicioucomando == 1)
      {
        inicioucomando = 0;
        disparacomando();
      }
      else
      {
        inicioucomando = 1;
      }
    }
    else
    {
      comando.concat(ch);
    }
  }
}

void disparacomando()
{

  Serial.println(comando);
  if (comando[0] == 'D')
  {
    int port = (comando[1] - '0');
    int value = (comando[2] - '0');

    if (port == 1)
    {
      ValueSaveSaida1 = value;
      EEPROM.write(MemSaveSaida1, ValueSaveSaida1);
      digitalWrite(A0, ValueSaveSaida1);
    }
    else if (port == 2)
    {
      ValueSaveSaida2 = value;
      EEPROM.write(MemSaveSaida2, ValueSaveSaida2);
      digitalWrite(A1, ValueSaveSaida2);
    }
    else if (port == 3)
    {
      ValueSaveSaida3 = value;
      EEPROM.write(MemSaveSaida3, ValueSaveSaida3);
      digitalWrite(A2, ValueSaveSaida3);
    }
    else if (port == 4)
    {
      ValueSaveSaida4 = value;
      EEPROM.write(MemSaveSaida4, ValueSaveSaida4);
      digitalWrite(A3, ValueSaveSaida4);
    }
  }
  else if (comando[0] == 'A')
  {
    int port = (comando[1] - '0');
    int value = (comando[2] - '0');
    value = value * 28;

    if ( port == 6 )
    {
      ValueSaveRed = value;
      EEPROM.write(MemSaveRed, ValueSaveRed);
      analogWrite(port, value);
    }
    else if ( port == 5 )
    {
      ValueSaveGreen = value;
      EEPROM.write(MemSaveGreen, ValueSaveGreen);
      analogWrite(port, value);
    }
    else if ( port == 3 )
    {
      ValueSaveBlue = value;
      EEPROM.write(MemSaveBlue, ValueSaveBlue);
      analogWrite(port, value);
    }
  }
  else
  {
    Serial.println("Error");
  }
  comando = "";
}

void RetornaComandos()
{
  String retorno = "|COMANDOS#";
  retorno.concat(ValueSaveSaida1);
  retorno.concat("#");
  retorno.concat(ValueSaveSaida2);
  retorno.concat("#");
  retorno.concat(ValueSaveSaida3);
  retorno.concat("#");
  retorno.concat(ValueSaveSaida4);
  retorno.concat("#");
  retorno.concat(ValueSaveRed);
  retorno.concat("#");
  retorno.concat(ValueSaveGreen);
  retorno.concat("#");
  retorno.concat(ValueSaveBlue);
  retorno.concat("#");

  Serial.println(retorno);
}



Código fonte Android

Não foi criada uma tela para seleção do dispositivo pareado para conexão. O programa busca pelo nome default (Linvor) ou (HC-06)  da placa JY-MCU para conexão. Se o dispositivo for renomeado ou estiver com nome diferente de Linvor ou HC-06, não ocorrerá a conexão, sendo então necessário renomear o dispositivo para um dos dois nome antes dos testes no aplicativo de exemplo.





O código fonte está disponível no github em: https://github.com/sergiomokshin/AutomationShield/tree/master/Bluetooth
  
A senha padrão do bluetooth é 1234, 123 ou 0000. Ele precisa ser pareado com o celular antes da abertura e utilização do aplicativo.

No vídeo abaixo podemos ver todo o processo de pareamento e acesso da placa pelo aplicativo.


A placa JY-MCU Bluetooth não é compatível com alguns dispositivos IPhone e IPad, o exemplo de hardware e software desse projeto é compatível apenas com dispositivos com sistema operacional Android.
Tagged

2 comentários :

  1. Bom dia! Gostaria de aprender fazer software de aplicativo vocês conhece uma escola boa e que seja curso on-line
    obrigado

    ResponderExcluir
    Respostas
    1. Boa Tarde, não conheço escolas, mas um bom começo é iniciar lendo tutoriais, exemplos e apostilas. Na internet voce encontra muito material e no site automacaolivre alguns exemplos bacanas.

      Excluir