Barca cu telecomanda
Introducere
Am ales sa fac o barca cu telecomanda pentru ca de mic am fost pasionat de ele, iar cursul de PM mi-a oferit oportunitatea sa imi creez eu una.
Barca va fi controlata prin infra-rosu. Aceasta va avea un sistem de directie actionat de un motor, propulsia va fi actionata de asemenea cu alte doua motoare. Inca nu m-am hotarat dar tind sa merg si spre implementarea unor faruri care vor fi pornite tot prin infra-rosu.
Descriere generală
Schema bloc:
Hardware Design
Lista componente:
Unordered List Item
Arduino UNO;
Modul driver motoare L298N;
Modul Bluetooth;
ON/OFF switch (pt a porni/opri masinuta inca ma gandesc pt asta);
rezistente;
cabluri;
2x motoare DC;
2x sau 4x RGB Led (inca nu-s sigur);
Diferite componente pt constructie: carbon, roti dintate etc.
Software Design
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
librării şi surse 3rd-party (e.g. Procyon AVRlib)
algoritmi şi structuri pe care plănuiţi să le implementaţi
(etapa 3) surse şi funcţii implementate
Codul care animeaza proiectul a fost scris in Arduino IDE.
Pentru controlarea barcii se foloseste o telecomanda cu IR.
Proiectul este compatibil si cu HC-05 Bluetooth (asa trebuia facut initial, dar mi s-a ars modulul Bluetooth).
Biblioteci folosite:
Arduino.h → folosit pentru a importa functionalitatile de baza ale Arduino-ului.
Servo.h → folosit pentru a actiona servo motorul.
IRremote.h → folosit pentru a interactiona cu modulul IR si a capta datele primite.
Cod:
#include <Arduino.h>
#include <IRremote.h>
#include <Servo.h>
IRrecv IR(3);
Servo myservo;
// pinii motoarelor
int moto1 = 4;
int moto2 = 5;
int moto11 = 6;
int moto22 = 7;
// pinul pentru becuri
int bec = 13;
// pozitia initiala a carmei, pt a merge stanga/dreapta
int pos = 90;
void setup() {
IR.enableIRIn();
// pentru a controla componentele setez pinii placutei ca output
pinMode(bec, OUTPUT);
pinMode(moto1, OUTPUT);
pinMode(moto2, OUTPUT);
pinMode(moto11, OUTPUT);
pinMode(moto22, OUTPUT);
myservo.attach(9);
Serial.begin(9600);
}
void loop() {
if(IR.decode())
{ // citesc informatia de la modul IR si in functie de comanda, fac o actiune
Serial.println(IR.decodedIRData.decodedRawData,HEX);
if(IR.decodedIRData.decodedRawData == 0xEA15FF00)
{ // aprind bec
digitalWrite(bec, HIGH);
}
if(IR.decodedIRData.decodedRawData == 0xF807FF00)
{ // sting bec
digitalWrite(bec, LOW);
}
if(IR.decodedIRData.decodedRawData == 0xE718FF00)
{ // merg fata
digitalWrite(moto1, HIGH);
digitalWrite(moto2, LOW);
digitalWrite(moto11, LOW);
digitalWrite(moto22, HIGH);
}
if(IR.decodedIRData.decodedRawData == 0xAD52FF00)
{ //merg spate
digitalWrite(moto1, LOW);
digitalWrite(moto2, HIGH);
digitalWrite(moto11, HIGH);
digitalWrite(moto22, LOW);
}
if(IR.decodedIRData.decodedRawData == 0xE31CFF00)
{ //opresc tot
digitalWrite(moto1, LOW);
digitalWrite(moto2, LOW);
digitalWrite(moto11, LOW);
digitalWrite(moto22, LOW);
//readuc carma la pozitia de inainte
myservo.write(90);
}
if(IR.decodedIRData.decodedRawData == 0xF708FF00)
{ // cotesc stanga
myservo.write(25);
}
if(IR.decodedIRData.decodedRawData == 0xA55AFF00)
{ // cotesc dreapta
myservo.write(145);
}
//delay la citirea comenzilor de la IR
delay(1500);
IR.resume();
}
}
Rezultate Obţinute
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF