Sunday, May 31, 2015

Teste - comunicação entre Arduino e Simulink

O teste descrito a seguir envolveu a tentativa de comunicação entre a plataforma Arduino e o software Matlab, mais especificamente com a ferramenta Simulink. No teste, foram utilizados uma placa Arduino Mega 2560, software Matlab/Simulink na versão 2015 e componentes eletrônicos como apresentado na figura a seguir:



. 
Inicialmente, foi feita a instalação da biblioteca Simulink Support Package for Arduino Hardware, por meio de tutorial disponibilizado em aula. Em seguida, o seguinte modelo foi implementado no Simulink:

Alguns detalhes sobre os blocos utilizados:

  • Tempo de amostragem do sinal recebido do Arduino: 0.01 segundos.
  • Ganho K: 0.25.
  • Limites de saturação: 0 e 1
Em suma, o modelo apresentado faz o controle de LEDs a partir de valor lido em um potenciômetro. Enquanto um LED verde (porta 6 do Arduino) tinha sua luminosidade alterada a partir do valor do potenciômetro, um LED vermelho (porta 13 do Arduino) era acendido quando o valor lido se aproximava de zero. Além disso, os valores lidos a partir do potenciômetro (porta A0 do Arduino) são registrados em uma gráfico. O resultado final pode ser visto a seguir:

Em linhas gerais, o teste foi bem sucedido, pois a comunicação foi implementada como proposto e foi possível enviar e receber dados da plataforma Arduino por meio do Simulink. Contudo, como é necessário que o Simulink esteja em execução para que o código seja executado no Arduino, tal opção não aparenta ser viável para o projeto em questão. De qualquer forma, a comunicação entre eles pode ser bastante útil caso seja necessário, por exemplo, encontrar parâmetros de algum sistema de controle implementado no projeto - no caso, recursos do Matlab/Simulink poderiam ser bastante úteis.

Saturday, May 30, 2015

Teste - comunicação bluetooth


Com o objetivo de implementar a transferência de dados entre o microcontrolador utilizado no projeto e uma central, optamos pelo método bluetooth de comunicação. Bluetooth é um protocolo padrão de comunicação primariamente projetado para baixo consumo de energia com baixo alcance, baseado em microchips transmissores de baixo custo em cada dispositivo (wiki).


Tentativa 1: utilizamos um módulo Bluetooth Bee Tinyos (http://www.tinyosshop.com/index.php?route=product/product&product_id=338)
Configuração do sistema: Arduino UNO (1), Shield XBEE (2), Breakout FTDI (3), Módulo Bluetooth Bee Tinyos (4)

Esquemático do módulo Bluetooth Bee Tinyos


Primeiramente, tentou-se utilizar o módulo com o Arduino através de uma XBEE shield compatível. Através de comunicação serial, esperava-se configurar o módulo nos seguintes parâmetros:
  1. Nome do dispositivo
  2. Modo de operação para slave
  3. Alteração do PIN

Caso a configuração fosse bem-sucedida, o módulo Bluetooth seria visível a outros dispositivos e os valores recebidos seriam enviados ao Arduino através das portas 6 e 7, configuradas respectivamente como RX e TX por meio da biblioteca SoftwareSerial. Com os dados recebidos de um celular, por exemplo, esperava-se controlar o LED do pino 13.
Porém, a configuração inicial não funcionou e o módulo continuou com as configurações padrões, sendo reconhecido como “Bluetooth Bee” na hora de parear com o celular. Além disso, o celular não foi capaz de se conectar ao módulo bluetooth (reconhecido como “Bluetooth Bee” e PIN 0000).

No site do fornecedor, um dos tópicos (http://www.tinyosshop.com/index.php?route=information/news&news_id=14) é justamente a configuração do módulo. Para tanto, é necessário utilizar um conversor FTDI-USB (breakout vermelha) para conectar o módulo bluetooth ao computador. Seguindo os passos do tutorial presente no link, não foi possível passar do passo 5 (leitura das configurações atuais do módulo).

Numa terceira tentativa de se conectar ao módulo, utilizou-se o monitor serial do Arduino (configurado para um Arduino Pro Mini ATMega 3.3V 8MHz na porta COM5 baudrate 38400 e com opção “Ambos NL, CR” selecionada). Com o envio de “AT” pelo monitor serial, a resposta deveria ser “OK”, o que não ocorreu.  


Módulo bluetooth
Arduino
breakout
3.3V (Pino 1)
3.3V
3.3V
TX (Pino 2)
Pino 6
RXD
RX (Pino 3)
Pino 7
TXD
GND
GND
GND


Em suma, devido às dificuldades apresentadas, decidimos encerrar a sessão de testes e buscar por ajuda de terceiros ou por outros componentes, para entender melhor o motivo dos resultados obtidos e reverter os problemas descritos anteriormente.

Saturday, May 23, 2015

Teste - sensor de umidade

Mais uma característica a ser detectada do ambiente é a umidade. Para isso, o sensor disponível foi o DHT11 (sensor de umidade/temperatura), acoplado em um módulo para facilitar seu uso.
Em linhas gerais, o DHT11 utiliza um sensor de umidade e temperatura e um termistor para avaliar o ar do ambiente. O sensor é capaz de registrar a umidade do ar no intervalo de 20 a 90%, com precisão de 5%, e temperatura entre 0 e 50ºC, com precisão de 2ºC.
Com alimentação de 3-5.5 V, ele possui 4 terminais, um deles não utilizado e simplificado no módulo. O sinal pode ser enviado a uma porta digital do microcontrolador, sendo utilizado a seguinte conexão com o Arduino:



Uma biblioteca disponível na própria plataforma Arduino torna mais prático o uso do sensor. Com isso, o seguinte código foi compilado por meio da Arduino IDE:
//   FILE:  dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
//
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4

void setup(){
  Serial.begin(9600);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}

void loop(){
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN);    // READ DATA
  switch (chk){
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
 // DISPLAT DATA
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);

  delay(20000);
}
Por fim, os resultados obtidos na etapa de teste podem ser visualizados abaixo:

Tuesday, May 12, 2015

Teste - sensor de pressão/temperatura

Duas informações do ambiente que também serão registradas pelo dispositivo em desenvolvimento são a pressão atmosférica e a temperatura ambiente. Uma alternativa adequada para obter tais dados é o módulo desenvolvido pela Freetronics, contendo um MS5637.
Com alimentação de 2.3-5V, tal sensor é capaz de registrar a pressão atmosférica com uma resolução de 13 cm de ar, variando entre 1 e 200 kPa. Além disso, ele consegue registrar temperaturas entre -40 e +85 ºC, com uma resolução de 0.01 ºC, satisfazendo aos requisitos do projeto. A comunicação entre o sensor e um microcontrolador é feita via interface I²C, onde duas linhas de sinais (SDA e SCL) são suficientes para a transmissão de dados. Dessa forma, o módulo e o Arduino foram conectados como mostra a figura:

Há um biblioteca disponível para facilitar o uso do sensor pelo Arduino, que pode ser obtida aqui. Utilizando a BaroSensor, o seguinte código foi compilado por meio da Arduino IDE:
#include <Wire.h>
#include <BaroSensor.h>

void setup()
{
  Serial.begin(9600);
  BaroSensor.begin();
}

void loop()
{
  if(!BaroSensor.isOK()) {
    Serial.print("Sensor not Found/OK. Error: "); 
    Serial.println(BaroSensor.getError());
    BaroSensor.begin(); // Try to reinitialise the sensor if we can
  }
  else {
    Serial.print("Temperature: "); 
    Serial.println(BaroSensor.getTemperature());
    Serial.print("Pressure:    ");
    Serial.println(BaroSensor.getPressure());
  }
  delay(5000);
}

Os resultados obtidos a partir desse código podem ser visualizados abaixo, destacando-se a alta resolução do sistema:

Monday, May 11, 2015

Teste - sensor de luminosidade

Com o objetivo de identificar a luminosidade do ambiente ao seu redor, o projeto do dispositivo envolve o uso de um sensor de luminosidade. Para isso, foi obtido um módulo desenvolvido pela Freetronics com o TEMT6000, que consiste basicamente em um fototransistor NPN. 
Com alimentação de 3-5.5 V, o módulo pode ser alimentado por uma das saídas de 5V do Arduino. Dessa forma, a saída do módulo, fornece um valor entre 0 e 5V - quanto mais iluminado o ambiente, mais próximo o valor de saída será dos 5V - que pode ser conectado a uma entrada analógica do microcontrolador. As conexões do sistema podem ser visualizadas a seguir.
Dessa forma, utilizando a Arduino IDE, o código abaixo foi compilado, com o objetivo de fazer a leitura da luminosidade do ambiente:
int lightLevel; 

void setup()
{
  Serial.begin(38400);
}

void loop() 
{
  lightLevel = analogRead(A0);
  Serial.println(lightLevel, DEC);
  delay(2000);
}
Por fim, as condições do ambiente foram modificadas  (utilizando uma lanterna e uma caixa) para testar a resposta do sensor, que se mostrou satisfatório diante dos testes realizados. Os resultados obtidos podem ser visualizados na tela a seguir:
(Valores entre 0 e 1024 - quanto maior o valor medido, mais iluminado o ambiente)

Friday, May 8, 2015

Objetivos do projeto

Esse blog foi criado com o objetivo de registrar as etapas de desenvolvimento de produto do grupo composto por Adelmo Eloy, Gian Vieira, Luiz Tapparo, Mauricio Baiocco e Vitor Higuti, proposto na disciplina Desenvolvimento de Produtos Mecatrônicos, oferecida na EESC-USP pelo professor Glauco Caurin.

O produto em questão consiste em desenvolver uma AWS - automatic weather station. Entre as principais características do produto, espera-se que ele tenha a capacidade de registrar, em tempo real, temperatura, luminosidade, pressão atmosférica, umidade, e localização geográfica de um determinado local e transmitir esses dados para a rede.

Cada etapa de evolução do projeto será registrada no blog, permitindo que se acompanhe a sua evolução, avanços, dificuldades e aprendizado obtidos.