Aleksandr
Published

Development of Arduino Expansion for Mobile Robots

Good day, going to develop a new robot. I wanted to build my module, which would be universal for any user.

AdvancedFull instructions provided5 hours766
Development of Arduino Expansion for Mobile Robots

Story

Read more

Schematics

Schematics

Code

Programm for Arduino

C/C++
#include <Adafruit_PWMServoDriver.h>
#include <Arduino_FreeRTOS.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#include <Wire.h>
#define MIN_PULSE_WIDTH 650
#define MAX_PULSE_WIDTH 2350
#define DEFAULT_PULSE_WIDTH 1500
#define FREQUENCY 50
uint8_t servonum = 0;

char  SLAVE_ADDRESS =0x04;// Arduino   I2C
char PWM1[]={11,10}; //     
char Umotor_1[]={13,12};//   
char Umotor_2[]={7,8};//   
void setup() {//  
  for(char pin=0;pin<=2;pin++) pinMode(PWM1[pin],OUTPUT);
  for(char pin1=0;pin1<=2;pin1++) pinMode(Umotor_1[pin1],OUTPUT);
  for(char pin2=0;pin2<=2;pin2++) pinMode(Umotor_2[pin2],OUTPUT);
  Serial.begin(9600);
  Wire.begin(SLAVE_ADDRESS);
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY);
}

void loop() {
if(Serial.available()>0){
int a=Serial.read()-'0';
if(a==1){Motor_1(2,255);
   Motor_2(1,255);
   delay(1000);
   Stop();
   delay(200);}
else if (a==2){Motor_1(1,255);
   Motor_2(2,255);
   delay(1000);
   Stop();
   delay(200);}
else if (a==3){
   pwm.setPWM(0, 0, pulseWidth(50));// 
}   
else if (a==4){
   pwm.setPWM(0, 0, pulseWidth(70));// 
}  
else if (a==5){
   pwm.setPWM(0, 0, pulseWidth(90));// 
}   
}}

int pulseWidth(int angle)//  
{
int pulse_wide, analog_value;
pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
return analog_value;
}

  // ................................................................................................................//
 void Test(){
      Motor_1(2,255);
   Motor_2(1,255);
   delay(1000);
   Stop();
   delay(200);
   }
   

 
 //  ....................................................................................................//  
uint8_t Raschet(float *data1,float t,float A)//         
{float U3=A*(0.356999*cos(0.785398*t)+0.356999*cos(3.14*t/4)-0.150786*sin(3.14*t/4));//      data1
 float U2=-0.098412-A*0.356999*cos(3.14*t/4)+A*0.0753928*sin(3.14*t/4);
 float U1=0.098412-A*0.356999*cos(3.14*t/4)+A*0.0753928*sin(3.14*t/4);
 data1[0]=U1;
 data1[1]=U2;
 data1[2]=U3;
}


//         .............................................................//
uint8_t Evalf(int *data,float U1,float U2,float U3)
{char PWM_1=0;char PWM_2=0;char PWM_3=0;
 char Rotation_1=0;char Rotation_2=0;char Rotation_3=0;
  if(abs(U1)>=abs(U2)&&abs(U1)>=abs(U3)){PWM_1=U1/abs(U1)*255;PWM_2=U2/abs(U1)*255;PWM_3=U3/abs(U1)*255;}
  if(abs(U2)>=abs(U1)&&abs(U2)>=abs(U3)){PWM_1=U1/abs(U2)*255;PWM_2=U2/abs(U2)*255;PWM_3=U3/abs(U2)*255;}
  if(abs(U3)>=abs(U1)&&abs(U3)>=abs(U2)){PWM_1=U1/abs(U3)*255;PWM_2=U2/abs(U3)*255;PWM_3=U3/abs(U3)*255;}
  if(PWM_1>0){Rotation_1=1;}else {Rotation_1=2;PWM_1=abs(PWM_1);}
  if(PWM_2>0){Rotation_2=1;}else {Rotation_2=2;PWM_2=abs(PWM_2);}
  if(PWM_3>0){Rotation_3=1;}else {Rotation_3=2;PWM_3=abs(PWM_3);}
  data[0]=Rotation_1;
  data[1]=Rotation_2;
  data[2]=Rotation_3;
  data[3]=PWM_1;
  data[4]=PWM_2;
  data[5]=PWM_3;
  }

  
//  .........................................................................................................//
void Motor_1(char Rotation_1,char PWM_1)// 
{if (Rotation_1==1)//     , 
{digitalWrite(Umotor_1[0],HIGH);digitalWrite(Umotor_1[1],LOW);analogWrite(PWM1[0],PWM_1);}
 if(Rotation_1==2)//    , 
 {digitalWrite(Umotor_1[0],LOW);digitalWrite(Umotor_1[1],HIGH);analogWrite(PWM1[0],PWM_1);}
}
//  .........................................................................................................//
void Motor_2(char Rotation_2,char PWM_2)//  
{if (Rotation_2==1)//    , 
{digitalWrite(Umotor_2[0],HIGH);digitalWrite(Umotor_2[1],LOW);analogWrite(PWM1[1],PWM_2);}
 if(Rotation_2==2)//    , 
 {digitalWrite(Umotor_2[0],LOW);digitalWrite(Umotor_2[1],HIGH);analogWrite(PWM1[1],PWM_2);}
}

//  .......................................................................................................//
void Stop()
{digitalWrite(Umotor_1[0],LOW);digitalWrite(Umotor_1[1],LOW);analogWrite(PWM1[0],0);
digitalWrite(Umotor_2[0],LOW);digitalWrite(Umotor_2[1],LOW);analogWrite(PWM1[1],0);
 }    

Credits

Aleksandr
3 projects • 1 follower
I am robotics engeenier

Comments