13-8-2016
Sturen met 2 motoren heb ik hier al beschreven.
Op de hobbyclub heeft John een 3D printer voor Henk in elkaar gezet. En natuurlijk moest er een experiment mee geprint worden. Voor mij werd er een rups onderstel gemaakt.
Het onderstel heeft 2 motoren (gekocht op ebay) en werkende rupsen. Dit is ideaal om geschikt te maken voor
een experimentele robot. Het kan makkelijk een drempel pakken en meer van de kleine problemen oplossen
waar ik met mijn wiel robot al tegen op liep.
Veel van de kennis kan ik gewoon overzetten naar de rups aangedreven robot. Ik heb nu wel een experimenteer printje gemaakt i.p.v het breadboard omdat ik al ontdekt heb
dat bepaalde dingen werken.
Mijn afstandbediening heeft 6 kanalen dus:
Nano kanaal van afstandbediening
D 13= kanaal 1
D 12= kanaal 2
D 11= kanaal 3
D 10= kanaal 4
D 9= kanaal 5
D 8= kanaal 6
Nano 293 motoren aan of uit richting
D 7= input 4 B
D 4= input 1 A
D 3= input 3 B
D 2= input 2 A
Nano 293 motoren snelheid
D 6= motor B
D 5= motor A
Nu heb ik al wat ervaring met motoren aansturen en die ga ik gebruiken om het geheel met de afstandbediening te gebruiken.
Inmiddels ook al aan het experimenteren welk soort geluid ik de rabot wil laten maken.
een PAM8403 mini 5V digital amplifier board with switch potentiometer als versterker.
// pulsrange {minimal,maximal,backwards/forward,speed}
// af te lezen kanaal 1
int Pulsregel1[]={1050,1168,2,255};//achteruit
int Pulsregel2[]={1169,1237,2,200};
int Pulsregel3[]={1238,1306,2,150};
int Pulsregel4[]={1307,1375,2,100};
int Pulsregel5[]={1376,1444,2,70};
int Pulsregel6[]={1445,1514,0,0};//rust
int Pulsregel7[]={1515,1584,1,70};
int Pulsregel8[]={1585,1654,1,100};
int Pulsregel9[]={1655,1724,1,150};
int Pulsregel10[]={1725,1794,1,200};
int Pulsregel11[]={1795,1875,1,255};//vooruit
// pulsrange {minimal,maximal,left/straight/right,speed}
// af te lezen kanaal 2
int Puls1[]={1106,1196,2,4};// links
int Puls2[]={1196,1286,2,3};
int Puls3[]={1286,1376,2,2};
int Puls4[]={1376,1464,2,1};
int Puls5[]={1464,1550,0,0};//rust
int Puls6[]={1550,1640,1,1};
int Puls7[]={1640,1730,1,2};
int Puls8[]={1730,1820,1,3};
int Puls9[]={1820,1910,1,4};// rechts
// pulsvalue
unsigned long CH1;
unsigned long CH2;
// connections to hardware -----------------
// input connections to receiver
// select the input pin for CH1
#define Pch1 13
// select the input pin for CH2
#define Pch2 12
// output speed control M1 and M2
// motor 1 by L293D 1
#define VM1 6
// motor 2 by L293D 9
#define VM2 5
// output Motor direction
// motor 1 first connection to L293D 2
#define DM1a 2
// motor 1 second connection to Arduino 3
#define DM1b 3
// motor 2 first connection to L293D 1
#define DM2a 4
// motor 2 second connection to Arduino 4
#define DM2b 7
// sketch variabelen-------------------------
// snelheid en richting voertuig
int VS; // snelheid voertuig
int VRR=0; // voertuig rijrichting 0=S 1=Vooruit 2=Achteruit
int VM0; // berekening voor voertuig bocht snel langzaam
int VR=0;// voertuig richting 1 links of 2 rechts
// snelheid en richting per moter
int GSM1; // gewenste snelheid per moter
int GSM2; // gewenste snelheid per moter
int MS1; //moter snelheid 1
int MS2; //moter snelheid 2
int MDR1=0; // gewenste draairichting 0 1 2
int MDR2=0; // gewenste draairichting
int OMS1; //oude motor instelling
int OMS2; //oude motor instelling
int SnM1; //Snelheid moter 1
int SnM2;
unsigned long snelh;
unsigned long vertr;
void setup()
{
Serial.begin(9600);
// sturing
pinMode(Pch1, INPUT); // declare the port as an INPUT
pinMode(Pch2, INPUT); // declare the port as an INPUT
pinMode(DM1a,OUTPUT);
pinMode(DM1b,OUTPUT);
pinMode(DM2a,OUTPUT);
pinMode(DM2b,OUTPUT);
pinMode(VM1,OUTPUT);
pinMode(VM2,OUTPUT);
voertuigstop();
}
void loop() {
// read the rc value from the Arduino:
CH1 = pulseIn(Pch1,HIGH,25000);
CH2 = pulseIn(Pch2,HIGH,25000);
if (CH1>0)
{
/*
Serial.println("");
Serial.print(CH1);
Serial.print(" ");
Serial.print(CH2);
Serial.print(" ");
// look if the robot must move
*/
omzetting();
/*
Serial.print("VRR =");
Serial.print(VRR);// vooruit of achteruit
Serial.print(" Vs ="); //scherpte bocht
Serial.print(VS);
*/
// look if the robot must make a turn
richting();
void omzetting()
{
// look for the settings
if (CH1>Pulsregel1[0]&&CH1<=Pulsregel1[1]){VRR=Pulsregel1[2];VS=Pulsregel1[3];}
if (CH1>Pulsregel2[0]&&CH1<=Pulsregel2[1]){VRR=Pulsregel2[2];VS=Pulsregel2[3];}
if (CH1>Pulsregel3[0]&&CH1<=Pulsregel3[1]){VRR=Pulsregel3[2];VS=Pulsregel3[3];}
if (CH1>Pulsregel4[0]&&CH1<=Pulsregel4[1]){VRR=Pulsregel4[2];VS=Pulsregel4[3];}
if (CH1>Pulsregel5[0]&&CH1<=Pulsregel5[1]){VRR=Pulsregel5[2];VS=Pulsregel5[3];}
if (CH1>Pulsregel6[0]&&CH1<=Pulsregel6[1]){VRR=Pulsregel6[2];VS=Pulsregel6[3];}
if (CH1>Pulsregel7[0]&&CH1<=Pulsregel7[1]){VRR=Pulsregel7[2];VS=Pulsregel7[3];}
if (CH1>Pulsregel8[0]&&CH1<=Pulsregel8[1]){VRR=Pulsregel8[2];VS=Pulsregel8[3];}
if (CH1>Pulsregel9[0]&&CH1<=Pulsregel9[1]){VRR=Pulsregel9[2];VS=Pulsregel9[3];}
if (CH1>Pulsregel10[0]&&CH1<=Pulsregel10[1]){VRR=Pulsregel10[2];VS=Pulsregel10[3];}
if (CH1>Pulsregel11[0]&&CH1<=Pulsregel11[1]){VRR=Pulsregel11[2];VS=Pulsregel11[3];}
}
void richting()
{
if (CH2>Puls1[0]&&CH2<=Puls1[1]){VR=Puls1[2];VM0=Puls1[3];}// links
if (CH2>Puls2[0]&&CH2<=Puls2[1]){VR=Puls2[2];VM0=Puls2[3];}
if (CH2>Puls3[0]&&CH2<=Puls3[1]){VR=Puls3[2];VM0=Puls3[3];}
if (CH2>Puls4[0]&&CH2<=Puls4[1]){VR=Puls4[2];VM0=Puls4[3];}
if (CH2>Puls5[0]&&CH2<=Puls5[1]){VR=Puls5[2];VM0=Puls5[3];}//rust
if (CH2>Puls6[0]&&CH2<=Puls6[1]){VR=Puls6[2];VM0=Puls6[3];}
if (CH2>Puls7[0]&&CH2<=Puls7[1]){VR=Puls7[2];VM0=Puls7[3];}
if (CH2>Puls8[0]&&CH2<=Puls8[1]){VR=Puls8[2];VM0=Puls8[3];}
if (CH2>Puls9[0]&&CH2<=Puls9[1]){VR=Puls9[2];VM0=Puls9[3];}//rechts
}
void vertalen()
{
// dan de draairichting per moter instellen
if (VRR==0) // op de plek sturen
{
if (VM0==0){VS=0;}
if (VM0==1){VS=100;}
if (VM0==2){VS=150;}
if (VM0==3){VS=200;}
if (VM0==4){VS=255;}
if (VR==1){MDR1=1;MDR2=2;} // rechts
if (VR==2){MDR1=2;MDR2=1;} // links
if (VR==0){MDR1=0;MDR2=0;} // stop
// als laatste de snelheid per moter instellen
// motorsnelheid voertuig snelheid
MS1=VS;
MS2=VS;
}
if (VRR>0) //rijdend sturen
{
MS1=VS;
MS2=VS;
// bocht links of rechts
if (VRR==1){MDR1=1;MDR2=1;} // vooruit
if (VRR==2){MDR1=2;MDR2=2;} // achteruit
// scherpte van de bocht
if (VR==2)
{
if (VM0==1){MS1=(MS2/5)*4;}
if (VM0==2){MS1=(MS2/5)*3;}
if (VM0==3){MS1=(MS2/5)*2;}
if (VM0==4){MS1=(MS2/5);}
}
if (VR==1)
{
if (VM0==1){MS2=(MS1/5)*4;}
if (VM0==2){MS2=(MS1/5)*3;}
if (VM0==3){MS2=(MS1/5)*2;}
if (VM0==4){MS2=MS1/5;}
}
}
// einde vrr>0
}
void doehet()
{
// draairichting per moter
if (MDR1==0){digitalWrite(DM1b,LOW);digitalWrite(DM1a,LOW);}
if (MDR2==0){digitalWrite(DM2b,LOW);digitalWrite(DM2a,LOW);}
if (MDR1==1){digitalWrite(DM1b,LOW);digitalWrite(DM1a,HIGH);}
if (MDR1==2){digitalWrite(DM1a,LOW);digitalWrite(DM1b,HIGH);}
if (MDR2==1){digitalWrite(DM2b,LOW);digitalWrite(DM2a,HIGH);}
if (MDR2==2){digitalWrite(DM2a,LOW);digitalWrite(DM2b,HIGH);}
//sound
vertr=50;
snelh=((MS1+MS2)/2)*0.14;
snelh=round(snelh);
vertr=vertr-snelh;
tone(11,30,30);
delay(vertr);
tone(10,40,40);
delay(vertr);
//motoren
analogWrite(VM1,MS1);
analogWrite(VM2,MS2);
}