Jump to content

  • Log In with Google      Sign In   
  • Create Account

Photo

Arduino Nano


  • Please log in to reply
73 replies to this topic

#61 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 16 October 2017 - 03:21 PM

Da. Functioneaza tot un singur motor care merge intr-un sens, schimba sensul dupa care face o mica pauza. Pauza o face intr-o singura parte.

In ceea ce priveste legatura intre placa si shield, nu stiu care-s pinii. Asta deoarece Shieldul se suprapune perfect pe placa .Raman doi pini pe o parte si alti doi pe cealalta parte a placii care nu se pupa cu cei ai sheildului.



Cu_reclama

Cu_reclama
  • Membri

#62 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 16 October 2017 - 03:32 PM

OK, este un pas inainte.

Acum inlocuieste asta:

AF_DCMotor motorRight(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motorLeft(3, MOTOR12_64KHZ); // create motor #3, 64KHz pwm

din sketch-ul de mai-nainte (cel cu comenzile seriale), cu asta:

AF_DCMotor motorRight(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motorLeft(2, MOTOR12_64KHZ); // create motor #3, 64KHz pwm

si conecteaza doua motoare la bornele numerotate cu "11" si "12" si verifica sktch-ul cel lung cu comenzile seriale. Ce se intampla cu motorasele?



#63 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 16 October 2017 - 04:15 PM

Am modificat, dar degeaba, nu merge nimic.

La cel de al doilea , am incercat si AF_DCMotor motorLeft(2, MOTOR12_64KHZ);// create motor#2, 64KHZ pwm

//Libraries
#include <AFMotor.h>
 
//Objects
AF_DCMotor motorRight(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motorLeft(2, MOTOR12_64KHZ); // create motor #3, 64KHz pwm
 
//Constants and variable
char dataIn = 'S';
char determinant;
char det;
int vel = 0; //Bluetooth Stuff
 
 
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps

Edited by pauly, 16 October 2017 - 04:17 PM.


#64 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 16 October 2017 - 05:33 PM

Pe nici una din literele  F; B; L; R; I; J; G; H; si S, nu se intampla nimic. Pe pinul 11 tensiunea este 0, iar pe pinul 12, tensiunea este de 0,6 V aproximativ



#65 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 17 October 2017 - 07:02 AM

Buna dimineata pauly. In sketch-ul folosit am omis un lucru important: la viteza zero niciun motor nu va face altceva decat sa fie oprit. Te rog modifica valoarea variabilei "vel" din "0" in "100". Mai introdu o variabila de tip "int", denumita "vel_stop", a carei valoare este "0". Aceasta ultima variabila o vei folosi aici:
 

//Constants and variable
char dataIn = 'S';
char determinant;
char det;
int vel = 100;<-- Asta este valoarea vitezei motoraselor. Valoare de la 0 la 255. 
int vel_stop = 0; 
/*------------------Grupul de mai sus va inlocui ceea ce este in prezent in sketch in aceeasi pozitie----------*/

case 'S': // S, stop
motorRight.setSpeed(vel_stop);
motorLeft.setSpeed(vel_stop);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
det = check();
break;

Asta pentru a opri motoarele



#66 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 17 October 2017 - 09:21 AM

Buna dimineata. Am facut si aceasta modificare, dar din pacate fara nici un rezultat. Nu am inteles ce trebuie sa modific in  case,,S"

 

case 'S': // S, stop
motorRight.setSpeed(vel_stop);
motorLeft.setSpeed(vel_stop);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
det = check();
break;

 

Sunt aceleasi date.  Ceva nu este in regula. Dar ce anume ar putea fi, tinand cont de faptul ca pe schita   Motor Party, functioneaza.

Am incercat sa fac unele modificari (nici nu mai stiu unde) si am obtinut rotirea motorului in unul din sensuri cu trei, patru opriri, iar in celalalt sens, o singura rotire scurta. 

Toate aceste schite pot fi sterse pur si simplu din ,,C" > utilizatori > Documente > Arduino > Librarii ? 

Attached Files



#67 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 17 October 2017 - 09:58 AM

@pauly:

Am testat codul si pare ok.

Incearca asta:


/*
Author: Marcelo Moraes

                    
This project contains public domain code.
The modification is allowed without notice.

*/

//Libraries
#include <AFMotor.h>

//Objects
AF_DCMotor motorRight(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motorLeft(2, MOTOR12_64KHZ); // create motor #3, 64KHz pwm

//Constants and variable
char dataIn = 'S';
char determinant;
char det;
int vel = 100; //Bluetooth Stuff
int vel_stop = 0;

void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps

//Initalization messages
Serial.println("ArduinoBymyself - ROVERBot");
Serial.println(" AF Motor test!");

//turn off motors
motorRight.setSpeed(0);
motorLeft.setSpeed(0);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);



}

void loop() {
det = check(); //call check() subrotine to get the serial code

//serial code analysis
switch (det){
case 'F': // F, move forward   //<-- Litera F trebuie transmisa si la fel cu celelalte, pe rand
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
//det = check();
break;

case 'B': // B, move back
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel);
motorRight.run(BACKWARD);
motorLeft.run(BACKWARD);
//det = check();
break;

case 'L':// L, move wheels left
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel/4);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
//det = check();
break;

case 'R': // R, move wheels right
motorRight.setSpeed(vel/4);
motorLeft.setSpeed(vel);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
//det = check();
break;

case 'I': // I, turn right forward
motorRight.setSpeed(vel/2);
motorLeft.setSpeed(vel);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
//det = check();
break;

case 'J': // J, turn right back
motorRight.setSpeed(vel/2);
motorLeft.setSpeed(vel);
motorRight.run(BACKWARD);
motorLeft.run(BACKWARD);
//det = check();
break;

case 'G': // G, turn left forward
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel/2);
motorRight.run(FORWARD);
motorLeft.run(FORWARD);
//det = check();
break;

case 'H': // H, turn left back
motorRight.setSpeed(vel);
motorLeft.setSpeed(vel/2);
motorRight.run(BACKWARD);
motorLeft.run(BACKWARD);
//det = check();
break;

case 'S': // S, stop
motorRight.setSpeed(vel_stop);
motorLeft.setSpeed(vel_stop);
motorRight.run(RELEASE);
motorLeft.run(RELEASE);
//det = check();
break;



}
}

int check(){
if (Serial.available() > 0){// if there is valid data in the serial port
dataIn = Serial.read();// stores data into a variable

//check the code
if (dataIn == 'F'){//Inainte
determinant = 'F';
}
else if (dataIn == 'B'){//Inapoi
determinant = 'B';
}
else if (dataIn == 'L'){//Stanga
determinant = 'L';
}
else if (dataIn == 'R'){//Dreapta
determinant = 'R';
}
else if (dataIn == 'I'){//Inainte si la dreapta
determinant = 'I';
}
else if (dataIn == 'J'){//Inapoi si la dreapta
determinant = 'J';
}
else if (dataIn == 'G'){//Inainte si la stanga
determinant = 'G';
}
else if (dataIn == 'H'){//Inapoi si la stNGA
determinant = 'H';
}
else if (dataIn == 'S'){//Stop
determinant = 'S';
}
else if (dataIn == '0'){//VITEZA = 0
vel = 0;
}
else if (dataIn == '1'){//VITEZA = 25
vel = 25;
}
else if (dataIn == '2'){//VITEZA = 50
vel = 50;
}
else if (dataIn == '3'){//VITEZA = 75
vel = 75;
}
else if (dataIn == '4'){//VITEZA = 100
vel = 100;
}
else if (dataIn == '5'){//VITEZA = 125
vel = 125;
}
else if (dataIn == '6'){//VITEZA = 150
vel = 150;
}
else if (dataIn == '7'){//VITEZA = 175
vel = 175;
}
else if (dataIn == '8'){//VITEZA = 200
vel = 200;
}
else if (dataIn == '9'){//VITEZA = 225
vel = 225;
}
else if (dataIn == 'q'){//VITEZA = 255
vel = 255;
}
else if (dataIn == 'U'){//Lumini spate pornite
determinant = 'U';
}
else if (dataIn == 'u'){//Lumini spate stinse
determinant = 'u';
}
else if (dataIn == 'W'){//Lumini fata pornite
determinant = 'W';
}
else if (dataIn == 'w'){//Lumini fata oprite
determinant = 'w';
}
else if (dataIn == 'V'){//Claxon pornit
determinant = 'V';
}
else if (dataIn == 'v'){//Claxon oprit
determinant = 'v';
}
else if (dataIn == 'X'){//Extra On
determinant = 'X';
}
else if (dataIn == 'x'){//Extra Off
determinant = 'x';
}
}
return determinant;
}

si dupa incarcarea sketch-ului transmite pe seriala literele, cu majuscule, R, F, B, J (asta doar ca exemplu) Spune-ne ce comportament au motoarele.



#68 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 17 October 2017 - 10:34 AM

OK. Da, acum, cu R se invarte motorul 1 in continuu, cu F se invarte motorul 1 si doi in continuu, cu B se invart tot cele doua motoare in continuu, iar cu J se invarte motorul 1, iar la motorul 2 se aude o bazaiala (un zgomot) dar nu se invarte.  Nu am avut timp sa verific tensiunea, trebuie sa plec pentru a lua nepotelul. O sa revin imediat ce ma intorc.



#69 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 17 October 2017 - 12:24 PM

Cu comanda "B" ar trebui ca motoarele sa se invarta invers fata de sensul dat prin comanda "F". In cazul comenzii "J" este normal ca doar un motor sa functioneze, iar celalat sa stea. Foloseste si restul comenzilor pentru a te familiariza cu regimurile de functinare ale motoarelor (schimbare de directie, viraje, schimbarea vitezei de deplasare, s.a.m.d.)

In postarea mea de mai sus am tradus semnificatia comenzilor.



#70 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 17 October 2017 - 12:45 PM

Am revenit si masurat tensiunile.

R = motor 1 = + 2,2V;  motor 2 = + 0,7V

F = motor 1 = + 2,2V;  motor 2 = + 2,2V

B = motor 1 = - 2,2V  motor 2 = - 2,2V

J = motor 1 = - 2,2V  motor 2 = - 1,2V    

 

Tensiunea de alimentare este doar de 5,8V

 

Cum fac sa adaug si celelalte doua motoare?



#71 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 17 October 2017 - 12:55 PM

Pe celelalte doua motoare le conectezi la bornele opuse si introduci asta in sketch, acolo unde sunt si celelalte doua comenzi:

AF_DCMotor motorBackRight(3, MOTOR12_64KHZ); // create motor #3, 64KHz pwm
AF_DCMotor motorBackLeft(4, MOTOR12_64KHZ); // create motor #4, 64KHz pwm

si completezi sketch-ul cu comenzi similare celor existente deja, astfel:

case 'C': // C, turn right back
motorBackRight.setSpeed(vel/2);
motorBackLeft.setSpeed(vel);
motorBackRight.run(BACKWARD);
motorBackLeft.run(BACKWARD);
//det = check();
break;
// respectiv in functia int check()
else if (dataIn == 'C'){//turn right back
determinant = 'C';
}


#72 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 17 October 2017 - 01:08 PM

OK. Am sa incerc si asta, dar nu acum. Simt ca o iau din loc.  In ce m-am bagat?  

Am vazut ceva si despre

 

 //Constants and variable

char dataIn = 'S';
char determinant;
char det;
int vel = 100; //Bluetooth Stuff
int vel_stop = 0;

 

Sa inteleg ca are si pentru Bluetooth?

Mai are ceva pentru vre-un senzor ?

 

Oricum, eu va multumesc pentru tot sprijinul ce mi l-ati acordat, de rabdarea de care ati dat dovada.



#73 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,968 posts
  • Locatie:Bucuresti

Posted 17 October 2017 - 01:17 PM

Proiectul pe care doriti sa-l realizati este destul de complex si trebuie abordat pas cu pas.

In ce v-ati bagat? Intr-o lume frumoasa si plina de neprevazut!

Da, ar putea fi conectat si un bluetooth pe portul serial, cu conditia de a avea o aplicatie pe telefon care sa dea comenzi prin bluetooth, comenzi recunoscute de sketch.

Pana atunci incercati sa intelegeti cum functioneaza actualul sketch si pe la inceputul lunii noiembrie imi voi face timp sa realizam impreuna implementarea senzorilor PIR.

O zi buna



Cu_reclama

Cu_reclama
  • Membri

#74 OFFLINE   pauly

pauly

    Membru

  • Membru activ
  • PipPip
  • 172 posts
  • Locatie:Ploiesti

Posted 17 October 2017 - 01:42 PM

Am verificat tensiunile si am gasit;

F = motor 1 si 2 tensiune -      motor 3 si 4 tensiune +

B = Toate cele patru motoare au tensiune +

C = Motor 1 si 2 tensiune -      motor 3 si 4 tensiune +

L; R; I; J; G; H; S = Au tensiune doar motoare 1 si 2    Motoare 3 si 4 au tensiunea 0.

 

 

OK.  Acum dupa programare, scoaterea cablului din USB, cum pornesc Robotul?

Toate motoarele autensiunea 0

 

Multumesc mult pentru tot sprijinul acordat, pentru bunavointa, intelegere si de ce nu, rabdare. Mult noroc, sanatate si astept luna urmatoare. Pana atunci o sa fac tot fellul de incercari.   O zi buna! 


Edited by pauly, 17 October 2017 - 01:56 PM.


Cu_reclama

Cu_reclama
  • Membri




2 user(s) are reading this topic

0 members, 2 guests, 0 anonymous users