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