//MPU6050 Giroscópio
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include "ThingSpeak.h"
//Configurações WiFI
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
//Definir o canal do WIfi - aumentar a velocidade de conexão
#define WIFI_CHANNEL 6
int status = WL_IDLE_STATUS;
const int myChannelNumber = 2680277;
const char* myApiKey = "JZTF17OJBWFLJEC1";
const char* server = "api.thingspeak.com";
unsigned long ultimaAtualizacao = 0;
const unsigned long intervaloEnvio = 15000;
WiFiClient client;
Adafruit_MPU6050 mpu; // Objeto para interagir com o sensor MPU6050
void setup(void) {
Serial.begin(115200); // Inicia a comunicação serial com uma taxa de 115200 bps
// Loop até que o MPU6050 seja detectado e inicializado corretamente
while (!mpu.begin()) {
Serial.println("MPU6050 não conectado!"); // Mensagem de aviso se o MPU6050 não estiver conectado
delay(1000); // Aguarda 1 segundo antes de tentar novamente
}
Serial.println("MPU6050 pronto!"); // Mensagem indicando que o MPU6050 está pronto
conectawifi();
}
void loop() {
// Criação de variáveis para armazenar eventos do acelerômetro, giroscópio e temperatura
sensors_event_t a, g, temp;
// Captura os dados do acelerômetro (a), giroscópio (g) e temperatura (temp)
mpu.getEvent(&a, &g, &temp);
// Impressão dos dados do acelerômetro no formato de força g (1g = 9,80665 m/s²)
Serial.print("[");
Serial.print(millis()); // Tempo em milissegundos desde que o Arduino foi iniciado
Serial.print("] X: ");
Serial.print(a.acceleration.x/9.80665, 2); // Aceleração em g, com 2 casas decimais
Serial.print(", Y: ");
Serial.print(a.acceleration.y/9.80665, 2); // Aceleração em g, com 2 casas decimais
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2"); // Unidades de aceleração em m/s²
// Impressão dos dados do giroscópio em graus por segundo (1 rad/s = 57.2958 graus/s)
Serial.print("Rotation X: ");
Serial.print(g.gyro.x * 57.2957795130931, 2); // Rotação em graus por segundo, com 2 casas decimais
Serial.print(", Y: ");
Serial.print(g.gyro.y * 57.2957795130931, 2); // Rotação em graus por segundo, com 2 casas decimais
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s"); // Unidades de rotação angular em radianos por segundo
// Impressão da temperatura medida pelo sensor em graus Celsius
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC"); // Unidades de temperatura em graus Celsius
delay(500); // Atraso de 1 segundo antes de repetir o loop
if(millis() - ultimaAtualizacao >= intervaloEnvio){
ThingSpeak.setField(1, static_cast<float>(a.acceleration.x/9.80665));
ThingSpeak.setField(2, static_cast<float>(a.acceleration.y/9.80665));
ThingSpeak.setField(3, static_cast<float>(a.acceleration.z/9.80665));
ThingSpeak.setField(4, static_cast<float>(g.gyro.x * 57.2957795130931));
ThingSpeak.setField(5, static_cast<float>(g.gyro.y * 57.2957795130931));
ThingSpeak.setField(6, static_cast<float>(g.gyro.z * 57.2957795130931));
ThingSpeak.setField(7, static_cast<float>(temp.temperature));
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
if(x == 200){
Serial.println("Dado enviado com sucesso");
}else{
Serial.println("Erro de envio: "+ String(x));
}
ultimaAtualizacao = millis();
}
}
void conectawifi(){
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Conectando ao WiFi");
Serial.print(WIFI_SSID);
//Esperar até conectar
while (WiFi.status() != WL_CONNECTED){
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}