Buongiorno a tutti , mi chiamo Stefano , mi avvicino ad Arduino per la prima volta , quindi abbiate pazienza.
Dovrei fare uno stabilizzatore ad un asse per mettere la telecamera sulla moto ,
utilizzo Arduino nano + gy 521 + un servo , ho trovato e provato varie soluzioni ma non sono abbastanza
fluide , allego un files che sembra bello ma non riesco ad installarlo troppi errori .
Qualcuno può aiutarmi e dare dei consigli .
Grazie a tutti .
Gyro Camera.txt (3.85 KB)
gpb01
March 21, 2018, 8:54am
2
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso ), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto ) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
gpb01
March 21, 2018, 9:23am
3
Ho idea che hai avuto problemi di copia/incolla dal sito dove hai preso il codice ...
... guardalo, ci sono strani caratteri invalidi, es:
#include ìKalman.hî
... li, chiaramente, nel copia/incolla, < e > sono diventati i due caratteri che vedi.
In tale condizioni è ovvio che il compilatore ti dia errore.
Verifica bene tutto il codice, togli le porcherie, installa le necessaie librerie e riprova.
Guglielmo
Prima di tutto grazie di avermi risposto , mi ero accorto di alcuni caratteri che non erano giusti per la
programmazione , ma sono errati anche nel sito.
Gyro Camera for Motorcycle: As seen in MotoGP Race, the rider is seen riding through corners while laying aside his bike to the left and right. But there is an interesting moment when the motor looks to collapse sideward, the front views remain...
A me li da' giusti..
non è che ti sei dimenticato di installare la libreria Kalman ?
gpb01
March 21, 2018, 10:08am
6
Anche io sul sito li vedo giusti ... devi avere qualche impostazione del browser errata ...
/*
GYRO CAMERA - saft7.com
Demonstrates auto-leveling Camera Video by using Gyro & Accelerometer with Arduino
The circuit:
Servo controlled by Arduino, using Gyro and Accelerometer as reference of movement.
Created March 12, 2013
by Firmansyah Saftari
www.saft7.com
This code and complete article can be found at:
http://www.saft7.com/
Programming Language: C++
*/
#include <Servo.h>
Servo xservo;
#include <Wire.h>
#include "Kalman.h"
Kalman kalmanX;
Kalman kalmanY;
uint8_t IMUAddress = 0x68; // MPU6050 Address
/* IMU Data */
int16_t accX;
int16_t accY;
int16_t accZ;
int16_t tempRaw;
int16_t gyroX;
int16_t gyroY;
int16_t gyroZ;
int moveX;
int mapX;
int correctionX;
double accXangle;
double accYangle;
double gyroXangle = 9;
double gyroYangle = 180;
double compAngleX = 90;
double compAngleY = 90;
double kalAngleX;
double kalAngleY;
uint32_t timer;
// ---------- VOID SETUP START -------------- /
void setup() {
Serial.begin(115200);
xservo.attach(10);
Wire.begin();
i2cWrite(0x6B,0x00); // Disable sleep mode
if(i2cRead(0x75,1)[0] != 0x68) { // Read "WHO_AM_I" register
Serial.print(F("MPU-6050 with address 0x"));
Serial.print(IMUAddress,HEX);
Serial.println(F(" is not connected"));
while(1);
}
kalmanX.setAngle(90); // Set starting angle
kalmanY.setAngle(90);
timer = micros();
}
// ---------- VOID SETUP END -------------- /
// ---------------------- VOID LOOP START -------------- /
void loop() {
/* Update all the values */
uint8_t* data = i2cRead(0x3B,14);
accX = ((data[0] << 8) | data[1]);
accY = ((data[2] << 8) | data[3]);
accZ = ((data[4] << 8) | data[5]);
tempRaw = ((data[6] << 8) | data[7]);
gyroX = ((data[8] << 8) | data[9]);
gyroY = ((data[10] << 8) | data[11]);
gyroZ = ((data[12] << 8) | data[13]);
/* Calculate the angls based on the different sensors and algorithm */
accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG;
double gyroXrate = (double)gyroX/131.0;
double gyroYrate = -((double)gyroY/131.0);
gyroXangle += gyroXrate*((double)(micros()-timer)/1000000); // Calculate gyro angle without any filter
gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate
compAngleX = (0.93*(compAngleX+(gyroXrate*(double)(micros()-timer)/1000000)))+(0.07*accXangle); // Calculate the angle using a Complimentary filter
kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter
timer = micros();
mapX = map(kalAngleX, 0, 200, 0, 179); //calculate limitation of servo mechanical
// /////////////////////////////
correctionX = 27; // EDIT THIS VALUE FOR SERVO CORRECTION ANGLE
// ////////////////////////////
moveX = 270 - (kalAngleX) + correctionX;
// ------- SEND TO SERIAL PRINT START ----- /
Serial.print("saft7.com X Pos: ");
Serial.print(moveX);Serial.print("\t");
Serial.print("\n");
// ------- SEND TO SERIAL PRINT END ----- /
// ------- SEND TO SERVO START ----- /
xservo.write(moveX); // Send signal to servo
delay(15); // delay to allow servos to move (ms)
// ------- SEND TO SERVO END ----- /
delay(1); // The accelerometer's maximum samples rate is 1kHz
}
// ---------------------- VOID LOOP END -------------- /
// -- FUNCTIONS START --
void i2cWrite(uint8_t registerAddress, uint8_t data){
Wire.beginTransmission(IMUAddress);
Wire.write(registerAddress);
Wire.write(data);
Wire.endTransmission(); // Send stop
}
uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
uint8_t data[nbytes];
Wire.beginTransmission(IMUAddress);
Wire.write(registerAddress);
Wire.endTransmission(false); // Don't release the bus
Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading
for(uint8_t i = 0; i < nbytes; i++)
data[i] = Wire.read();
return data;
}
// -- FUNCTIONS END --
// GYROCAM BY SAFT7.COM //
// END
Guglielmo
Ho installato la libreria kalman , penso di aver fatto giusto , in allegato il primo errore , correggendo
#include “Kalman.h” con #include <Kalman.h> mi da altri errori.
Ti sei accorto che le virgolette di #include "Kalman.h" non sono quelle corrette.
Prova a riscriverle
Allora, come dicevo nel messaggio precedwnte , avevo corretto le virgolette mettendo minore e maggiore<>
"Kalman.h" modificando con <Kalman.h> ma poi ho provato con un altro pc con lo stesso listato che avevo
postato sopra e funziona tutto .
uwefed
March 21, 2018, 9:50pm
10
Se guardi il video la regolazione non funziona per niente.
Ciao Uwe
Buongiorno , si avevo visto , comunque provandolo sembra piu fluido del progetto
http://www.giuseppecaccavale.it/arduino/mpu-6050-gy-521-arduino-tutorial/
anche se non è il massimo , se avete idee o consigli tutto ben accetto .
uwefed
March 22, 2018, 1:19pm
12
Ripeto e non mi é ancora stato spiegato che sbaglio se vai in una curva con la moto Ti inclini in modo che la forza centrifuga sia controposta dalla parte vettoriale orizontale della forza gravizionale della moto/guidatore.
Il Acelerometro misura solo accelerazioni.
Se si prende informazioni dei gyro si puó misurare la variazione dell inclinazione ma é una misura inattendibile per tempi lunghi perche piccoli errori si sommano durante tutto il tempo di misura e diventano significanti.
Ciao Uwe
Ok grazie del chiarimento , mi interessava costruirlo artigianalmente , ma a questo punto compro lo
stabilizzatore bello e pronto .
Grazie a tutti.