цифровая электроника
вычислительная техника
встраиваемые системы

 



ESP32 и акселерометр / гироскоп MPU6050

Автор: Mike(admin) от 25-06-2020, 01:55

Сенсорный модуль MPU6050 состоит из акселерометра и гироскопа в одной микросхеме. Он содержит 16 битный АЦП для каждого канала. Таким образом, он может считывать данные по каналам осей x, y и z одновременно. Датчик использует I2C-шину для взаимодействия с Arduino или любым другим микроконтроллером. Сенсорный модуль MPU-6050 используется во многих приложениях, таких как дроны, роботы, датчики движения.


ESP32 и акселерометр / гироскоп MPU6050

В сегодняшней статье мы собираемся связать акселерометр и гироскоп MPU6050 с ESP32 и выводить предоставляемые значения об ускорении и угловой скорости через веб-сервер.


Для начала подключим MPU6050 к ESP32. Принципиальная схема подключения акселерометра / гироскопа MPU6050 к ESP32 приведена далее.


ESP32 и акселерометр / гироскоп MPU6050

MPU6050 связывается с ESP32 по протоколу I2C, поэтому нам нужно только два провода для взаимодействия ESP32 и MPU6050. Контакты SCL и SDA MPU6050 подключены к контактам D22 и D21 ESP32, а контакты VCC и GND MPU6050 подключены к 3,3 В и заземлению ESP32.


ESP32 и акселерометр / гироскоп MPU6050

На модуле MPU6050 все выводы подписаны.


MPU6050

MPU6050 основан на технологии микромеханических систем (MEMS). Этот датчик имеет 3-осевой акселерометр, 3-осевой гироскоп и встроенный датчик температуры. Его можно использовать для измерения таких параметров, как ускорение, скорость, ориентация, смещение и т. д. Модуль MPU6050 имеет небольшие размеры и низкое энергопотребление, высокую повторяемость, высокую устойчивость к ударам и низкую цену. MPU6050 поставляется с шиной I2C и может легко взаимодействовать с другими датчиками, такими как магнитометры и микроконтроллеры.


Программа для взаимодействия ESP32 с MPU6050 проста. Полный код с комментариями приведен далее.



#include <Wire.h>
#include <WiFi.h>
const int MPU_addr=0x68;  // I2C-адрес MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
// Информация о сети WiFi.
const char *ssid =  "Galaxy-M20";     // Введите название сети WiFi
const char *pass =  "ac312124"; // Введите пароль сети WiFi
WiFiServer server(80);
void setup(){
 Serial.begin(115200);
 Wire.begin();
 Wire.beginTransmission(MPU_addr);
 Wire.write(0x6B);  // регистр PWR_MGMT_1
 Wire.write(0);     // установить в ноль (будит MPU-6050)
 Wire.endTransmission(true);
 Serial.println("Wrote to IMU");
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");              // печатать ... пока не подключится
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address is : ");
  Serial.println(WiFi.localIP());
  server.begin();
  Serial.println("Server started");
}
void loop(){
mpu_read();
WiFiClient client = server.available();
 if (client) 
  {                             
    Serial.println("new client");          
    String currentLine = "";                   //Хранение входящих данных в строке
    while (client.connected()) 
    {            
      if (client.available())                  //если есть доступные данные клиента
      {                
        char c = client.read();                // читать байт
          if (c == '\n')                       // проверить наличие символа новой строки,
          {                     
          if (currentLine.length() == 0)      //если строка пуста, это означает конец HTTP-запроса клиента
          {     
            client.print("<html><title> ESP32 WebServer</title></html>");
            client.print("<body bgcolor=\"#E6E6FA\"><h1 style=\"text-align: center; color: blue\"> ESP32 WebServer </h1>");
            client.print("<p style=\"text-align: left; color: red; font-size:150% \">Accelerometer Values: ");
            client.print("<p style=\"text-align: left; font-size:150% \">AcX: ");
            client.print(AcX);
            client.print("<br/>AcY: ");
            client.print(AcY);
            client.print("<br/>AcZ: ");
            client.print(AcZ);
            client.print("<p style=\"text-align: left; color: red; font-size:150% \">Gyroscope Values: ");
            client.print("<p style=\"text-align: left; font-size:150% \">GyX: ");
            client.print(GyX);
            client.print("<br/>GyY: ");
            client.print(GyY);
            client.print("<br/>GyZ: ");
            client.print(GyZ);
            client.print("</p></body>");        
            break;  // вырваться из цикла while:
          } 
           else
          {    // если вы получили новую строку, очистите currentLine:
            currentLine = "";
          }
         } 
         else if (c != '\r') 
         {  // если получили что-то еще, кроме символа возврата каретки,
          currentLine += c;       // добавить это в конец currentLine
         }
        }
      }
  }
}
void mpu_read(){
 Wire.beginTransmission(MPU_addr);
 Wire.write(0x3B);  // начинаем с регистра 0x3B (ACCEL_XOUT_H)
 Wire.endTransmission(false);
 Wire.requestFrom(MPU_addr,14,true);  // запросить всего 14 регистров
 AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
 AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
 AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
 //Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
 GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
 GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
 GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
 Serial.print("Accelerometer Values: \n");
 Serial.print("AcX: "); Serial.print(AcX); Serial.print("\nAcY: "); Serial.print(AcY); Serial.print("\nAcZ: "); Serial.print(AcZ);   
 //Serial.print("\nTemperature: " );  Serial.print(Tmp);
 Serial.print("\nGyroscope Values: \n");
 Serial.print("GyX: "); Serial.print(GyX); Serial.print("\nGyY: "); Serial.print(GyY); Serial.print("\nGyZ: "); Serial.print(GyZ);
 Serial.print("\n");
 delay(3000);
 }

Подключите ESP32 к ноутбуку и загрузите код. Не забудьте правильно выбрать плату и порт. Убедитесь, что ваш ноутбук подключен к той же сети Wi-Fi, что и ESP32. После загрузки кода откройте последовательный монитор. Измените скорость передачи данных последовательного монитора на 115200. Вы увидите IP-адрес и значения акселерометра и гироскопа, скопируйте этот IP-адрес и вставьте его в браузер. Теперь вы увидите значения гироскопа и акселерометра MPU6050 на веб-странице, как показано далее на следующем изображении.


ESP32 и акселерометр / гироскоп MPU6050

Теперь вы можете использовать эти значения для создания чего-нибудь классного, например, самобалансирующегося робота, робота-манипулятора и т.д.




© digitrode.ru


Теги: ESP32, MPU6050, акселерометр, гироскоп




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Julia

  • 29 марта 2021 22:56
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Докую за чудовий сайт