bonjour,
un projet inutile donc indispensable, une fois de plus
le but étant pour une cnc d'avoir un plateau à l'horizontal et pouvoir usiner ne pièce non plate.
au lieu d'utiliser un axe couplé pour ce genre de pièce, car infaisable, j'ai pensé a faire un montage DIY.
composants
un uno
un gyro GY-521
un capteur sharp IR
un shield sainsmart motor
2 moteurs de récup imprimante.
reste a faire tout le montage, mais cela fonctionne
d'autres modifs vont arriver
décomposition du programme :
initialisation des composants
mise à l'horizontale du plateau
usinage
mise à distance de la pièce en permanence
le programme, un peu crade, vite fait
#include <MPU6050.h>
#include <I2Cdev.h>
#include "Wire.h"
#include <AFMotor.h>
AF_Stepper motor(48, 2); // M3-M4
AF_Stepper motor1(48, 1); // M1-M2
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
MPU6050 accelgyro;
int val;
int prevVal;
#define sonde A0
void setup()
{
Wire.begin();
Serial.begin(115200);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
motor.setSpeed(200); // 10 rpm
motor1.setSpeed(200); // 10 rpm
pinMode(sonde, INPUT);
// initialisation du gyro pour vérif
for (int i=0; i!=10;i++){
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
ax = map(ax, -32767, 32767, -255, 255);
ay = map(ay, -32767, 32767, -255, 255);
az = map(az, -32767, 32767, -255, 255);
Serial.print("X : ");
Serial.print(ax);
Serial.print(" Y : ");
Serial.println(ay);
delay(500);
}
Serial.print("Calibration horizontale");
horizontal();;
}
void loop()
{
int sonde1 = analogRead(sonde);
Serial.println(sonde1);
if(sonde1 < 700) {
Serial.println("Descend");
motor1.step(1, FORWARD , SINGLE);
}
if(sonde1 > 720) {
Serial.println("Monte");
motor1.step(1, BACKWARD , SINGLE);
}
delay(100);
}
// mise a niveau du plateau
void horizontal(){
while(ax!=0 || ay!=0){
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
ax = map(ax, -32767, 32767, -255, 255);
ay = map(ay, -32767, 32767, -255, 255);
az = map(az, -32767, 32767, -255, 255);
Serial.print(ax);
Serial.print("\t");
Serial.print(ay);
Serial.print("\t");
Serial.print(ay);
Serial.print("\t");
Serial.print(az);
Serial.print("\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.print(gz);
Serial.print("\t\n");
if (ay < -1) motor1.step(1, BACKWARD, INTERLEAVE);
if (ay > 1) motor1.step(1, FORWARD, INTERLEAVE);
if (ax < -1) motor.step(1, BACKWARD, INTERLEAVE);
if (ax > 1) motor.step(1, FORWARD, INTERLEAVE);
delay(100);
}
}
amusez vous