This shows you the differences between two versions of the page.
pm:prj2021:alazar:rc_offroad_car [2021/04/25 21:47] ioan_robert.gogete |
pm:prj2021:alazar:rc_offroad_car [2021/05/31 18:25] (current) ioan_robert.gogete [Concluzii] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Introducere ====== | + | ====== RC Offroad Car ====== |
- | O sa contruiesc masina de teren controlata bluetooth prin aplicatie cu senzor de proximitate pentru oprire de urgenta | + | ===== Autor ===== |
+ | Robert Gogete 331CB | ||
- | ====== Componente folosite: ====== | + | ===== Introducere ===== |
- | Arduino pro micro, acumulator 5V, bluetooth HC-05, Driver motoare, senzor de proximitate | + | Masina controlata de la distanta prin bluetooth. |
+ | |||
+ | ===== Descriere generală ===== | ||
+ | |||
+ | O sa contruiesc masina de teren controlata bluetooth prin aplicatie android, cu senzor de proximitate pentru oprire de urgenta. | ||
+ | Masina era foarte greu de controlat cand am cumparat-o, avand doar acceleratie digitala, neputand fi modificata viteza. Pe langa asta | ||
+ | eu o loveam de multe ori in obiecte asa ca am decis sa ii adaug un senzor de proximitate prin care sa franez de urgenta. | ||
+ | |||
+ | ===== Schemă bloc ===== | ||
+ | |||
+ | {{:pm:prj2021:alazar:schemablocv2_gogeterobert331cb.png?200|}} | ||
+ | |||
+ | ===== Hardware Design ===== | ||
+ | |||
+ | Componente folosite: | ||
+ | * Arduino pro micro | ||
+ | * acumulator 5V | ||
+ | * bluetooth HC-05 | ||
+ | * Driver motoare | ||
+ | * senzor de proximitate | ||
+ | * 3 motoare 5V | ||
+ | |||
+ | |||
+ | {{:pm:prj2021:alazar:schemabloc_gogeterobert331cb.png?200|}} | ||
+ | |||
+ | ===== Software Design ===== | ||
+ | |||
+ | <code> | ||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | Serial1.begin(9600); | ||
+ | pinMode(MOTORS, OUTPUT); | ||
+ | pinMode(MOTORS_DIRECTION, OUTPUT); | ||
+ | pinMode(SERVO_DIRECTION, OUTPUT); | ||
+ | pinMode(SERVO_DIRECTION_SPEED, OUTPUT); | ||
+ | pinMode(PROXIMITY_SENSOR, INPUT_PULLUP); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | readInput(); | ||
+ | resetAtInactivity(); | ||
+ | setMotorSpeed(); | ||
+ | setDirection(); | ||
+ | } | ||
+ | |||
+ | void resetAtInactivity() | ||
+ | { | ||
+ | if (millis() - time > 200) | ||
+ | { | ||
+ | controller_y = 50; | ||
+ | controller_x = 50; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void readInput() | ||
+ | { | ||
+ | if(Serial1.available()) | ||
+ | { | ||
+ | time = millis(); | ||
+ | incoming_value = Serial1.read(); | ||
+ | |||
+ | switch(incoming_value) | ||
+ | { | ||
+ | case 'X': | ||
+ | value_type = 1; | ||
+ | setControllerCoordinates(); | ||
+ | controller_x_auxiliary = 0; | ||
+ | break; | ||
+ | case 'Y': | ||
+ | value_type = 2; | ||
+ | controller_y_auxiliary = 0; | ||
+ | break; | ||
+ | default: | ||
+ | switch(value_type) | ||
+ | { | ||
+ | case 1: | ||
+ | controller_x_auxiliary *= 10; | ||
+ | controller_x_auxiliary += incoming_value - '0'; | ||
+ | break; | ||
+ | case 2: | ||
+ | controller_y_auxiliary *= 10; | ||
+ | controller_y_auxiliary += incoming_value - '0'; | ||
+ | break; | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setMotorSpeed() | ||
+ | { | ||
+ | int clearPath = digitalRead(PROXIMITY_SENSOR); | ||
+ | Serial.println(clearPath); | ||
+ | |||
+ | if (controller_y <= 50 && clearPath) | ||
+ | { | ||
+ | analogWrite(MOTORS, controller_y * 255 / 50); | ||
+ | digitalWrite(MOTORS_DIRECTION, HIGH); | ||
+ | } | ||
+ | else if (controller_y > 50) | ||
+ | { | ||
+ | analogWrite(MOTORS, (controller_y - 50) * 255 / 50); | ||
+ | digitalWrite(MOTORS_DIRECTION, LOW); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | analogWrite(MOTORS, 255); | ||
+ | digitalWrite(MOTORS_DIRECTION, HIGH); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setDirection() | ||
+ | { | ||
+ | if (controller_x < 25) | ||
+ | { | ||
+ | digitalWrite(SERVO_DIRECTION, HIGH); | ||
+ | digitalWrite(SERVO_DIRECTION_SPEED, LOW); | ||
+ | } | ||
+ | else if (controller_x > 75) | ||
+ | { | ||
+ | digitalWrite(SERVO_DIRECTION, LOW); | ||
+ | digitalWrite(SERVO_DIRECTION_SPEED, HIGH); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | digitalWrite(SERVO_DIRECTION, LOW); | ||
+ | digitalWrite(SERVO_DIRECTION_SPEED, LOW); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setControllerCoordinates() | ||
+ | { | ||
+ | controller_x = controller_x_auxiliary; | ||
+ | controller_y = controller_y_auxiliary; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | {{:pm:prj2021:alazar:rcoffroadcar_robertgogete331cb_car1.jpg?200|}} | ||
+ | {{:pm:prj2021:alazar:rcoffroadcar_robertgogete331cb_car2.jpg?200|}} | ||
+ | |||
+ | Link catre video cu demo (am filmat masinuta in timp ce o controlam din telefon): [[https://mega.nz/file/IpAE2TqA#ABH6GDGrwyVRfZCJEqUFGSODR-stFDeneov0merYs3o]] | ||
+ | ===== Concluzii ===== | ||
+ | |||
+ | Proiect pe care l-am facut din placere, din care simt ca am invatat mai multa electronica decat in 2 cursuri. | ||
+ | ===== Download ===== | ||
+ | Export în [[https://ocw.cs.pub.ro/courses/pm/prj2021/alazar/rc_offroad_car?do=export_pdf| PDF]] |