Índice:
- Etapa 1: SOBRE ESTE PROJETO
- Etapa 2: Hardware necessário
- Etapa 3: Circuito e conexões
- Etapa 4: TRABALHO
- Etapa 5: CODE
- Etapa 6: DEMONSTRAÇÃO DE VÍDEO
Vídeo: Controlando servo usando MPU6050 entre Arduino e ESP8266 com HC-12: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Neste projeto, estamos controlando a posição de um servo motor usando o mpu6050 e o HC-12 para comunicação entre o Arduino UNO e o ESP8266 NodeMCU.
Etapa 1: SOBRE ESTE PROJETO
É outro projeto IoT baseado no módulo RF HC-12. Aqui, os dados imu (mpu6050) do arduino são usados para controlar o servo motor (conectado ao Nodemcu). Aqui, a visualização dos dados também é realizada no lado do arduino, onde os dados de pitch do mpu6050 (rotação em torno do eixo x) são visualizados com um esboço de processamento (discutido posteriormente). Basicamente, este projeto é apenas um pequeno aquecimento para lembrar diferentes aspectos do controle Imu & Servo com Arduino e ESP8266 nodemcu.
OBJETIVO
O objetivo disso é bem claro, estamos controlando a posição do servo motor usando o valor de pitch da IMU. E, no conjunto, esse passo e a posição do motor sincronizado são visualizados com o Processing.
Etapa 2: Hardware necessário
Módulo NodeMCU ESP8266 12E Wifi
Placa de ensaio sem solda
Jumper wire
MPU6050 accelo + giroscópio
Módulos de RF HC-12 (par)
Servo motor SG90
Etapa 3: Circuito e conexões
As conexões são diretas. Você pode alimentar o servo com 3,3 V do seu Nodemcu. Você também pode usar Vin para alimentar o servo se o seu nodemcu tiver tanta voltagem naquele pino. Mas a maioria das placas Lolin não tem 5V no Vin (depende do fabricante).
Esses diagramas de circuito são feitos usando o EasyADA.
Etapa 4: TRABALHO
Assim que o esboço do Arduino começar, ele enviará o ângulo de inclinação (que varia de -45 a 45) para o receptor hc12 do Nodemcu, que será mapeado com a posição Servo de 0 a 180 graus. Aqui usamos o ângulo de inclinação de -45 a +45 graus para que possamos mapear facilmente para a posição do Servo.
Agora, você está pensando por que podemos simplesmente usar o método de mapa da seguinte maneira: -
pos int = map (val, -45, 45, 0, 180);
Porque o ângulo negativo enviado pelo transmissor hc12 é recebido como:
1ª metade: (T) 0 a 45 => 0 a 45 (R)
2ª metade: (T) -45 a -1 => 255 a 210 (R)
Então você tem que mapeá-lo de 0 a 180 como
if (val> = 0 && val <= 45) pos = (val * 2) +90; senão pos = (val-210) * 2;
Estou evitando o método do mapa devido a algum erro irrelevante. Você pode experimentar e comentar se funciona com você
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // 4º argumento pode ser 2 (você pode verificar)
Cálculo do ângulo de inclinação MPU6050
Estou usando a biblioteca MPU6050_tockn que se baseia no fornecimento de dados brutos do IMU.
int pitchAngle = mpu6050.getAngleX ()
Isso nos dará o ângulo de rotação em torno do eixo x. Como você viu na figura, meu IMU é colocado verticalmente na placa de ensaio, então não confunda com pitch and roll. Na verdade, você deve sempre ver os eixos impressos na placa de breakout.
Por meio dessa biblioteca, você não precisa se preocupar com a eletrônica interna de leitura de registros específicos para operação específica. você apenas especifica o trabalho e pronto!
A propósito, se você quiser calcular o ângulo sozinho. Você pode fazer isso facilmente da seguinte maneira:
#incluir
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, verdadeiro); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();
int xAng = map (AcX, minVal, maxVal, -90, 90); int yAng = map (AcY, minVal, maxVal, -90, 90); int zAng = map (AcZ, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI); Serial.print ("AngleX ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Rolar Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }
Mas, não é necessário que você escreva tanto código para obter o ângulo. Você deve conhecer os fatos por trás da cena, mas usar a biblioteca de outras pessoas é muito eficaz em muitos projetos. Você pode ler sobre este imu e outras abordagens para obter mais dados filtrados no seguinte link: Explore-mpu6050.
Meu código arduino na extremidade de transmissão tem apenas 30 linhas com a ajuda da biblioteca MPU6050_tockn, portanto, usar uma biblioteca é bom, a menos que você não precise de algumas alterações básicas na funcionalidade do IMU. Uma biblioteca chamada I2Cdev de Jeff Rowberg é muito útil se você quiser alguns dados filtrados usando o DMP (Processador de movimento digital) da IMU.
Integração com Processamento
Aqui, o processamento é usado para visualizar os dados rotacionais sobre o eixo x de IMU, conforme calculado pelos dados brutos provenientes do MPU6050. Recebemos os dados brutos de entrada em SerialEvent da seguinte maneira:
void serialEvent (Serial myPort) {
inString = myPort.readString (); tente {// Analise os dados // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i + 1]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}
Aqui você pode ver a visualização na imagem anexada nesta etapa. Os dados de posição recebidos no final do nó também são vistos no monitor serial, conforme mostrado na imagem.
Etapa 5: CODE
Anexei o repositório github. Você pode clonar e bifurcar para usar em seus projetos.
my_code
O repo inclui 2 esboços de arduino para transmissor (arduino + IMU) e receptor (Nodemcu + Servo).
E um esboço de processamento. Marque o repositório se isso ajudar em seu projeto.
Neste instrutível, R- Receptor e T- Transmissor
Etapa 6: DEMONSTRAÇÃO DE VÍDEO
Vou anexar o vídeo amanhã. Siga-me para ser notificado.
Obrigado a todos!
Recomendado:
Controlando ESP8266 usando o aplicativo Telegram: 7 etapas
Controlando ESP8266 usando o aplicativo Telegram: Ei, e aí, pessoal! Akarsh aqui da CETech.Você já se perguntou sobre como conversar com seus aparelhos por meio de um aplicativo de mensagens? Parece estranho, certo. Mas hoje vamos fazer algo semelhante a isso. Não se preocupe, você não precisa comprar telefones celulares
Controlando a exibição de sete segmentos usando Arduino e o registrador de deslocamento 74HC595: 6 etapas
Controlando a exibição de sete segmentos usando Arduino e o registrador de deslocamento 74HC595: Ei, e aí, pessoal! Akarsh aqui da CETech. Monitores de sete segmentos são bons de se olhar e são sempre uma ferramenta útil para exibir dados na forma de dígitos, mas há uma desvantagem neles que é que quando controlamos um monitor de sete segmentos na reali
Controlando o Ableton Live usando Atto ou um Arduino Leonardo: 3 etapas
Controlando o Ableton Live usando Atto ou um Arduino Leonardo: Este é um vídeo de demonstração do Piksey Atto. Aprendemos como usá-lo como um dispositivo MIDI e controlar faixas no Ableton Live 10 Lite. Usamos um breadboard junto com interruptores momentâneos e você também pode usar um Arduino Leonardo para este projeto. Se você construir
Controlando uma matriz LED usando Arduino: 5 etapas
Controlando um Led Matrix usando Arduino: Oi, amigo. Neste artigo, vou mostrar como usar o Led Matrix usando Arduino. O Led Matrix é uma coleção de LEDs na forma de arrays. As matrizes de led têm uma variedade de colunas e linhas, dependendo do tipo. Apresentando vários LEDs com uma certa
ESP8266 NODEMCU BLYNK IOT Tutorial - Esp8266 IOT usando Blunk e Arduino IDE - Controlando LEDs pela Internet: 6 etapas
ESP8266 NODEMCU BLYNK IOT Tutorial | Esp8266 IOT usando Blunk e Arduino IDE | Controlando LEDs pela Internet: Olá pessoal, neste instructables aprenderemos como usar IOT com nosso ESP8266 ou Nodemcu. Usaremos o aplicativo blynk para isso. Portanto, usaremos nosso esp8266 / nodemcu para controlar os LEDs pela internet. Então, o aplicativo Blynk será conectado ao nosso esp8266 ou Nodemcu