Você está na página 1de 25
Robé de autoequilibrio DIY usando Arduino (/microcontroller- projects/arduino-based-self-balancing-robot) De (page_authorhtm))Aswinth Raj (Jusers/aswinth-ral) © 27 de agosto de 2018, 16 IRCUTDICESTCOMIATOUNOPROSECTS) Robé de autoequilbrio DIY usando Arduino Depois de ser inspirado pelos motores RYNO e outras scooters com equilibrio automatico da Segway, sempre quis construir algo semethante. Pensando um pouco, decidi construir um robé de auto-equillbrio usando o Arduino . Dessa forma, eu seria capaz de compreender 0 conceito ‘subjacente a todas essas scooters e também aprender como funciona 0 algoritmo PID Rodas: Nao subestime esses caras; Foi dificil descobrir que o problema estava nas rodas. Portanto, certifique-se de que suas rodas tenham ‘uma boa aderéncia ao piso que vocé estd usando. Observe com atengdo, sua pegada nunca deve permitir que as rodas deslizem no chao. Acelerémetro e giroscépio: A melhor escolha de acelermetro e giroscépio para o seu bot seré o MPU6050, Portanto, ndo tente construir Gin ‘com um acelerémetro normal como ADXL345 ou algo parecido, ele simplesmente nao funcionard. Vocé saberd 0 porqué no final deste artigo. Voce também pode verficar nosso artigo dedicado sobre como usar 0 MPU6050 com 0 Arduino (hitps:/circultdigest.com/microcontroller projects/mpu6050-gyro-sensor-interfacing-with-arduino) Batetia:_precisamios de uma bateria o mais leve possivel e a tenséo operacional deve ser superior a 5 V para que possamos alimentar nosso Arduino diretamente, sem um médulo de reforgo. Portanto, a escolha ideal seré uma bateria de polimero de lit o de 7,4V. Aqui, como eu tinha ‘uma beteria de forsitio de 7,4 V disponivel, use-a. Mas lembre-se de que um Li-po é mais vantajoso do que Ltion. Chassi: Outro lugar onde vocé nao deve se comprometer 6 com o chassi de seus bots. Vocé pode usar papeléo, madeira, pléstico, qualquer coisa com que seja bom, Mas, apenas certiique-se de que o chassi é robusto endo deve balangar quando o bot est tentando se equilibrar. Eu projetel meu préprio chassi no Solidworks inferindo dos outros bots e imprimi em 3D. Se vocé tiver uma impressora, também poderd imprimir 0 desenho; os arquivos do desenho serdo anexados no préximo titulo. Impressao 3D e montagem do bot Se vocé deciciu imprimir em 3D 0 mesmo chassi que estou usando para construir meu bot, os arquivos STL podem ser baixados de thingiverse nttps://www.thingiverse.com/thing:3052026) . Eu também adicionet os arquivos de design junto com ele para que vocé também possa ‘modificé-lo de acordo com suas preferéncias pessoais. ‘As pecas néo tém estruturas salientes, ento vocé pode imprimHlas facilmente sem nenhum suporte e um preenchimento de 25% funcionaré bem, Os designs sao bastante simples e qualquer impressora basica deve ser capaz de lidar com eles com facilidade. Usel 0 software Cura para fatiar 0 modelo e imprimi usando meu Tevo Tarantula, as configuragdes so mostradas abaixo, Prinesetup — [Hecnmenict | Gaston loprioge as a aus 82a 06 | rensene Some rt mie cenearesugpoe [7] snaeriteneson [] Needhaiprotn your set Vocé teria que imprimir a parte do corpo, bem como quatro pegas de montagem do motor. A montagem é bastante simples; use porcas pparafusos de 3 mm para prender o motor e as placas no lugar. Apés a montagem, deveréficar parecido com o mostrado na imagem abaixo. Assim que comecei a construir, percebi que construir esse bot é um pouco desafiador. Existem tantas opgdes para selecionar e, portanto, as confusdes comecam da forma correta selecionando os motores e permanecem até o ajuste dos valores PID. E ha tantas coisas a se considerar ‘como tipo de baterra, posi¢ao da bateria, punho da roda, tipo de driver do motor, manutengdo do CoG (centro de gravidade) e muito mais, Mas deixe-me dizer a vooé, uma vez que vocé construtlo, vocé concordaré que néo ¢ to dificil quanto parece ser. Entéo, vamos enfrenté-o, neste tutorial irei documentar minha experiéncia na construgao do rob6 com autobalanceamento. Vocé pode ser um iniciante absoluto que ‘esté apenas comegando ou pode ter chegado aqui depois de uma longa frustrago de néo conseguir fazer seu bot funcionar. Este local pretende ser 0 seu destino final, Entdo vamos comecar. Selecionando as pegas para 0 seu bot ‘Antes de Ihe contar todas as op¢es para construir o bot, deixe-me listar os itens que use neste projeto = Arduino UNO = Motores C¢ com engrenagem (cor amarela) -2Nos + Médulo Motor L298N = MPU6050 = Um parde rodas 1 Bateria de foritio de 7.4V = Fios de conexéio = Corpo impresso em 3D Controlador: 0 controlador que usei aqui é 0 Arduino UNO, porque é simplesmente facil de usar. Vocé também pode usar um Arduino Nano ou tum Arduino mini, mas eu recomendo que vocs fique com 0 UNO, pois podemos programé-lo diretamente, sem nenhum hardware externa. Motores: A melhor escolha de motor que vocé pode usar para um robé com autobalanceamento, sem divida seré o motor de passo. Mas, para manter as coisas simples, usei um motor de engrenagem DC. Sim, nao é obrigatério ter um stepper; o rabé também funciona bem com ‘esses motores de engrenagem DC de cor amarela comumente disponiveis. ox We Support Your PCBA Project Extensive Assembly Experience in Industrial Medical, loT, Telecom, MOKO TECHNOLOGY LTD ~—- Autornotive Electronics Driver do motor: Se vocé selecionou os motores de engrenagem DC como o meu, entdo voce pode usar o médulo driver L298N como ~u, ou mesmo um L293D deve funcionar bem. Saiba mais sobre como controlar © motor DC usando L293D e acuuino (https://circuitdigest.com/microcontroller-projects/de-motor-controbwith-arduino-une-pwm) 1 projeto real foi planejado com o médulo de unidade L298N (httpsi//circuitdigest.com/microcontroller-projects/arduino-motor-driver-shield toch) no rack inferior do Arduino e a bateria em cima dele, conforme mostrado acima, Se vocé estiver seguindo a mesma ordem, vocé pode parafusar a placa diretamente através dos orificios fornecidos e usar uma etiqueta de fio para a bateria Lipo. Este arranjo também deve {uncionar, exceto para as rodas superlisas que eu tive que mudar mais tarde. No meu bot, troquel a posi¢o da bateria e da placa do Arduino UNO para facilitar a programago e também tive que introduzir uma placa de desempenho para completar as conex6es, Portanto, meu bot nao parecia como planejado no estagio inicial, Depois de completar o teste de programagao de fiagdo e tudo mais, meu bot finalmente se parece com isso Diagrama de circuito Fazer as conexGes para este robé de auto balanceamento baseado em Arduino é multo simples, Basta fazer a Interface do MPU6050 am 0 Arduino e conectar os motores através do médulo Motor driver. Toda a configuragéo ¢ alimentada pela bateria de fons de Iitio de 7,4V. O diagrama de circuito para o mesmo ¢ mostrado abaixo. (fullimage? fritzing ircircuitdiagram_mic/Circuit-Diagram-for-DIY-Self-Balancing-Robot-using-Arduino.png) SPONSORED SEARCHES © Coding Software Balancing Robot Code 0 Arduino e 0 médulo de driver do motor L298N séo alimentados diretamente através do pino Vin e do terminal de 12 V respectivamente. 0 regulador integrado na placa Arduino converteré a entrada de 7,4 V em 5 V e 0 ATmega IC e © MPUGOSO serdo alimentados por ele. Os motores DC podem funcionar com tensdes de 5 V a 12 V. Mas estaremos conectando o flo positive de 7.4 V da bateria ao terminal de entrada de 12 V do ‘médulo acionador do motor. Isso fard cam que os motores operem com 7,AV. A tabela a seguir listaré como o médulo do driver do motor MPU60S0 € L298N esté conectado ao Arduino, Pino de componente | Pin Arduino MPu60s0 Vee +5V Terra Gnd scl. AS SDA aa wnt oz A L290n 1 v6 em2 oo 13 p10 Na on 9 MPU60SO se comunica com 0 Arduino através da interface I2C, entéo usamos os pinos SPI A4 e AS do Arduino. Os motores DC séo conectados aos pinos PWM D6, D9 D10 e D11 respectivamente. Precisamos conectérlos aos pinos PWM porque estaremos controlando a velocidade do motor DC variando o ciclo de trabalho dos sinais PWM. Se vocé nao estiver famiiarizado com esses dois componentes, recomendavel ler 0 tutorial da interface (https://cicuitdigest.com/microcontroller-projects/mpu60S0-gyro-sensor-interfacing-with-arduino) MPU6050 e do driver do motor L298N. Programando o robé de auto-equilibrio ‘Agora temos que programar nossa placa Arduino UNO para equilibrar o robs. E aqui que toda a magia acontece; o conceito por trés disso é simples. Temos que verificar se o bot esté inclinado para a frente ou para trés usando © MPUGOSO e entdo se ele esté inclinado para a frente temos que girar as rodas para frente e se ele esta inclinado para tras temos que girar as rodas na diregao reversa. ‘Ao mesmo tempo , também temos que controlar a velocidade com que as rodas esto girando , se o rabé estiver um pouco desorientado da posigao central, as rodas giram lentamente e a velocidade aumenta & medida que se afasta mais da posigao central. Pata atingir essa légica, uusamos o algoritmo PID, que tem a posigdo central como ponto de ajuste eo nivel de desorientagao como saida Para saber a posi¢ao atual do bot usamos o MPU60SO , que ¢ um acelerdmetro de 6 eixos e um sensor giroscépio combinados. Para obter um valor confiével de posigdo do sensor, precisamos usar o valor do acelerdmetro e do giroscépio, porque os valores do acelerémetro tém problemas de ruido e os valores do girascépio tendem a desviar com o tempo. Portanto, temas que combinar os dois ¢ obter o valor de inclinagao e rotagao de nosso rob6, do qual usaremos apenas o valor de guinada, Parece um pouco de cabega cambaleando, certo? Mas néo se preocupe, gracas @ comunidade Arduino, temos bibliotecas prontamente isponiveis que podem realizar 0 célculo de PID e também obter o valor de yaw do MPUGOSO, A biblioteca é desenvolvida por br3tth (hitps://github.com/br3ttb) e jrowberg, https://github. com/jrowberg) respectivamente. Antes de prosseguir, baixe suas bibliotecas do seguinte link ¢ adicione-as ao dret6ro lib do Arduino. https: github.com/bratb/Arduino- D+ jbrary/blob/master/PID_v1.h (https:/gthub.com/brSttb/Arduino-PID-Library/blob/master/PID_vi.b) ietps//github.com/jrowberg/i2edevib/tree/master/Arduino/MPU6OSO (htps:/github.convjrowberg/i2edevib/tree/master/Arduino/MPU6050) ‘Agora, que temos as bibliotecas adicionadas ao nosso Arduino IDE. Vamos comegar a programar © nosso robé de auto-equilibrio. Como ‘sempre, 0 e6digo completo do Projeto é fornecido no final desta pagina, aqui estou apenas explicando os trechos mais importantes do cédigo, Como dito. anteriomente, 0 cédigo.- &~—construido. em ~— cima do cbdigo de exemplo-- MPUSOSO, (https:/github.com/jrowberg/i2cdevib/blob/master/Arduino/MPU6050/examples/MPUS050_DMP6/MPU6050_OMP6.ino) vamos apenas. otimizar 0 cédigo para o nosso propésito e adicionar 0 PID e a técnica de controle para nosso robé de auto-equilibro, Primeiro, incluimos as bibliotecas necessérias para o funcionamento deste programa. Eles incluem a biblioteca I2C embutida, a Bibliot’ PID a Biblioteca MPU6OSO que acabamos de baixar. include “T2cdev.h™ ‘inelude // De https://eLthub. con/br3ttb/Ardutno-PID-Library/blob/master/PID_V1.h ‘Winelude "APUG9S®_6Axis_MotionApps29.h" // https : //eLthub.com/jrouberg/i2cdevlib/tree/master/Anduine/HPUGOS® wveis necessérias para obter os dados do sensor MPUGOSO . Lemos o vetor de gravidade e os valores do Em seguida, declaramos as ve ‘quatério e, em seguida, caleulamos a inclinagao do yaw e o valor do roll do bot. O array float ypr [3] conterd o resultado final 11 controle / status MPU vars bool dnpReady = false; // define verdadeiro se a inicializa¢do DMP fol ben-sucedida uints_t mpuTntstatus; // mantén 0 byte de status de interrupedo atual do MPU uints_t devstatus; // retorna 0 status apés cada operacio do dispositive (@ = sucesso, ! @ uinta6_t packetSize; // tananho do pacote DMP esperado (0 padre € 42 bytes) uinea6_t #ifocount; // contagen de todos os bytes atualnente en FIFO uints_t #ifoButfer [64]; // buffer de armazenanento FIFO erro) 11 orientacio / novinento vars Quaternion qi // [wy x, y z] contéiner de quaternion VectorFloat gravity; // [x, y, 2] vetor de gravidade ‘float ypr [3]; // [yaw, piten, roll] yaw / piten / roll container e vetor de gravidade Em seguida, ver o segmento muito importante do cédigo, e ¢ aqui que vocé gastaré muito tempo ajustando o conjunto certo de valores . Se 0 ‘seu robé for construide com um centro de gravidade muito bom e os componentes estiverem dispostos simetricamente (0 que na maioria dos easos néo é), 0 valor do seu ponto de ajuste serd 180. Caso contrério, conecte seu bot ao monitor serial Arduino e incline-o até vocé encontra, uma boa posicao de balanceamento, lé 0 valor exibido no monitor serial ¢ este & 0 seu valor de ponto de ajuste. O valor de Kp, Kd e Ki deve ser ajustado de acordo com seu bot. Nao ha dois bots idénticos que terdo os mesmos valores de Kp, Kd e Ki, entdo no hd como escapar disso. Assista a0 video no final desta pagina para ter uma ideia de como alustar esses valores. / senennen ajuste esses 4 valores para o seu BOT s#teenene / ‘double setpoint = 176; // define 0 valor quando 0 bot ests perpendicular a0 solo usando © moniter serial. 1/ Leia a docusentacio do projeto en circuitdigest.con para saber cono definir esses valores double Kp = 21; // Defina este prinetro double Kd = 0.8; // Defina este segundo uplo Ki = 140; // Finalnente defina esta configuracio J s#0049 Fim dos valores *eeeeee% / Na préxima linha, iniclalizamos o algoritmo PID passando as varidvels de entrada input, output, set point, Kp, Ki e Kd. Destes, jd definimos os valores do ponto de ajuste Kp, Ki e Kd no trecho de cédigo acima, 0 valor de entrada sera o valor atual de guinada que é lido do sensor MPU6050 € 0 valor de safda seré 0 valor que é calculado pelo algoritmo PID. Entao, basicamente, o algoritmo PID nos dard um valor de saida ‘que deve ser usado para corrigir o valor de entrada para estar préximo do ponto de ajuste. PID pid (@ input, & output, & setpoint, Kp, Ki, Kd, DIRECT); Dentro da fungao de configuragdo vazia inicializamos © MPU60SO configurando DMP (Digital Motion Processor). Isso nos ajudaré a ‘combina’ os dados do acelerémetro com os dados do giroscépio e fornecerd um valor confidvel de guinada, inclinago e rotago. Nao iremos nos aprofundar muito nisso, pois estaré muito além do tépico. De qualquer forma, um segmento de cédigo que vocé deve consultar na fungao s valores de deslocamento, voce pode de configuragdo so os valores de desiocamento do giroscéplo, Cada sensor MPUS050 tem seus propr jlattach;topie=446713.0;attach=193816) para caloular o valor de usar este esbogo do Arduino (https://forum.arduino.ce/index.php?actior Void Reverse () // Cédigo para girar a roda para tris ‘ analogweite (6,0); analogwrite (9, saida * -1); analogurite (10,0); analogwrite (11, saida * -1); Serdal.print ("R"); > void Stop () // Cédigo para parar as duas rodas ‘ analogwrite anallogweite analogweite (19,0); alogyrite (21,9) Serial.print ("5"); frabalho do Arduino Self Balancing Robot Quando estiver pronto com o hardware, voc8 pode fazer o upload do cédigo para a placa Arduino. Certifique-se de que as conexdes estejam ccoretas, pois estamos usando uma bateria de ‘onto, 6 necessério muito cuidado. Portanto, verfique se hé curtos-circuitos e certifique-se de ‘Que 0s terminals nao entrem em contato, mesmo que 0 seu bot sofra alguns pequenos impactos. Ligue seu médulo e abra seu monitor serial, se seu Arduino conseguir se comunicar com o MPU6O5O com sucesso e se tudo estiver funcionando como esperado, voc® deverd ver a tela a seguir fa ope 'sc.00 ->255.00 v] [nsatoboedv) [Cer avout Aqui vemos os valores de entrada e saida do algoritmo PID no formato entrada => si ~alda seré 0 . 0 valor de entrada é 0 valor atual do sensor MPUS050. © alfabeto “ Tepresenta que o bot estd ao contro. - Se 0 bot estiver perfeitamente balanceado, o valor da * representa que 0 bot esta se movendo para frente ¢ "R" urante os estagios iniciais do PID eu recomendo deixar seu cabo Arduino conectado ao bot para que vocé possa monitorar facilmente os -alores de entrada e saida e também seja facil corrigit e carregar seu programa para os valores Kp, Ki e Kd. 0 video abaixo mostra 0 funcionamento completo do bot ¢ também mostra como corrigir seus valores de PID. Espero que isso ajude a construc sou prépri robé de autogulivio. Se ocd tiver qualquer problema em faréYo funciona, deixe suas perguntas na secao de comentarios abaixo ou use os féruns para perguntas mais técnicas. Cédigo /+ ach Sl Bloncing Robot : + cig: 8 Aswint a) + cons sobre Lib tps/thub com/rowberlidedevibre/maste/Ardin/MPUSOSO {https://github.comy/jrowberg/iZcdevlib/tree/master/Arduino/MPU6050) * Sie: creultaigest com, "7 include "2cdev" ‘include 150 88 input <200) i Seo Bot esté calndo It (outputs 0) Caindo em rego a frente Forward 0) ire as todas para frente else if (output <0)! Caindo para tris Reverse 0); // Gire as rodas para trés > se / Seo bot néo cair ‘Stop 0 Mantenha ae rodas paradas I tedefine osinlizador de interrupgao © obtém o byte INT.STATUS mpulnterrupt= false pulntstatus = pu.getinstatus 0, 1 obtém a contagem FIFO atval fifoCount» mpu.getFFOCount 0); ‘1 verfique sea estoure (iss0 nunca deve acontecer a menos que nosso cédigo seja multo inefciente) Tf ((mpulntstatus & 0x10) ffecount == 1024) ‘ 1 redefine para que possamos contiouar de forma limpa mpuresetFIFO 0; Serial pinta (F(estouro de FIFON); 1 caso contri, vefique a interrupeio dos dados DMP (isso deve acontecer com frequéncla) > elseif (mpulntstatus& 0x02) ‘ 1 aguarde 0 comprimento correto dos dados disponives, deve ser uma espera MUITO curta lenquanto (feCount spacketSize) fifoCount = mpu. getFIFOCount 0 1118 um pacote de FIFO mpu.getFiFOBytes(ffoButer, nacketSize I rastreiaa contagem FIFO aqui no caso de haver> 1 pacotecisponivel 1 (eso nos permite ler imediatamente mais eem esperar por uma intecrupeo) ffoCount-= packetsize; mpudmpGetQuaternion (8, ffoBuffer);// obtém valor parag impu.dmpGetGraviy(& gravity, & q);// obtém 0 valor da gravidade ‘mpudmpGetYawPitchRoll (yr. 4 & gravity) //obtém valor para ypr entrada = ypr [i] *180/ MPI +180; old Forward (1! Cédigo para giar a oda para frente ‘ analogWrte (5, said analogWrte (90); analogWrte (10, aide) analogwrite (11.0; Serial print (9); /Informagées de depuracio Receba nosso boletim semanal! Inscreva-se abaixo para receber as noticias, artigos e projetos DIY mais populares da Circuit Digest Enderago de Email * Pais Estados Unidos da America ¥| Se inscrever ‘CONTEUDO RELACIONADO (microcontroller projects/fingerprint-based-car-ignition-system-using-arduino-and-fid) ‘Sistema de igni¢ao de carro baseado em impressao digital usando Arduino e RFID (/microcontroller-projects/fingerprint-based-car-igntion- systemusing-arduino-and-rfid) “owl (Imicrocontroller-projects/diy-hand-gesture-controlled-robotic-arm-using-arduino-nzno) Brago robético controlado por gestos manuais usando Arduino Nano (/microcontroller-projects/diy-Hiand-gesture-controlled-robotic-arm- using-arduino-nano) -__(/microcontroller-projects/record-and-play-3¢-printed-robotic-arm-using-arduino) Grave e reproduza o brago robstico impresso em 30 usando Arduino (/microcontrollerprojects/record-and-play-3d-printed-robotic-arm- using-arduino) (microcontroller projects/arduino-fire-fighting-robot-code) A Rob6 de combate a incéndio baseado em Arduino (/microcontroller-projects/arduino-fire-fghting-robot-code) = (/microcontrolle-projects/arduino-floor-cleaning-obo!) Rob6 de limpeza de piso baseado em Arduino usando sensor ultrassénico (/microcontrollerprojects/arduinc-floor-cleaning-robot) () (microcontroller-projects/arduino-face-tracking-robo!) Detecgao de rosto em tempo real e robé de rastreamento usando Arduino (/microcontroller-projects/arduino-face-tracking-robot) (/microcontroller-projects/arduino-bluetooth-biped-bob-robot) z — . Biped Bob com Bluetooth baseado em Arduino (Robé Caminhante e Danga) (/microcontroller-projects/arduino-bluetooth-biped-bob-robot) ‘POSTAGEM ANTERIOR Comunicagao 12¢ com MSP430 Launchpad (https://circuitdigest.com/microcontroller-projects/msp430-launchpad-i2c- communication) PROXIMA POSTAGEM > Robé seguidor de linha usando 0 LaunchPad MSP430 (https://circuitdigest com/microcontroller-projects/line-follower-robotusing- msp430-launchpad) COMENTARIOS Maki 29 de agosto de 2018 Fotografe este robé ou sujeite-o a mecanica Faga login (/user/login?destination=node/2443%23comment-form) ou registre (/user/tegister?destinatioy form) - se (/user/register?destination=nade/2443%23comment-form) para postar comentarios jode/2443%23comment- Mohit Chauhan (/users/mohit-chauhan) Oct 02, 2018 can you please explain the code line g (resers/mohitchauhan) iy (mp uintStatus & 0x10) I ffoCount == 1024) Log in (/user/login?destinatior post comments Ken (Jusers/ken-3) (sers/ken-a) NOV16.2018 Your description seems to indicate that everything runs off 7.4 VDC. However, our photos show two batteries, 1ode/2449%23comment-form) to 1ode/2443%23commentform) or register (/user/tegister?destination=node/2449%23commentform) tO Log in (/user/login?destinatior post comments and the hookup diagram shows them wired in series, which would be 14.8 VDC. Which is correct? Violet (users/violet) (users/violet) NOV21-2018 ‘The battreries used here are 18650 cells which has 3.7V per cel, Combine two cellin series and you get a Log in (/user/login?destinatior form) to post comments. AV battery pack ‘Aryamann (/users/aryamann) Nov 29, 2018 (Jusers/aryamann) a Why am I getting errors in Arduino IDE testing saying Log in (/user/login?destination=node/2443%23comment-form) or register (/user/register?destination=node/2443%23comment-form) to post comments MPU6050.h: warning: type ‘struct MPU6050’ violates one defination rule F Wodr] Line ~ 436:7 1ode/2443%23comment-form) or register (/user/register?destinatior 1ode/2443%23comment-form) or register (/user/register?destination=node/2443%23comment- MPU6050.h: note: a different type if defined in another translation unit, (I guess it says multiple class definations) Line ~ 436:7 MPU6050.h: note: the first difference of corresponding definations is field ‘dmpPacketButfer’ Line ~ 1026:12 | want to clear these errors as soon as possible, can somebody help ? Malhar Sunil Wable (/users/malhar-sunil-wable) (/users/malhar-sunitwvable) 7" 10.2019 ‘Arduino: 1.8.8 (Windows 10), Board: “Arduino/Genuino Uno" Log in (/user/login?destination=node/2443%23comment-form) or register (/user/tegister?destinatior post comments In file included from C:\Users\Malhar Wable\Documents\Arduino\Sketch T\unieycle_trial_1\unieycle_trial_1.ino:9:0 1ode/2443%23comment-form) to sketch\MPU6050_6/xis_MotionApps20.h: In member function 'uint8_t MPU60SO::dmpGetGravity(int16_t*, const uint®_t ‘sketch\MPU6050_6/.xis_MotionApps20.h:689:65: warning: integer overflow in expression [-Woverfiow] = (it32_tql2]* gla] + int32_t)qlla} *qlla) / (2* 16384); (CAUsers\MALHAR~1\AppData\Local\ Temp\ccPqilcb Itrans0.rans.o: In function “setup (CA\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 /unicycle.trial1.ino:62: undefined reference to “MPUSOSO::initialize(" (C\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 unicycle. trial1.ino:66: undefined reference to “MPUSOSO:testConnection() (C.\Users\MALHAR~1\AppData\Local\ Temp\ccPqilcb ltrans0.tans.o: In function “dmplnitialize ‘sketch/MPU6050_6Axis_MotionApps20.h:332: undefined reference to *MPU6050:,reset() ‘sketch/MPU6050_6Axis_MotionApps20.h:343: undefined reference to MPU6050::setSleepEnabled(bool)’ sketch/MPU6050_6Axis_MotionApps20.h:347: undefined reference to MPU6050::setMemoryBank(unsigned char, bocl, bool)’ “~ sketeh/MPU6050_68xis_MotionApps20.h:349: undefined reference to" MPU60S0:setMemoryStartAdéress( unsigned chat) sketcl/MPU6050_6Axis_MotionApps20.h:354: undefined reference to" MPU6050:setMemoryBank(unsigned cha, bool, boo) sketch/MPU6050_6Axis_MotionApps20.h:363: undefined reference to *MPU605O::getXGyroOffsetTC()’ sketch/MPU6050_6Axis_MotionApps20.h:364: undefined reference to "MPU6050::getYGyroOffsetTC()’ sketch/MPU60S0_6Axis_MotionApps20.h:365: undefined reference to MPU60S0:getZ6yroOffsetTCO) sketel/MPU6050_6Axls_MotionApps20.4:375: undefined reference to’ MPU60S0:setSlaveAddress(unsigned char, unsigned chat) sketcl/MPU6050_62xis_MotionApps20.h:377: undefined reference to" MPUS0S0:setI20MasterModeEnabled{ boo!) sketch/MPU60S0_6&xis_ MotionApps20.4:379: undefined reference to" MPUGOSO:setSlaveAddress unsigned char, unsigned char) sketch/MPU60S0_6Axls_MotionApps20.h'381: undefined reference to MPUGOSO:resetl2CMaster" sketch/MPU6050_6/xis_MotionApps20.h:388: undefined reference to MPU605O::writeProgMemoryBlock(unsigned char constt, Unsigned int, unsigned char, unsigned cher, bool) ssketch/MPUS050_6Axis_MotionApps20.h:395: undefined reference to MPU6050::writeProgDMPConfigurationSet(unsigned char const’, unsigned int) ssketch/MPU6050_6/\xis_MotionApps20.h:399: undefined reference to MPU6050:'setClockSource(unsigned char) ssketch/MPU6050_6Axis_MotionApps20.h:402: undefined reference to MPU60S0:'setintEnabled( unsigned char) sketch/MPU6050_6Axis_MotionApps20.h:405: undefined reference to MPU60SO:'setRate(unsigned char)’ sketch/MPU6050_6Axis_MotionApps20.h:408: undefined reference to MPU60SO::setExternalFrameSync(unsigned char)’ sketch/MPU6050_6Axis_MotionApps20.h:411: undefined reference to MPUGOSO::setDLPFMode(unsigned char)’ ssketch/MPU6050_6/.xis_MotionApps20.h:414: undefined reference to MPU6050:'setFullScaleGyroRange(unsigned char)’ ssketch/MPUS050_6Axis_MotionApps20.h:418: undefined reference to MPU6050::setDMPConfigl (unsigned char) sketch/MPU6050_6Axis_MotionApps20.h:420: undefined reference to ‘MPU60SO::setDMPConfig2(unsigned char)’ sketch/MPU6050_6Axis_MotionApps20.h:423: undefined reference to "MPU6DS0::setOTPBankValid(boo!)’ sketch/MPU6050_6Axis_MotionApps20.h:426: undefined reference to MPUGDSO:'setXGyroOffsetTC(signed char) sketch/MPU6050_6Axis_MotionApps20.h:427: undefined reference to MPU60SO::setYGyroOffsetTC{signed char)’ ssketch/MPUS050_6Axis_MotionApps20.h:428: undefined reference to MPU60S0::setZGyroOffsetTO(signed char) ssketch/MPU6050_6Axis_MotionApps20.h:439: undefined reference to ‘MPU60SO::writeMemoryBlock(unsigned char const, Unsigned int, unsigned char, unsigned char, bocl, boo!) sketch/MPU6050_6Axis_MotionApps20.h:443: undefined reference to "MPU60SO::writeMemoryBlock(unsigned char const*, Unsigned int, unsigned char, unsigned char, bool, bool)’ sketch/MPUSOS0_6Axis MotionApps20h446: undefined reference to" MPU6OSO:resetFIFOO! sketch/MPU6050_6Axis_MotionApps20.h:449: undefined reference to ‘MPU6050::getFIFOCount()’ ‘sketch/MPU6050_6Axis_MotionApps20.h:454: undefined reference to "MPU6050::getFIFOBytes(unsigned char*, unsigned char)’ sketch/MPUSOS0. Axis MotionApps20 467: undefined reference to" MPU6OSO:setMationDetecionThreshol( unsigned char ssketch/MPU6050_6Axis_MotionApps20.h:460: undefined reference to MPU6050::setZeroMotionDetectionThreshold(unsigned char) sketch/MPU6050_6Axis_MotionApps20.h:463: undefined reference to MPU60SO::setMotionDetectionDuration(unsigned cus) sketch/MPU6050_6Axis_MotionApps20.h:466: undefined reference to MPU60S0:'setZeroMotionDetectionDuration(unsigned char)’ sketch/MPU6050_6Axis_MotionApps20.h:469: undefined reference to "MPU6050: ssketch/MPU6050_6Axis_ MotionApps20.h:472: undefined reference to ‘sketch/MPU6050_6Axis_MotionApps20.h:475: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:478: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:482: undefined reference to unsigned int, unsigned char, unsigned char, bocl, boo!) ssketch/MPU6050_6Axis_MotionApps20.h:486: undefined reference to Unsigned int, unsigned char, unsigned char, bool, bool)’ sketch/MPU6050_6Axis_MotionApps20.h:490: undefined reference to‘ unsigned int, unsigned char, unsigned char, bool, boo!) sketch/MPU6050_6Axis_MotionApps20.h:498: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:498: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:507: undefined reference to unsigned char, unsigned char) ssketch/MPU6050_6Axis_MotionApps20.h:510: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:516: undefined reference to ssketch/MPU6050_6Axis_MotionApps20.h:625: undefined reference to Unsigned int, unsigned char, unsigned char, bool, bool)’ sketch/MPU6050_6Axis_MotionApps20.h:530: undefined reference to ssketch/MPU6050_6Axis_ MotionApps20.h:639: undefined reference to ‘sketch/MPU6050_6Axis_MotionApps20.h:540: undefined reference to ‘MPUGOSO: ‘MPU60SO: ‘MPU6O5O: 'MPU60SO: 'MPU60SO: ‘MPU60SO: ‘MPU6SO: ‘MPU6OSO: ‘MPU6O5O: ‘MPU6OSO: ‘MPUG0SO: 'MPU6OSO: ‘MPU60SO: ‘MPU60SO: ‘MPU605O: resetFIFO()!” ‘setFIFOEnabled(bool)’ ‘setDMPEnabled(boo!)’ a resetDMP0) -writeMemoryBlock(unsigned char const, -writeMemoryBlock(unsigned char const’, :writeMemoryBlock(unsigned char const*, .getFiFOCount() .getFIFOBytes(unsigned char*, unsigned char)’ rreadMemoryBlock(unsigned char, unsigned int, .getFiFOCount() .getFFOBytes(unsigned chars, unsigned char) :writeMemoryBlock(unsigned char const*, ‘setDMPEnabled(boo!)’ resetFIFOO’ ‘getIntStatus()’ (C:\Users\MALHAR~1\AppData\Local\ Temp\cePqjleb Itrans0. rans.o: In function “setup (C.\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 unicycle. trial_1.ino:63: undefined reference to “MPUBOSO:setXGyroOffset(int) C.\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 /unicycle_trial_1.ino:64: undefined reference to “MPU6OSO:set¥GyroOffset(int) (C.\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1/unicycle_trial_1.ino:65: undefined reference to “MPUGOSO:setZGyroOffset(int) (C.\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 /unicycle.trial_1.ino:66: undefined reference to “MPUSOSO::setZAccelOffset(int)’ (C.\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 /unicycle_trial_1.ino:73: undefined reference to “MPUSOS0::setOMPEnabled(boo!) (CAUsers\Malhar Wable\Documents\Arduino\Sketch T\unicycle.trial_1 unicycle trial_1.ino:78: undefined reference to “MPUGOSO:getintStatus()’ C\Users\MALHAR~1\AppData\Local\ Temp\ccPqjleb ltrans0. rans.0: In function “loop (C\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 unicycle trial_1.ino:146: undefined reference to MPUBOSO:,getintStatus() (:\Users\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 unicycle trial_1.ino:149: undefined reference to MPUBOSO::getFIFOCount() CAUsers\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 unicycle trial_1.ino:156: undefined reference to “MPUSOSO:resetFIFOO' :\Users\Malhar Wable\Documents\Arduino\Sketch 1\unicycle_trial_1 /unicycle_trial_1.ino:163: undefined reference to “MPU6OSO:getFIFOCount(’ Noid Reverse Q)// Cédigo para girar a roda para trés ‘ analogWrite (60) analoguirte (9, sada *-0} analog (100); analogWrite (11, saida*-1); Sevialprint (89 old Stop 0/1/ Cédigo para parar as das todas, ‘ analogWite (6,0) ‘analogWrte (2,0) analogWrte (10.0); analogWrte (11.0); Sevialprint ($5; Video How to Make Arduino Based Self Balancing Robot How to Tune PID values for Self Balacing Bot TAG ARDUINO ROBOTICS (/TAGS/ARDUINO-ROBOTICS) _ROBGTICA /TAGS/ROBOTICS) ARDUINO (/TAGS/ARDUINO) [ARDUINO UNO (/TAGS/ARDUINO-UNO) ROBO DE EQUILIBRIO AUTOMATICO (/TAGS/SELF-BALANCING-ROBOT) 'MOTORISTA (/TAGS/MOTOR-DRIVER) ‘C:\Users\Malhar Wable\Documents\Arduino\Sketch 1\unicycle_trial_1/unicycle_trial_1 ino:166: undefined reference to “MPU6050: getFIFOBytes(unsigned char, unsigned char)’ C.\Users\MALHAR~1\AppData\Local\ Temp\ccPqicb Itrans!.ltrans.o: In function static_intialization_and_destruction_0: , (CAUsers\Malhar Wable\Documents\Arduino\Sketch T\unicycle_trial_1 /unicycle_trial_1.ino:11: undefined reference to “MPUGO50: MPU6O5O(unsigned char) collect2.exe: error: Id returned 1 exit status exit status 1 Error compiling for board Arduino/Genuino Uno. This report would have more information with ‘Show verbose output during compilation’ ‘option enabled in File > Preferences. ‘Anthony Frantz (/users/anthony-frantz) ‘, May 08, 2019 (Jusers/anthony-frantz) hey, Log in (/user/login?destinatior form) to post comments got some errors here too \ode/2443%23comment form) or register (/user/register?destination=node/2443%23comment- ‘Something about the warning: integer overfiow in expression -Woverflow] (inn32_s)it2] * gia] + (int32_a)qI{3] * glia) / (2* 16384); Did u fix that or know the why is happening? The following errors in your code didnt show up here y Prompt (/users/prompt) (Wusers/prompt) “4” 092018 Hello Log in (/user/login?destination=node/2443%23comment-form) or register (/user/tegister?destination=node/2443%23comment-form) to post comments Could you please explain how to use stepper motors (nemat7) with L298D (arduino motor control shield) Thanks a lot, ‘sudhakar (/users/sudhakar-0) (Jusers/sudhakar-o) 7M" 19.2019 how to set balance poiont Log in (/user/login?destination=node/2443%23comment-form) or register (/user/register?destinatio post comments jode/2443%23comment-form) to Mark Fullerton (/users/mark-fullerton) (Jusers/marktulerton) #9 08.2019 Hi Log in (/user/login?destination=node/2443%23comment-form) or register (/user/tegister?destination=node/2443%23comment-fo-") to post comments When I go to the MPUSO50 link tothe library there is no download option. | go up to the root and can download the whole i2cdevlib but when | try and add that zip file in the IDE is say its an invalid library. I copied and pasted the code into a sketch, added the PID one but cant seem to add the MPU6050. So get a million errors when try to compile. Any advice appreciated A Cheers Mark ‘Aswinth Raj (/users/aswint ‘Aug 14,2019 (Jusers/aswinth-raj) Hi Mark, | just tried all the links again and found that they were all working. Whcih file do you think aj) Log in (/user/login?destinatior form) to post comments is missing and what error are you getting? Please ellobrate the probelm so that | can look into it. Thanks 1ode/2443%23comment-form) or register (/user/register?destination=node/2443%23comment- Richard Shonkwi ‘Aug 22, 2019 9 (/users/richard-shonkwiler) (Jusers/richard-shonkwiler) have got thie to work but arn having one problem, When I disconnect the USB cable from the PC Log in (/user/login?destination=node/2443%23comment-form) or register (/user/register?destination=node/2443%23comment-form) to post comments It stops working, I reset the Arduino and it still dosent function. | have installed a seperate 5 volt regulator to power the Arduino and still getting the same results. Any suggestions? Peter Lunk (/users/peter-Iunk) (Jusers/peter-lunk) S¢P 042079 ‘Thanks for taking the time to and for putting effort into making this article :) 1ode/2443%23comment-form) to Log in (/user/login?destinatior post comments lam a 47 Year old #Nerd learning new stuff. jode/2443%23comment-form) or register (/user/register?destinatior Here is a video of my Segway-style balancing robot (https://www youtube.com/watch ;RAtnfwV¥p4) running on your code. Learned a lot about the accelerometer and gyro and calibration too after digging behind the links you supplies for it and the bbraries, ) Thanks and greetings, Peter Lunk Netherlands. ‘Aswinth Raj (/users/aswinth-raj) ‘Apr 03, 2020 (lusers/aswinth-ra)) You have done a neat job with the chassis. Happy to see the work being re-created Log in (/user/login?destinatior form) to post comments, \ode/2443%23comment-form) or register (/user/register?destination=node/2443%23comment- haziq nazri (/users/haziq-nazri) (Jusers/hazirnazriy NOV 19.2019 Hil already follow all the procedure of your project but i had a problem where my robot only go in one Log in (/user/login?destination=node/2443%23comment-form) or register (/user/tegister?destination=node/2443%23comment-form) to post comments direction only eventhough | modify the PID Tania (/users/tania-2) (Vusers/tania-2) P&P 07.2020 Hello, Ihave a question about the circuit diagram. | see that the battery is connected to both the Arduino UNO 1ode/2443%23comment-form) to Login (/user/login?destinatos post comments and the motor driver. How would I do this considering my battery has only two connecting wires? | know this may seem a trivial question but tis is my fist project ofthis type. Thank you 1ode/2443%23comment-form) or register (/user/register?destinatior FAGA LOGIN (/USER/LOGIN7DESTINATION=NODE/2443%23COMMENT-FORM) OU REGISTRE (/USER/REGISTER? DESTINATION=NODE/2443%23COMMENT-FORM) - SE (/USER/REGISTER?DESTINATION=NODE/2443%23COMMENT-FORM) PARA POSTAR ‘COMENTARIOS Peeters ceed vr de temperatura IR sem contato 2TP-148SRC1 (htips:/bit.y/3}zv2u) fo Z1P-148SRC1 consists em elementos temios, um fio infavermelho plano e um termistr, (https:/bit.ly/3jzivzu Board-In Conectores de 2,0 mm e 2,5 mm (httpsi/bitly/2gM4CW2 ) Basics so uma solu flexvel para aplcagdes permanentes fo-epleca de até 3A nanses (hitpsi/bit.y/3gMacw2 ) —_ (https sprees ‘ores Lynx” QD Series (htts://it.y/3}B2CBs ) stores Lynx QO so otimizados para sinalizaréo de par clfeencial com densidade/fexblidede premium stores ix Industrial" 1P20 (htps://bity/3IBrcE} ) ‘onectores industas de 10 posi apresentam desempento Cal6A TOGBASE-T ecapacidade Po. (https://bit, ‘7 ) > DSFP 56 G PAM4 SMT (hitps:/bitly/340faRB ) 1566 PAMADSFP SMT oferecepsias dupls de aa veloidade operando 828 b/s NRZ© 56 Gb / = PAM, (https://bitty/34QfaRB ) V gfGpy 22108 RF de ata requéncia (tpsity/34stSaw ) & _aores RF de ata vlocidade (40+ CHa) oferecem altos ives de preciso eexaicdo, do (https://bity/34stSaw ) Receptéculos de montagem em painel SMA (httas//bit.5/3IKSEDN ) os receptdculoe de montagem em panel SMA de? e 4 otficiosoferecem excelente desempenho VSWR de até 18 GHz, a, (hutps://bit.ly/31K9EpN ) sctores da série LIT (htpsu/bitty/3}2tju) ectoresclndrcos subminitura da série LIT séo qualicados para MILDTL-38998, Série (https/bitsy/ 324 ) Sas nee 1 Raed (https: //bit y/20kLGCH) Pome! PCB are available NOTICIA ARTIGOS PROJETOS Conversor DC / DC de 60 W reforgado para ferrovias e outras aplicagSes de transporte (/news/ruggedized-60w-dede converter for- rallways-and-other‘transportation-applications) (/news/ruggedized- 60w-dede- converter-for- rallways-and- other: transportation: applications) PolrFire So lil Kit-baino custo, placa de desenvolimento FPGA de baixa poténcia com subsistema de micoprocessadorRISC-V Quad Core de 64 bits (/news/polarfire-soc-icicle-kit-low-cost-low-power-fpga-development-board-with-quad-core-64-bit-risc-- microprocessor subsystem) (inews/potarfie” socicicle kt low-costow- powers: development: boardwith- quad-core 64- bitrisor microprocessor- subsystem) J. Os Cis de sensores de temperatura analégicos essenciais da Maxim Integrated fornecem medico de preciso para permitir protecdo |i ‘obusta pra bens e equipamentos (/news/maxim-ntegrated-esential- analog temperature-sensor.ics deliver precision measurement torenablerobustprotection-goods-and-equipment) (news/maxim- Integrated- essential: analog- temperature: sensorics- deliver- precision: measurement: toenable- robust protection- goods-and- equipment) re (/news/new- dede-buck- boost- converter- with-low- uiescent- current-can- extend- “attery life) = gcd Unews/digh key- electronies- ‘announces- global distribution: partnership- with- septentrio) Novo conversor DC / DC Buck-Boost com baixa corrente quiescente pode estender a vida da bateria em 50% (/news/new-dede-buck boost-converterwith-low-quiescentcurrent-can-extend-battery:life) Digi Key Electronics anuncia parceria de distribuigdo global com a Septentro (/news/dig key electronics announces global distribution partnership-with-septentrio) eee ZTEX FPGA Boards: ii" Fracw CConecte-se conosco nas redes socias figue atualizado com as iltimas noticia, artigos e projetos! in fiiviia (https (https ita iehpeiat nonlagged ya siaiesIT PHA]. 9K31PdL mn © | (https://wwwlinkedin.com/company/circuit- CATEGORIAS Eletrénica Embutida (htps//cicuitdigest com/embedded) Eletrénica de poténcia(htps:/fercultdigest.com/power-electronics) Eletrénica Analégica(htps://elreultdigest.com/analog-electronics) Internet das Coisas (ttpsereultdigest.comyinternetofhings) Elerénica de dudlo hipsi/crcutdigestcom/audle-lectronis) Veleulos elévicos (htps//ceultlgest.comv/eleetic-veicles) Eventos (mipssfereuligest.com/events) POPULAR RoBéTica yRoBoTics-PROuECTS) | [ sss cIRcUITOS Usss-TiMER-cIRCUITS) | [ PROJETOS ARDUINO /ARDUING-PROJECTS) 'PROUJETOS RASPBERRY Pl/SIMPLE-RASPBERRY-PI-PROJECTS-FOR-BEGINNERS) | [ NOTICIAS DE ELETRONICA (HTTPS:/CIRCUITOIGEST. COM/NEWS) FORUM ELETRONICO (HTTPSI/CIRGUITDIGEST.COM/FORUMS) | [ CALCULADORAS (HTTPS://CIRCUITDIGEST.COM/CALCULATORS) BOLETIM DE NOTICIAS. Inscreva‘se para as utimas noticias Digite seu email Se inscrever Copyright 20 ttpifercutdigest.comy) Todos os dretosresevacos, Poltica de prvacidade (ntpiforeuraigest comvpcvacy-paey) | Paltica de Cookes(hipsiereutdlgest com/cookiepoles) | Teros de uso ipaicreukagest comers. ee) | Contate-ns (tpuickeutaigestcoroontas) | Anuncir (tod Fekoutdgest com/odvere)

Você também pode gostar