Robot comandat prin bluetooth cu Android
- 24 Ianuarie 2014
- , autor Adrian
In micul meu tutorial de astazi va voi invata cum sa faceti un robot controlat prin bluetooth de pe un telefon cu Android.
Materiale
- kitul Robotului care il gasiti la ROBOFUN
- 4 Distantiere
- 1 sasiu din policarbonat transparent sau orice alt material doriti
- 2 Acumulatoare Li-po Kingmax
- 4 suruburi
- 4 piulite M3
Asamblare
Trebuie sa asamblati kitul robotului si taiati sasiul. Dimensiunile sunt l=11 si L=18(11X18).
Electronica
Infigeti L298 peste Arduino UNO ATENTIE!!!! cand veti alimenta robotul este necesar ca arduino sa fie alimentat de primul acumulator iar L298 sa fiealimentat din celalat acumulator Bluetooth Mate Se conecteaza la L298 astfel GND->GND(L298) VIN->5V TX->RX(L298) RX este marcat pe driver cu 0 RX->TX(L298) iar TX este marcat cu cifra 1 CTS-1->RTS-o(Ambele sunt de pe bluetooth mate) montati toata partea electronica pe sasiu. Urmeaza sa incarcati codul pe arduino:
Program1
Este pentru cei care vor sa il controleze din aplicatie:
int MOTOR1_PIN1 = 3; int MOTOR1_PIN2 = 5; int MOTOR2_PIN1 = 6; int MOTOR2_PIN2 = 9; #define DEBUG true #define STX 0x02 // Necesar pentru soft #define ETX 0x03 // Necesar pentru soft int i=0; byte cmd[5] = {0, 0, 0, 0,0}; // Aici se stocheaza valorle primite prin Bluetooth int x,y, A,B; void stopIfFault(); // Motor void setup() { Serial.begin(9600); // adjust to your Bluetooth card Serial.println("Johny Five"); } void loop() { if(Serial.available()) { // received from smartphone delay(5); cmd[0] = Serial.read(); if(DEBUG) Serial.println(cmd[0]); // to serial monitor if(cmd[0] == STX) { i=1; while(Serial.available() && ((cmd[i]=Serial.read()) != ETX)) { if(i>4) break; if(DEBUG) {Serial.print(i); Serial.print(": "); Serial.println(cmd[i]);} i++; } } // Cei 4 biti cititi sunt valori de voltaje, nu coordonate if (cmd[1]==0) x=cmd[2]-200; else if (cmd[1]==1) x=cmd[2]-72; else if (cmd[1]==2) x=cmd[2]+56; if (cmd[3]==0) y=cmd[4]-200; else if (cmd[3]==1) y=cmd[4]-72; else if (cmd[3]==2) y=cmd[4]+56; // pana aici am calculat valorile X,Y ale coordantelor joystick-ului Serial.print("X: "); Serial.println(x); Serial.print("Y: "); Serial.println(y); if (y>0) { if (x>0) { A=y; B=y-x; } else { A=x+y; B=y; } } else { if (x>0) { A=y; B=x+y; } else { A=y-x; B=y; } } // cu un algoritm matematic propriu am calculat valorile A si B pe care le trimit motoarelor pentru a functiona cum planuisem go (A*4, B*4); Serial.print("A: "); Serial.println(A); Serial.print("B: "); Serial.println(B); } delay(5); } void go(int speedLeft, int speedRight) { if (speedLeft > 0) { analogWrite(MOTOR1_PIN1, speedLeft); analogWrite(MOTOR1_PIN2, 0); } else { analogWrite(MOTOR1_PIN1, 0); analogWrite(MOTOR1_PIN2, -speedLeft); } if (speedRight > 0) { analogWrite(MOTOR2_PIN1, speedRight); analogWrite(MOTOR2_PIN2, 0); } else { analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, -speedRight); } }
Program2
Este pentru cei care vor sa ii puna leduri robotului in fata si in spate (sau doar in fata) daca aveti de exemplu 4 leduri puteti modifica in cod sa fie pinii 10,11,12 si 13 (eu mi-am pus doar 10 si 11 deoarece am cate doua circuite care functioneaza ca 1 singur adica este legat unu de altu iar din al doilea ies doar 2 fire care aprind 2 circuite,la fel si in spate) cand robotul merge in fata se vor aprinde cele din fata,cand merge in spate se vor aprinde cele din spate:
int MOTOR1_PIN1 = 3; int MOTOR1_PIN2 = 5; int MOTOR2_PIN1 = 6; int MOTOR2_PIN2 = 9; #define DEBUG true #define STX 0×02 // Necesar pentru soft #define ETX 0×03 // Necesar pentru soft int i=0; byte cmd[5] = {0, 0, 0, 0,0}; // Aici se stocheaza valorle primite prin Bluetooth int x,y, A,B; void stopIfFault(); // Motor void setup() { Serial.begin(9600); // adjust to your Bluetooth card Serial.println(“Johny Five”); pinMode(10,OUTPUT); pinMode(11,OUTPUT); } void loop() { if(Serial.available()) { // received from smartphone delay(5); cmd[0] = Serial.read(); if(DEBUG) Serial.println(cmd[0]); // to serial monitor if(cmd[0] == STX) { i=1; while(Serial.available() && ((cmd[i]=Serial.read()) != ETX)) { if(i>4) break; if(DEBUG) {Serial.print(i); Serial.print(“: “); Serial.println(cmd[i]);} i++; } } // Cei 4 biti cititi sunt valori de voltaje, nu coordonate if (cmd[1]==0) x=cmd[2]-200; else if (cmd[1]==1) x=cmd[2]-72; else if (cmd[1]==2) x=cmd[2]+56; if (cmd[3]==0) y=cmd[4]-200; else if (cmd[3]==1) y=cmd[4]-72; else if (cmd[3]==2) y=cmd[4]+56; // pana aici am calculat valorile X,Y ale coordantelor joystick-ului Serial.print(“X: “); Serial.println(x); Serial.print(“Y: “); Serial.println(y); if (y>0){ if (x>0){ A=y; B=y-x; } else{ A=x+y; B=y; } } else{ if (x>0){ A=y; B=x+y; } else{ A=y-x; B=y; } } // cu un algoritm matematic propriu am calculat valorile A si B pe care le trimit motoarelor pentru a functiona cum planuisem Serial.print(“A: “); Serial.println(A); Serial.print(“B: “); Serial.println(B); // AICI PORNIM MOTOARELE SI APRINDEM SI BECURILE if (A>0 && B>0){ digitalWrite(11, LOW); digitalWrite(10, HIGH); } else if (A<0 && B<0){ digitalWrite(10, LOW); digitalWrite(11, HIGH); } go (A*4, B*4); } delay(5); } void go(int speedLeft, int speedRight) { if (speedLeft > 0){ analogWrite(MOTOR1_PIN1, speedLeft); analogWrite(MOTOR1_PIN2, 0); } else { analogWrite(MOTOR1_PIN1, 0); analogWrite(MOTOR1_PIN2, -speedLeft); } if (speedRight > 0) { analogWrite(MOTOR2_PIN1, speedRight); analogWrite(MOTOR2_PIN2, 0); } else { analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, -speedRight); } }
Download aplicatie Android
Aplicatia o gasiti in Google Play: https://play.google.com/store/apps/details?id=org.projectproto.btjoystick
comentarii
kaewthep
please help me. sch 24v 10A
2016-01-15 15:45:07
Raspunde
Adauga un comentariu ...