Autor: Andrei Diaconu
Proiectul are ca scop construirea unui scaun cu rotile controlat prin bluetooth de pe un telefon cu sistem de operare Android.
Utilizatorul va controla scaunul cu o aplicatie instalata pe un telefon cu Android. Acesta va avea un senzor cu ajutorul caruia vor fi evitate coliziunile, atunci cand scaunul se apropie de un obstacol acesta se va opri si nu va mai putea inainta. Scaunul este echipat si cu un claxon care va fi actionat prin apasarea unui buton.
#include <SoftwareSerial.h> SoftwareSerial hc05(0, 1);
int motorLeft1 = 2; int motorLeft2 = 3; int motorRight1 = 4; int motorRight2 = 5;
int trigPin = 9; Trig Pin int echoPin = 8; Echo Pin int distance; long duration; int light = 6; int led = 0; int buzzer = 7; char cmd;
void setup() {
Serial.begin(9600); hc05.begin(9600); pinMode(motorLeft1, OUTPUT); pinMode(motorLeft2, OUTPUT); pinMode(motorRight1, OUTPUT); pinMode(motorRight2, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(light, OUTPUT); pinMode(buzzer, OUTPUT);
}
void loop() {
if (led == 0) { digitalWrite(light, HIGH); led = 1; delay(1000); } else if (led == 1) { digitalWrite(light, LOW); led = 0; delay(1000); } if(hc05.available() > 0){ cmd = hc05.read(); Serial.write(Serial.read()); } else { cmd = 'x'; } if(cmd == 'Y'){ tone(buzzer, 1000); delay(1000); noTone(buzzer); } digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance = duration * 0.034 / 2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); if (distance <= 20 ) { if (cmd == 'B') { digitalWrite(motorLeft1, HIGH); digitalWrite(motorLeft2, LOW); digitalWrite(motorRight1, LOW); digitalWrite(motorRight2, HIGH); analogWrite(10, 200); //ENA pin analogWrite(11, 200); //ENB pin } if (cmd == 'S') { digitalWrite(motorLeft1, LOW); digitalWrite(motorLeft2, LOW); digitalWrite(motorRight1, LOW); digitalWrite(motorRight2, LOW); analogWrite(10, 0); //ENA pin analogWrite(11, 0); //ENB pin } } else{ if (cmd == 'F') { digitalWrite(motorLeft1, LOW); digitalWrite(motorLeft2, HIGH); digitalWrite(motorRight1, HIGH); digitalWrite(motorRight2, LOW); analogWrite(10, 200); //ENA pin analogWrite(11, 200); //ENB pin } if (cmd == 'B') { digitalWrite(motorLeft1, HIGH); digitalWrite(motorLeft2, LOW); digitalWrite(motorRight1, LOW); digitalWrite(motorRight2, HIGH); analogWrite(10, 200); //ENA pin analogWrite(11, 200); //ENB pin }
if (cmd == 'L') { digitalWrite(motorLeft1, LOW); digitalWrite(motorLeft2, HIGH); digitalWrite(motorRight1, LOW); digitalWrite(motorRight2, LOW); analogWrite(10, 200); //ENA pin analogWrite(11, 200); //ENB pin } if (cmd == 'R') {
digitalWrite(motorLeft1, LOW); digitalWrite(motorLeft2, LOW); digitalWrite(motorRight1, HIGH); digitalWrite(motorRight2, LOW); analogWrite(10, 200); //ENA pin analogWrite(11, 200); //ENB pin }
if (cmd == 'S') { digitalWrite(motorLeft1, LOW); digitalWrite(motorLeft2, LOW); digitalWrite(motorRight1, LOW); digitalWrite(motorRight2, LOW); analogWrite(10, 0); //ENA pin analogWrite(11, 0); //ENB pin } }
}