Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Studenti: Tudorache Alexandru-Gabriel, Vasile Bogdan-Catalin si Cozminca Ana Maria
Email: [email protected]
1. Rezumat, resurse materiale, timp/atributii echipa
2. Raport sintetic alternative solutie
3. Ciorna solutie
4. Descriere activitati implementare, secventa test
5. Raport final/ prezentare
1. Proiectul va avea la baza controlul unui motor BLDC care va primi semnale de la FRDM; pe Raspberry PI va rula
un server ce va primi instructiuni de la un browser; FRDM-ul va primi aceste semnale de la Raspberry Pi prin
intermediul unui modul Bluetooth (1 modul Bluetooth pe Rasp PI si unul pe FRDM), iar apoi va fi actionat
motorul.
Schema proiectului:
Detalii implementare/dispozitive folosite: Raspberry Pi cu distributia de Linux Raspbian Jessie, la care am atasat
modulul Bluetooth cu rol de master RN-45 (cel rosu din prima imagine) la pinii seriali Tx si Rx. Acesta comunica cu un alt
dispozitiv Bluetooth, slave, HC-06, conectat la pinii seriali ai dispozitivului FRDM KL-25Z.
Initial am folosit o baterie auto pentru alimentarea driver-ului pentru motorul BLDC, dar ulterior am folosit o sursa
de la un calculator mai vechi pentru a alimenta (la 12 V) driver-ul si FRDM-ul (la 5 V) (in cadrul proiectului sursa joaca rol
de transformator, fiind alimentata de la o priza / 220 V).
Programarea dispozitivelor Bluetooth a constat in rularea de comenzi AT pe modulul RN-45: a trebuit setat in
modul auto (SM, 3), scrisa adresa dispozitivului HC-06 pe acesta (pentru a juca rol de releu - tot ce primeste da mai departe
pe aceasta adresa: SR, adresa_HC-06) si de asemenea: SA, 0 - pentru a dezactiva autentificarea. Comunicarea se realizeaza
la viteza de 9600 bps.
Pentru programarea motorului BLDC (controlul turatiei acestuia realizandu-se prin generarea unui semnal de
PWM) am folosit urmatorul algoritm: am asteptat 5 secunde (wait(5)) apoi am generat un semnal de valoare maxima
(motor.write(0.99)), iar o perioada de asteptare ( wait(2)), apoi am generat o valoare minima (motor.write(0.01)). Dupa 2
secunde de asteptare, motorul poate fi controlat prin generarea unui PWM cu o valoare intre cele 2 definite mai sus (mai
multe in codul de mai jos de pe FRDM).
In ceea ce priveste configurarea server-ului Apache pe Raspberry, elementele cheie in configurarea acestuia au fost:
• instalarea modulului Apache cu php ->
sudo apt-get install apache2 -y | apt-get install libapache2-mod-php5;
• adaugarea user-ului creat de server, www-data, in lista de useri cu drepturi speciale / privilegii -> rulam comanda:
sudo visudo si adaugam la sfarsit user-ul www-data;
• dupa fiecare script creat in Python sunt necesare comenzile:
sudo chown www-data:www-data /var/www/script_Python -> pentru ca user-ul www-data sa fie proprietar asupra acestora
( + sudo chmod 775 /var/www) si
sudo chmod 777 script_Python -> pentru ca user-ul www-data sa aiba drepturile necesare de executie.
• codul html si php se gaseste in fisierul index.php, situat in /var/www/html/index.php; partea php din acesta este:
if (isset($_POST['on']))
{
shell_exec('sudo python /var/www/serial_send_1.py');
}
if (isset($_POST['off']))
{
shell_exec('sudo python /var/www/serial_send_0.py');
}
if (isset($_POST['power_plus']))
{
shell_exec('sudo python /var/www/serial_send_plus.py');
}
if (isset($_POST['power_minus']))
{
shell_exec('sudo python /var/www/serial_send_minus.py');
}
Alte portiuni din cod:
• unul din script-urile Python, ce este rulat in urma apasarii unui buton de pe pagina web ->
/var/www/serial_send_1.py:
import serial, time
from time import sleep
ser=serial.Serial('/dev/ttyAMA0', 9600, timeout=5);
ser.write('1');
• codul de pe FRDM:
#include "mbed.h"
#include "Servo.h"
Serial BTSerial(PTA2,PTA1);
Servo motor(PTD4);
// Serial BTSerial(USBTX, USBRX);
DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
int value = 0;
int main() {
myled=0;
wait(5);
motor.write(0.99); // max
wait(2);
motor.write(0.01); // min
wait(2);
myled=1;
char data;
BTSerial.baud(9600);
float engine_power = 0.0;
myled2=1;
myled3=1;
while(1)
{
if(BTSerial.readable())
{
data=BTSerial.getc();
if(data =='1') // POWEEEEEER
{
myled2=0;
myled3=1;
engine_power += (float) 0.03;
motor.write(engine_power);
}
if(data =='0') // - power
{
myled2=1;
myled3=0;
engine_power -= (float)0.03;
motor.write(engine_power);
}
if(data =='2') //on
{
engine_power = 0.3;
motor.write(engine_power);
}
if(data =='3') //off
{
engine_power = 0.0;
motor.write(engine_power);
}
}
}
}
Proiectul final:
2. Alte observatii: am ales Raspberry Pi pentru o mai buna intelegere a sa, deoarece probabil o parte din proiectul dezvoltat
acum va fi folosit si in cadrul proiectului de licenta, impreuna cu un dispozitiv LeapMotion (care va fi conectat prin USB),
intre care stim ca exista compatibilitate (http://blog.leapmotion.com/integrate-leap-motion-arduino-raspberry-pi/ ).
De asemenea, am folosit o platforma de dezvoltare Raspberry PI in cadrul concursului ElectroMobility de anul
trecut si dorim sa ne aprofundam cunostintele (pentru controlul motorului atunci am folosit un ATMega16, acum vom folosi
FRDM KL-25Z, integrand cunostintele de anul trecut de la PM); link-uri documentatie Raspberry PI - motor BLDC:
https://solenerotech1.wordpress.com/2013/09/09/tutorialhow-to-control-a-brushless-motor-with-raspberry-pi/
https://dronesandrovs.wordpress.com/2012/11/24/how-to-control-a-brushless-motor-esc-with-arduino/
Comunicatia intre Raspberry si FRDM se va realiza prin intermediul bibliotecilor pentru comunicatia seriala, la care vom
atasa module Bluetooth HC-06; link-uri tutoriale Bluetooth:
http://www.instructables.com/id/Cheap-2-Way-Bluetooth-Connection-Between-Arduino-a/
http://www.instructables.com/id/Arduino-AND-Bluetooth-HC-05-Connecting-easily/