Ir ao conteúdo

Posts recomendados

Postado

Boa noite, estou num projeto que tem o objetivo de construir um robô de auto equilíbrio com o uso do microcontrolador arduíno. Eu decidi por fazê-lo com base em outros projetos já existentes na internet, que contém esquemáticos e códigos prontos para cópia e aplicação, mas estou tendo dificuldades para replicar quaisquer as opções que eu tenha pesquisado. Para começar, segue o nome do site e também o nome do projeto pretendido: "viralsciencecreativity" e "arduino-self-balancing-robot".

O problema que justamente me impede de tomar qualquer ação é à respeito do código, pois caso tenham visto, ele faz o uso de certas bibliotecas, às quais eu não sei como adquirir. Em especial a biblioteca LMotorController, que eu não consigo de jeito nenhum fazer o IDE reconhecer tal biblioteca. Já tentei baixar alguns Zip's que contém os arquivos ".h"  e ".cpp" no github, mas ainda sem sucesso.
Preciso de ajuda urgentemente, estou precisando pois é para uma avaliação. Se alguém souber como me ajudar, fico grato. Segue em anexo o código que vi no site:

 

 

Código copiado.txt

  • Curtir 1
  • Membro VIP
Postado

Projeto bacaninha. Vou colocar numa janela 'code' pra quem tiver preguiça de baixar...

No entanto penso que é melhor você falar o que exatamente está ocorrendo:

-que erro dá

-o que deve ocorrer

-o que ocorrre

-o que/onde/porquê você acha que deu problema

-publique esquemas, fotos, desenhos de sua criação

Nada contra ctrl-c ctrl-v mas é sempre bom você saber o que está fazendo, entende?

De fato quando googlei lmotorcontroller (clique) pra ver o que faz a lib , me retornou o lance do seu tópico. Não me aprofundei mas penso que é melhor você pensar algo como você estando dentro da cabeça do robô, pegando dados do acelerômetro e decidindo que lado girar os motores e tal. Talvez você consiga criar algo mais minimalista até mesmo sem uso de libs prontas Talvez seja isso que seu professor queira que você raciocine...

 

//Viral Science www.youtube.com/c/viralscience  www.viralsciencecreativity.com
//Self Balancing Robot
#include <PID_v1.h>
#include <LMotorController.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
 #include "Wire.h"
#endif

#define MIN_ABS_SPEED 30

MPU6050 mpu;

// MPU control/status vars
bool dmpReady = false; // set true if DMP init was successful
uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount; // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer

// orientation/motion vars
Quaternion q; // [w, x, y, z] quaternion container
VectorFloat gravity; // [x, y, z] gravity vector
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector

//PID
double originalSetpoint = 172.50;
double setpoint = originalSetpoint;
double movingAngleOffset = 0.1;
double input, output;

//adjust these values to fit your own design
double Kp = 60;   
double Kd = 2.2;
double Ki = 270;
PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);

double motorSpeedFactorLeft = 0.6;
double motorSpeedFactorRight = 0.5;

//MOTOR CONTROLLER
int ENA = 5;
int IN1 = 6;
int IN2 = 7;
int IN3 = 9;
int IN4 = 8;
int ENB = 10;
LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight);

volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady()
{
 mpuInterrupt = true;
}


void setup()
{
 // join I2C bus (I2Cdev library doesn't do this automatically)
 #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
 Wire.begin();
 TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
 #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
 Fastwire::setup(400, true);
 #endif

 mpu.initialize();

 devStatus = mpu.dmpInitialize();

 // supply your own gyro offsets here, scaled for min sensitivity
 mpu.setXGyroOffset(220);
 mpu.setYGyroOffset(76);
 mpu.setZGyroOffset(-85);
 mpu.setZAccelOffset(1788); // 1688 factory default for my test chip

 // make sure it worked (returns 0 if so)
 if (devStatus == 0)
 {
 // turn on the DMP, now that it's ready
 mpu.setDMPEnabled(true);

 // enable Arduino interrupt detection
 attachInterrupt(0, dmpDataReady, RISING);
 mpuIntStatus = mpu.getIntStatus();

 // set our DMP Ready flag so the main loop() function knows it's okay to use it
 dmpReady = true;

 // get expected DMP packet size for later comparison
 packetSize = mpu.dmpGetFIFOPacketSize();
 
 //setup PID
 pid.SetMode(AUTOMATIC);
 pid.SetSampleTime(10);
 pid.SetOutputLimits(-255, 255); 
 }
 else
 {
 // ERROR!
 // 1 = initial memory load failed
 // 2 = DMP configuration updates failed
 // (if it's going to break, usually the code will be 1)
 Serial.print(F("DMP Initialization failed (code "));
 Serial.print(devStatus);
 Serial.println(F(")"));
 }
}


void loop()
{
 // if programming failed, don't try to do anything
 if (!dmpReady) return;

 // wait for MPU interrupt or extra packet(s) available
 while (!mpuInterrupt && fifoCount < packetSize)
 {
 //no mpu data - performing PID calculations and output to motors 
 pid.Compute();
 motorController.move(output, MIN_ABS_SPEED);
 
 }

 // reset interrupt flag and get INT_STATUS byte
 mpuInterrupt = false;
 mpuIntStatus = mpu.getIntStatus();

 // get current FIFO count
 fifoCount = mpu.getFIFOCount();

 // check for overflow (this should never happen unless our code is too inefficient)
 if ((mpuIntStatus & 0x10) || fifoCount == 1024)
 {
 // reset so we can continue cleanly
 mpu.resetFIFO();
 Serial.println(F("FIFO overflow!"));

 // otherwise, check for DMP data ready interrupt (this should happen frequently)
 }
 else if (mpuIntStatus & 0x02)
 {
 // wait for correct available data length, should be a VERY short wait
 while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

 // read a packet from FIFO
 mpu.getFIFOBytes(fifoBuffer, packetSize);
 
 // track FIFO count here in case there is > 1 packet available
 // (this lets us immediately read more without waiting for an interrupt)
 fifoCount -= packetSize;

 mpu.dmpGetQuaternion(&q, fifoBuffer);
 mpu.dmpGetGravity(&gravity, &q);
 mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
 input = ypr[1] * 180/M_PI + 180;
 }
}

 

  • Curtir 2
Postado

Boa tarde ! Agradeço a resposta. 

Bom, eu irei estudar de maneira mais aprofundada essas questões, obrigado pela sugestão. A respeito do erro que me é apresentado, ele se encontra no momento em que verifico o código no arduíno IDE( Estarei colando uma imagem abaixo), além disso, não entendi se o texto em branco seria só uma observação do compilador ou um problema. Por conta da pandemia, eu venho utilizando simuladores para fazer alguns trabalhos menores, portanto eu não entendo muito a respeito do IDE. Mas pelo o que eu imagino, o código não funciona sem haver tal biblioteca. Imagem do erro/aviso:

OBS: esse esse aviso apareceu durante a compilação num sketch onde eu apenas colei o código, tendo instalado apenas a biblioteca PID. Meu palpite é de que se eu encontrar a LMotorController, o programa rodaria sem problemas

image.thumb.png.85e1f41949d62109b06c11272cb00b28.png

 

Sobre a questão do trabalho, achei que fosse uma boa ideia, até tinha certa confiança já que quando apresentei para o professor ele havia achado bacana. De qualquer forma, me sinto pressionado quanto a essa situação e estou buscando diversas saídas e ajudas.

  • Membro VIP
Postado

De fato aparenta ser só a falta da lib mesmo. Baixe-a e acrescente na sub pasta geralmente chamada include. clique aqui já com as palavras mágicas...

Apesar de eu também não ter muita familiaridade com a IDE arduína, ela pode ter alguma ferramenta de incluir libs com mais facilidade.

 

29 minutos atrás, Daniel These Zimmermann disse:

tendo instalado apenas a biblioteca PID. Meu palpite é de que se eu encontrar a LMotorController, o programa rodaria sem problemas

 

  • Curtir 1
Postado

@Daniel These Zimmermann ,

 

Procure ver nesse site do projeto que você esta copi .... quer dizer, adaptando ..... qual foi a versão da IDE do Arduíno que foi utilizada nesse projeto, pois se usar outra versão pode ter problemas.

No site do Arduino existem todas as versões da IDE para você baixar.

 

Paulo

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!