Robert Gogete 331CB
Masina controlata de la distanta prin bluetooth.
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.
Componente folosite:
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; }
Link catre video cu demo (am filmat masinuta in timp ce o controlam din telefon): https://mega.nz/file/IpAE2TqA#ABH6GDGrwyVRfZCJEqUFGSODR-stFDeneov0merYs3o
Proiect pe care l-am facut din placere, din care simt ca am invatat mai multa electronica decat in 2 cursuri.
Export în PDF