Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:apredescu:masina_controlata_prin_bluetooth [2021/04/25 19:46]
stefan.radutoiu
pm:prj2021:apredescu:masina_controlata_prin_bluetooth [2021/06/04 13:37] (current)
stefan.radutoiu [Autor]
Line 1: Line 1:
 ===Masina controlata prin bluetooth cu senzori=== ===Masina controlata prin bluetooth cu senzori===
 +
 +====Autor====
 +[[:​stefan.radutoiu@stud.acs.pub.ro|Radutoiu Vlad]]
 +
 ===Introducere=== ===Introducere===
 Proiectul consta in realizarea unei masini controlate prin bluetooth de pe telefon care se poate deplasa in orice directie cu senzor de oprire in cazul de intalnire a unui obstacol. Proiectul consta in realizarea unei masini controlate prin bluetooth de pe telefon care se poate deplasa in orice directie cu senzor de oprire in cazul de intalnire a unui obstacol.
Line 12: Line 16:
  
 ===Schema Bloc=== ===Schema Bloc===
-{{:​pm:​prj2021:​apredescu:​schema_bloc_vladut.png?200|}}+{{:​pm:​prj2021:​apredescu:​schema_bloc_update_radutoiu.png?​200|}} 
 +{{:​pm:​prj2021:​apredescu:​car_photo.jpeg?​200|}} 
 + 
 +===Schema Electrica=== 
 +{{:​pm:​prj2021:​apredescu:​schema_masina.png?200|}}
  
 ===Componente Hardware=== ===Componente Hardware===
   * Arduino UNO   * Arduino UNO
-  * Modul Bluetooth +  * Modul Bluetooth ​HM-10 
-  * Modul Display cu 4 digiți +  * ECRAN LCD 1602 - CHIP 
-  * x motoare N20 cu roți dințate+  * x motoare N20 cu roți dințate
   * Servomotor   * Servomotor
   * Senzor ultrasonic   * Senzor ultrasonic
   * Power Switch   * Power Switch
 +  * Sasiu masina
 +
 +===Software Design===
 +  * Mediul de dezvoltare: Arduino IDE
 +  * Biblioteci incluse:​LiquidCrystal_I2C,​ SoftwareSerial,​ NewPing
 +  * Functii implementate:​
 +     * functia setup() initializeaza pinii de output pentru miscarea rotilor, initializeaza modulul de bluetooth pentru a primi comenzi si initializeaza conexiunea seriala la 9600 bps.
 +     * functia readPing este folosita pentru a citi distanta de pe senzorul ultrasonic
 +     * functia de loop citeste comnezi daca sunt primite pe modulul bluetooth si trateaza cazurile de miscare ale motoarelor. Comenzile de miscare sunt w,a,s,d iar pentru oprire este folosit x. Ecranul LCD afiseaza mereu distanta fata de obiectul din fata. Daca in fata mai sunt mai putin de 10 um masina se va opri si va afisa mesajul STOP.
 +
 +===Cod===
 +#include <​LiquidCrystal_I2C.h>​
 +#include <​NewPing.h>​
 +#include <​SoftwareSerial.h>​
 +
 +LiquidCrystal_I2C lcd(0x27,​20,​4);​
 +  // Motor A
 + 
 +int pwmA = 5;
 +int in1A = 4;
 +int in2A = 9;
 +
 +char command;
 +char mode;
 + 
 +// Motor B
 + 
 +int pwmB = 6;
 +int in1B = 7;
 +int in2B = 8;
 +int distance = 100;
 +
 +SoftwareSerial HM10(0, 1);
 +
 +#define trig_pin A1 //analog input 1
 +#define echo_pin A2 //analog input 2
 +#define maximum_distance 200
 +
 +int MotorSpeed1 = 0;
 +int MotorSpeed2 = 0;
 +NewPing sonar(trig_pin,​ echo_pin, maximum_distance);​ //sensor function
 +
 +void setup() {
 +  // put your setup code here, to run once:
 +  Serial.begin(9600);​
 +  HM10.begin(9600);​
 +  pinMode(pwmA,​ OUTPUT);
 +  pinMode(pwmB,​ OUTPUT);
 +  pinMode(in1A,​ OUTPUT);
 +  pinMode(in2A,​ OUTPUT);
 +  pinMode(in1B,​ OUTPUT);
 +  pinMode(in2B,​ OUTPUT);
 +}
 +
 +int readPing(){
 +  delay(70);
 +  int cm = sonar.ping_cm();​
 +  if (cm==0){
 +    cm=250;
 +  }
 +  return cm;
 +}
 +
 +void loop() {
 +  // put your main code here, to run repeatedly:
 +   ​HM10.listen(); ​
 +    if (HM10.available() > 0){
 +    command = HM10.read();​
 +    lcd.print(command);​
 +    delay(1000);​
 +  }
 +  else { 
 +  command = ' ';
 +  }
 +  lcd.init(); ​
 +  lcd.backlight();​
 +  lcd.clear();​
 +  lcd.setCursor(4,​0);​
 +  distance = readPing();
 +  lcd.print(distance);​
 +
 +  if(distance < 10 && command != '​s'​ && MotorSpeed1 !=0){
 +    MotorSpeed1 = 0;
 +    MotorSpeed2 = 0;
 +    digitalWrite(in1A,​ HIGH);
 +    digitalWrite(in2A,​ LOW);
 +    digitalWrite(in1B,​ LOW);
 +    digitalWrite(in2B,​ HIGH);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​STOP"​);​
 +    delay(1000);​
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    }
 +
 +  if (command == '​w'&&​ distance > 10){
 +    MotorSpeed1 += 100;
 +    MotorSpeed2 += 100;
 +    digitalWrite(in1A,​ LOW);
 +    digitalWrite(in2A,​ HIGH);
 +    digitalWrite(in1B,​ HIGH);
 +    digitalWrite(in2B,​ LOW);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​FORWARD"​);​
 +    delay(1000);​
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    ​
 +  }
 +  if (command == '​s'​ ){
 +    MotorSpeed1 -= 100;
 +    MotorSpeed2 -= 100;
 +    digitalWrite(in1A,​ HIGH);
 +    digitalWrite(in2A,​ LOW);
 +    digitalWrite(in1B,​ LOW);
 +    digitalWrite(in2B,​ HIGH);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​BACKWARD"​);​
 +    delay(1000);​
 +    MotorSpeed1 = 0;
 +    MotorSpeed2 = 0;
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    ​
 +  }
 +  if (command == '​x'​ ){
 +    MotorSpeed1 = 0;
 +    MotorSpeed2 = 0;
 +    digitalWrite(in1A,​ HIGH);
 +    digitalWrite(in2A,​ LOW);
 +    digitalWrite(in1B,​ LOW);
 +    digitalWrite(in2B,​ HIGH);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​STOP"​);​
 +    delay(1000);​
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    ​
 +  }
 +// turn left
 +    if (command == '​a'​){
 +    MotorSpeed1 = 100;
 +    MotorSpeed2 = 100;
 +    digitalWrite(in1A,​ LOW);
 +    digitalWrite(in2A,​ HIGH);
 +    digitalWrite(in1B,​ LOW);
 +    digitalWrite(in2B,​ HIGH);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​LEFT"​);​
 +    delay(1000);​
 +    MotorSpeed1 = 0;
 +    MotorSpeed2 = 0;
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    ​
 +  }
 + // turn right
 +    if (command == '​d'​){
 +    MotorSpeed1 = 100;
 +    MotorSpeed2 = 100;
 +    digitalWrite(in1A,​ HIGH);
 +    digitalWrite(in2A,​ LOW);
 +    digitalWrite(in1B,​ HIGH);
 +    digitalWrite(in2B,​ LOW);
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    lcd.clear();​
 +    lcd.print("​RIGHT"​);​
 +    delay(1000);​
 +    MotorSpeed1 = 0;
 +    MotorSpeed2 = 0;
 +    analogWrite(pwmA,​ MotorSpeed1);​
 +    analogWrite(pwmB,​ MotorSpeed2);​
 +    ​
 +  }
 +
 +
 +  delay(100);
 +
 +  ​
 +  ​
 +}
 +
 +===Video===
 +[[https://​www.youtube.com/​watch?​v=rV9QvpS_szI|Video Demo]]
 +
 +===Concluzii===
 +Proiectul nu a prezentat dificultati mari pe partea de hardware, conexiunile fiind destul de simple de realizat. Partea de software a prezentat probleme mai mari la conectarea cu modulul de bluetooth. Consider ca am invatat multe lucruri noi din acest proiect.
 +
 +
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
 +
  
pm/prj2021/apredescu/masina_controlata_prin_bluetooth.1619369205.txt.gz · Last modified: 2021/04/25 19:46 by stefan.radutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0