MPU-6050 com MATLAB


Os sensores IMU são um dos tipos mais comuns e mais confiáveis de sensores usados ​​hoje em todos os tipos de aparelhos eletrônicos. Os sensores da IMU (Inertia Measurement Unit) nos ajudam a obter a atitude de um objeto ligado ao sensor no espaço tridimensional. 


Esses sensores fornecem valores que geralmente são transformados em ângulos para nos ajudar a determinar sua atitude.Eles são usados ​​em smartphones para detectar sua orientação ou em aparelhos wearable como o Fit Bit que usam sensores IMU para rastrear o movimento. Os sensores IMU normalmente consistem em duas ou mais partes. Listando-os por prioridade são o acelerômetro, o giroscópio, o magnetômetro e o altímetro. O MPU 6050 é um 6 DOF (Degrees of Freedom) ou um sensor de IMU de seis eixos, o que significa que ele fornece seis valores como saída. Três valores do acelerômetro e três do giroscópio. O MPU 6050 é um sensor baseado na tecnologia MEMS (Micro Electro Mechanical Systems).
Um acelerômetro funciona com o princípio do efeito piezoelétrico. Imagine uma caixa com uma bola pequena dentro dela onde as paredes desta caixa são feitas com cristais piezoelétricos e, quando inclinamos essa caixa, a bola é forçada a se mover na direção da inclinação devido à gravidade. Existem três pares de paredes opostas nessa caixa onde cada par corresponde a um eixo no espaço 3D: eixos X, Y e Z. Quando a bola colide em cada uma dessa parede, cria pequenas correntes piezoelétricas as quais são utilizadas para determinar a direção da inclinação e sua magnitude.
Os giroscópios trabalham de acordo com no princípio da aceleração de Coriolis.
Imagine uma estrutura de cristais piezoelétricos (representada pelos braços sensores na figura ao lado) semelhante a uma forquilha que esteja em constante movimento vibratório. Essas vibrações nos cristais, resultado da inércia do garfo móvel, produzem assim uma corrente em consenso com o efeito piezoelétrico, esta corrente é amplificada e seus valores são então refinados pelo microcontrolador.
O MPU-6050 é um sensor DMP (Digitam Motion Processor) que além do giroscópio e do acelerômetro, tem um termômetro na mesma board. É um dispositivo de alta precisão e baixo custo com comunicação I2C (Inter-Integrated Circuit) com o Arduino.
Partindo para o projeto, faça a ligação do componente no Arduino conforme o esquema abaixo:
MPU-6050 com MATLAB
Prosseguindo, baixe as bibliotecas, descompacte o arquivo zip i2cdevlib-master, abra essa pasta, em seguida, abra a pasta Arduino, copie as pastas I2Cdev e MPU6050 e cole em C:\Users\admin\Documents\Arduino\libraries.
Feito isso, baixe o  código de calibração, carregue no Arduino, abra o Monitor Serial, aguarde o final e copie os offsets para serem inseridos no próximo programa.


Vá à pasta Arquivo>Exemplo>MPU6050> MPU6050_DMP6 abra o exemplo MPU6050_DMP6, insira os valores offsets encontrados no sketch de calibragem, faça a seleção para # define OUTPUT_READABLE_YAWPITCHROLL e siga as demais alterações no programa conforme as figuras abaixo:


Partindo para o MATLAB, baixe o script junto com a função e faça a alteração da porta no script conforme a figura abaixo:


Execute o programa, aguarde alguns segundos e veja o resultado:

MPU-6050 com MATLAB


Acionamento de um Módulo Relé via Bluetooth

Acionamento de um Módulo Relé via Bluetooth

O módulo relé é um interruptor automático para controlar um circuito de alta corrente com um sinal de baixa corrente. As vantagens de um relé estão em sua menor inércia do movimento, estabilidade, confiabilidade a longo prazo e pequeno volume. É amplamente adotado em dispositivos de proteção de energia, tecnologia de automação, esporte, controle remoto, reconhecimento e comunicação, bem como em dispositivos de eletromecânica e eletrônica de potência. De um modo geral, um relé contém uma parte de indução com uma variável de entrada como corrente, tensão, potência, resistência, frequência, temperatura, pressão, velocidade, luz e outros. Também contém um módulo atuador (saída) que pode energizar ou desenergizar a conexão do circuito controlado. Existe uma parte intermediária entre a parte de entrada e a parte de saída que é usada para acoplar e isolar a corrente de entrada, além de atuar a saída. Quando o valor nominal da entrada (tensão, corrente e temperatura, etc.) está acima do valor crítico, o circuito de saída controlado do relé será energizado ou desenergizado.
O módulo Bluetooth HC-06 é usado para comunicação wireless entre o Arduino e algum outro dispositivo com bluetooth, como por exemplo um telefone celular, um computador ou tablet. As informações recebidas pelo módulo são repassadas ao Arduino (ou outro microcontrolador) via serial.
Partindo para o projeto, percebemos que controlar um módulo relé para ligar uma lâmpada ou qualquer outro equipamento é bem simples, porém para verificar se o equipamento ou a lâmpada foram realmente ligados é necessário enviar um sinal de realimentação para o Arduino. Para isso, podemos utilizar um sensor de corrente para dar um feedback ao sistema informado o funcionamento de uma lâmpada ou do equipamento. Porém, atualmente, não se utilizam mais lâmpadas incandescentes e ao utilizar uma lâmpada de LED, como utilizaremos neste projeto, um sensor de corrente facilmente encontrado e de preço acessível como o ACS712 não permite fazer essa leitura. Então, para resolver esse problema, pode-se utilizar um sensor de tensão ZMPT101B que com uma leitura digital numa porta analógica é possível fazer uma leitura igual a "1" quando desligado (tensão 0 V) ou uma leitura "0" quando ligado (tensão 127 V), mas se a tensão no local variar muito, talvez essa leitura não seja correta, logo terá que optar por um outro sensor ou para baratear o projeto pode até montar um circuito com um carregador velho de celular que pode fornecer um sinal de 5 V ao Arduino informando que a lâmpada está ligada.
Outro aspecto interessante que surgiu para este projeto, foi a necessidade, como por exemplo, em uma residência onde tem uma lâmpada na varanda e/ou um holofote no quintal você ter a possibilidade de ligar tanto via bluetooth como via interruptor. Para isso, faremos um three way (chave paralela) com o módulo relé  junto com  um interruptor paralelo.
Componentes:
  • 01 Arduino Uno/ Mega
  • 01 Arduino Sensor Shield (opcional)
  • 01 Módulo Bluetooth HC-06
  • 02 Módulo Relé JQC-3FF-S-Z ou similares
  • 02 Módulo Sensor Tensão ZMPT101B
  • 02 Lâmpadas com bocal
  • 02 Interruptor paralelo(three way)
  • Fios para conexão
Agora, baixe ou monte seu aplicativo no App Inventor conforme abaixo:





Monte o circuito com os componentes conforme o esquema a seguir. Caso tenha dúvida, consulte um profissional eletricista, pois estaremos trabalhando com tensão de 127 V.

Acionamento de um Módulo Relé via Bluetooth

Acionamento de um Módulo Relé via Bluetooth

  
Após a montagem do circuito com os componentes carregue o código no Arduino:

  # include <SoftwareSerial.h>
  2  # define In1 7 // In do Relé
  3  # define In2 8
  4  # define PinSensor1 A0 // Pino analógico A0 --> feedback1

  5  # define PinSensor2 A5

  6  # define pinRx 0 // RX do Arduino

  7  # define pinTx 1 // TX do Arduino

  8
  9  char  comando;    // Comando de liga desliga
 10  char rele1 = 'a'; // Situação inicial do relé desligado
 11  char rele2 = 'b';
 12
 13  int feedback1;
 14
 15  int feedback2;
 16
 17  void setup()
 18  {
 19    Serial.begin(9600);
 20    pinMode(In1, OUTPUT);
 21    pinMode(In2, OUTPUT);
 22    pinMode(PinSensor1, INPUT);
 23    pinMode(PinSensor2, INPUT);
 24    pinMode(pinRx, INPUT);
 25    pinMode(pinTx, OUTPUT);
 26
 27    digitalWrite(In1, LOW);
 28    digitalWrite(In2, LOW);
 29    feedback1 = 1;
 30    feedback2 = 1;
 31  }
 32
 33  void loop()
 34  {
 35    feedback1 = digitalRead(PinSensor1);
 36
 37    feedback2 = digitalRead(PinSensor2);
 38
 39    if (Serial.available())
 40    {
 41      comando = Serial.read();
 42
 43      delay(100);
 44
 45      if (comando == 'A')
 46      {
 47        if (feedback1 == 1 && (rele1 == 'a'))
 48        {
 49          digitalWrite(In1, HIGH);
 50          // Serial.println(" Ligada ");
 51          feedback1 = 0;
 52          rele1 = 'A';   // Relé  ligado
 53        }
 54        if (feedback1 == 1 && (rele1 == 'A'))
 55        {
 56          digitalWrite(In1, LOW);
 57          //  Serial.println(" Ligada ");
 58          feedback1 = 0;
 59          rele1 = 'a'// Relé desligado
 60        }
 61      }
 62      if (comando == 'a')
 63      {
 64        if (feedback1 == 0 && (rele1 == 'a'))
 65        {
 66          digitalWrite(In1, HIGH);
 67          // Serial.println(" Desligada ");
 68          feedback1 = 1;
 69          rele1 = 'A'; // Relé ligado
 70        }
 71
 72        if (feedback1 == 0 && (rele1 = 'A'))
 73        {
 74          digitalWrite(In1, LOW);
 75          //   Serial.println(" Desligada ");
 76          feedback1 = 1;
 77          rele1 = 'a'; // Relé desligado
 78        }
 79      }
 80
 81      if (comando == 'B')
 82      {
 83        if (feedback2 == 1 && (rele2 == 'b'))
 84        {
 85          digitalWrite(In2, HIGH);
 86          // Serial.println(" Ligada ");
 87          feedback2 = 0;
 88          rele2 = 'B';   // Relé ligado
 89        }
 90        if (feedback2 == 1 && (rele2 == 'B'))
 91        {
 92          digitalWrite(In2, LOW);
 93          //  Serial.println(" Ligada ");
 94          feedback2 = 0;
 95          rele2 = 'b'// Relé desligado
 96        }
 97      }
 98      if (comando == 'b')
 99      {
100        if (feedback2 == 0 && (rele2 == 'b'))
101        {
102          digitalWrite(In2, HIGH);
103          // Serial.println(" Desligada ");
104          feedback2 = 1;
105          rele2 = 'B';
106        }
107
108        if (feedback2 == 0 && (rele2 = 'B'))
109        {
110          digitalWrite(In2, LOW);
111          //   Serial.println(" Desligada ");
112          feedback2 = 1;
113          rele2 = 'b';
114        }
115      }
116      comando = "";
117    }
118
119    feedback1 = digitalRead(PinSensor1);
120
121    if (feedback1 == 1)
122    {
123      Serial.print("soff1");
124      Serial.print("!");
125    }
126    if (feedback1 == 0)
127    {
128      Serial.print("son1");
129      Serial.print("!");
130    }
131
132    feedback2 = digitalRead(PinSensor2);
133
134    if (feedback2 == 1)
135    {
136      Serial.print("soff2");
137      Serial.print("!");
138    }
139    if (feedback2 == 0)
140    {
141      Serial.print("son2");
142      Serial.print("!");
143    }
144  }

Lembre-se de que, antes de carregar o código, o módulo bluetooth tem que estar desconectado do Arduino para evitar interferência com a porta serial.
Feito isso, instale o aplicativo no seu celular, procure o dispositivo e conecte o bluetooth. Com isso, podemos observar que ao conectar o bluetooth, o aplicativo já indica o estado em que se encontram as lâmpadas, se estiver ligada, a imagem vai aparecer de lâmpada ligada, se estiver desligada, a imagem aparece de lâmpada desligada.