author
8CommentsCabo Frio-RJ BrasilJoined August 26th, 2017
Estudante, em busca de conhecimento que possa ser agregado ao meu dia. ( As pessoas se tornam "burras", quando perdem seu propósito de vida, e começam a "procurar" nas outras pessoas os seus próprios fracassos. R.C.A)
  • Roberto Carlos Alvarenga followed mr_fid10 days ago
      • Arduino Fire.
      • Morse Code for Kids.
      • Epaper and Arduino UNO
      • Bitcoin Ticker With Graph
      • Order-book Analysis by Color Sensor
      • Floating Death Star Build 2017
  • Roberto Carlos Alvarenga followed JimRD2 months ago
      • Self-propelled Strandbeest
      • Machine Learning Crawler Robot Using Reinforcement Learning, Neural Net and Q-Learning
      • How to Build a Claude Shannon Juggling Machine
  • Roberto Carlos Alvarenga followed Rahul - S2 months ago
      • Motor Speed Tester Using Arduino & IR Sensor
      • Time Sensor : Easiest Way of Home Automation
      • Arduino Shooting Game Arcade
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Eu estou refinando a montagem

    View Instructable »
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Eu estou refinando a montagem

    View Instructable »
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Estou refinando a montagem.

    View Instructable »
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Estou refinando a montagem.

    View Instructable »
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Estou refinando a montagem.

    View Instructable »
  • Roberto Carlos Alvarenga made the instructable Arduino Self-Balancing Robot2 months ago
    Arduino Self-Balancing Robot

    Eu refinando a montagem.

    View Instructable »
  • Arduino Self-Balancing Robot

    //---------- ROBO USANDO MOTOR ENCODER 12V 320 rpm//--------ROBO USANDO MOTOR ENCODER 6V 160 rpm//ARDUINO SELF-BALANCING ROBOT DRIVER L293D//https://www.instructables.com/id/Arduino-Self-Balancing-Robot-1//* * ========================================================= conexao MPU6050 ARDUINO/nano v3 VCC--------------VCC GND--------------GND SCL--------------A5 SDA--------------A4 INIT-------------PIN D2---------------------------------------------conexao MPU6050 ARDUINO uno mini Deek-RobotVCC--------------VCC GND--------------GND SCL--------------A4 SDA--------------A5 INIT-------------PIN D2----------------------------------------------- ---------olhando de frente para o SR-HC04 MOTOR da direita M2-------------------------------------- MOTOR2 A- A+---------olhando de frente para o SR-...

    see more »

    //---------- ROBO USANDO MOTOR ENCODER 12V 320 rpm//--------ROBO USANDO MOTOR ENCODER 6V 160 rpm//ARDUINO SELF-BALANCING ROBOT DRIVER L293D//https://www.instructables.com/id/Arduino-Self-Balancing-Robot-1//* * ========================================================= conexao MPU6050 ARDUINO/nano v3 VCC--------------VCC GND--------------GND SCL--------------A5 SDA--------------A4 INIT-------------PIN D2---------------------------------------------conexao MPU6050 ARDUINO uno mini Deek-RobotVCC--------------VCC GND--------------GND SCL--------------A4 SDA--------------A5 INIT-------------PIN D2----------------------------------------------- ---------olhando de frente para o SR-HC04 MOTOR da direita M2-------------------------------------- MOTOR2 A- A+---------olhando de frente para o SR-HC04 MOTOR da esquerda M1-------------------------------------- MOTOR1 B- B+--------DRIVER MOTOR L293D---------- leftMotorPWMPin D6 // IN2----L293D DRIVER MOTOR leftMotorDirPin D7 // IN1 rightMotorPWMPin D5 // IN3 rightMotorDirPin D4 // IN4 EN1---NIVEL ALTO EN2---NIVEL ALTO--------US-020----------------- VCC----------VCC GND----------GND TRIGGER-------D9 ECHO----------D8--------------------------------------------------------------------- Os dados são impressos como: acelX acELY acelZ giroX giroY giroZVerifique se as leituras dos seus sensores estão próximas de 0 0 16384 0 0 0Se a calibração foi bem sucedida, anote seus offsets para que você possa configurá-los em seus projetos usando algo semelhante a mpu.setXAccelOffset (youroffset)Seu MPU6050 deve ser colocado na posição horizontal, com as letras do pacote voltadas para cima.Não toque até ver uma mensagem final. */#include "Wire.h"#include "I2Cdev.h"#include "MPU6050.h"#include "math.h"#include <NewPing.h>#define leftMotorPWMPin 6 // IN2----L293D DRIVER MOTOR#define leftMotorDirPin 7 // IN1#define rightMotorPWMPin 5 // IN3#define rightMotorDirPin 4 // IN4#define TRIGGER_PIN 9#define ECHO_PIN 8#define MAX_DISTANCE 75/* *----------- Etapa 7: Ajustando as Constantes PID-------------------------1. Ajuste Ki e Kd para zero e gradualmente aumente Kp para que o robô comece a oscilar em torno da posição zero.2. Aumente o Ki para que a resposta do robô seja mais rápida quando estiver desequilibrada. O Ki deve ser grande o suficiente para que o ângulo de inclinação não aumente. O robô deve voltar para a posição zero se estiver inclinado.3. Aumentar Kd para reduzir as oscilações. Os overshoots também devem ser reduzidos até agora.4. Repita os passos acima, afinando cada parâmetro para obter o melhor resultado. */#define Kp 60 // 80 // 40 VALOR ORIGINAL#define Kd 0.02 //2.2 // 0.05 VALOR ORIGINAL #define Ki 50 //50 // 40 VALOR ORIGINAL#define sampleTime 0.005 // 0.005 VALOR ORIGINAL#define targetAngle -2.5 // -2.5 VALOR ORIGINALMPU6050 mpu;NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);int16_t accY, accZ, gyroX;volatile int motorPower, gyroRate;volatile float accAngle, gyroAngle, currentAngle, prevAngle=0, error, prevError=0, errorSum=0;volatile byte count=0;int distanceCm;void setMotors(int leftMotorSpeed, int rightMotorSpeed) { if(leftMotorSpeed >= 0) { analogWrite(leftMotorPWMPin, leftMotorSpeed); digitalWrite(leftMotorDirPin, LOW); } else { analogWrite(leftMotorPWMPin, 255 + leftMotorSpeed); digitalWrite(leftMotorDirPin, HIGH); } if(rightMotorSpeed >= 0) { analogWrite(rightMotorPWMPin, rightMotorSpeed); digitalWrite(rightMotorDirPin, LOW); } else { analogWrite(rightMotorPWMPin, 255 + rightMotorSpeed); digitalWrite(rightMotorDirPin, HIGH); }}void init_PID() { // initialize Timer1 cli(); // disable global interrupts TCCR1A = 0; // set entire TCCR1A register to 0 TCCR1B = 0; // same for TCCR1B // set compare match register to set sample time 5ms OCR1A = 9999; // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS11 bit for prescaling by 8 TCCR1B |= (1 << CS11); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); sei(); // enable global interrupts}void setup() { // set the motor control and PWM pins to output mode pinMode(leftMotorPWMPin, OUTPUT); pinMode(leftMotorDirPin, OUTPUT); pinMode(rightMotorPWMPin, OUTPUT); pinMode(rightMotorDirPin, OUTPUT); // set the status LED to output mode pinMode(13, OUTPUT);// LED VERDE pinMode(12, OUTPUT);// LED VERDE //--- initialize the MPU6050 and set offset values /* *---- Eliminando erros de compensação do acelerômetro e do giroscópio---execute o código fornecido para calibrar as compensações do MPU6050.Qualquer erro devido ao offset pode ser eliminado definindo os valores de offset na rotina setup () como mostrado abaixo. */ mpu.initialize(); mpu.setYAccelOffset(670); //649--------- VALOR ORIGINAL 1593----------- mpu.setZAccelOffset(1462); //1459-------- VALOR ORIGINAL 963 mpu.setXGyroOffset(33); // 31 ---------VALOR ORIGINAL 40 //--- initialize PID sampling loop init_PID();}void loop() { // read acceleration and gyroscope values accY = mpu.getAccelerationY(); accZ = mpu.getAccelerationZ(); gyroX = mpu.getRotationX(); // set motor power after constraining it motorPower = constrain(motorPower, -255, 255); setMotors(motorPower, motorPower); // measure distance every 100 milliseconds if((count%20) == 0){ distanceCm = sonar.ping_cm(); } if((distanceCm < 20) && (distanceCm != 0)) { setMotors(-motorPower, motorPower); }}// The ISR will be called every 5 millisecondsISR(TIMER1_COMPA_vect){ // calculate the angle of inclination accAngle = atan2(accY, accZ)*RAD_TO_DEG; gyroRate = map(gyroX, -32768, 32767, -250, 250); gyroAngle = (float)gyroRate*sampleTime; currentAngle = 0.9934*(prevAngle + gyroAngle) + 0.0066*(accAngle); error = currentAngle - targetAngle; errorSum = errorSum + error; errorSum = constrain(errorSum, -300, 300); //calculate output from P, I and D values motorPower = Kp*(error) + Ki*(errorSum)*sampleTime - Kd*(currentAngle-prevAngle)/sampleTime; prevAngle = currentAngle; // toggle the led on pin13 every second count++; if(count == 200) { count = 0; digitalWrite(13, !digitalRead(13)); // LED VERDE digitalWrite(12, !digitalRead(12));// LED VERDE }}

    View Instructable »
      • Getting Keil and STM32CubeMX Ready
      • STM32103: Esp8266 NodeMCU ThingSpeak [using Mbed.h]
      • STM32F103: Esp8266 NodeMCU Getting Started [using Mbed.h]
      • Gate Driver Circuit for Three Phase Inverter
      • Setup RTL-SDR in MATLAB As FM Receiver
      • Self Balancing Robot Using PID Algorithm (STM MC)
      • Jasper the Arduino Hexapod V1
      • Bluetooth Robot
      • Arduino Self Balancing Robot
      • Arduino Energy Meter - V2.0
      • DIY Acrylic RGB LED Sign
      • How to Make a Bench Power Supply
  • Roberto Carlos Alvarenga followed midhun_s6 months ago
      • Arduino Self-Balancing Robot
      • Robot - Line Follower