SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
Textul si imaginile din acest document sunt licentiate
Attribution-NonCommercial-NoDerivs
CC BY-NC-ND
Codul sursa din acest document este licentiat
Public-Domain
Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website /
blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul
sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara
nici un fel de limitari.
RaspberryPI, Firmata si Arduino
Ce este Firmata ?
Firmata este un protocol prin care o aplicatie software poate comunica cu
un microcontroller. Pe placa Arduino se instaleaza un firmware care va stabili o
conexiune cu calculatorul pe care il utilizezi, folosind un protocol special.
Evident, in loc de un calculator personal, poti folosi o placa RaspberryPI. Ceea
ce obtii este posibilitatea de a utiliza multitudinea de componente din
ecosistemul Raspberry PI impreuna cu placa Raspberry PI, intr-un mod extrem
de simplu.
In cele ce urmeaza voi exemplifica aceste lucruri demonstrand cum anume se
controleaza doua motoare de curent continuu din Raspberry PI, folosind o placa
Arduino cu Firmata, si cum anume se citesc valorile unui senzor de distanta
conectat la placa Arduino direct din codul sursa Python ruland pe Raspberry PI.
Componentele de care vei avea nevoie sunt:
• RaspberryPI
• Arduino UNO
• motor cu reductor
• senzor SharpIR Rangefinder
• sursa de alimentare pentru RaspberryPI (5V)
• sursa de alimentare pentru shield L298 (functie de tensiunea de
alimentare a motorului)
http://www.robofun.ro/forum
Prima pas este sa testezi protocolul Firmata pe calculatorul personal, iar
apoi il vei instala direct pe RaspberryPI.
1. Cupleaza placa shield peste Arduino, pinii Vin si Gnd la o sursa de
alimentare(acumulator sau baterii); motoarele le vei conecta la pinii marcati cu
MOTOR1 si MOTOR2. Conecteaza platforma Arduino la portul USB al
calculatorului personal.
2. Deschide Arduino 1.0.2 (functioneaza si pe Arduino 1.0) si vei
selecta:
File – Examples – Firmata – StandardFirmata.
3. Incarca sketch-ul pe Arduino.
4. Descarca urmatoarea aplicatie fie de pe site:
http://www.firmata.org/wiki/Main_Page sau direct pentru Windows.
5. Deschide aplicatia, selecteaza portul si configureaza fereastra
astfel.
http://www.robofun.ro/forum
6. Conecteaza senzorul SharpIR Rangefinder astfel.
Arduino SharpIR
Rangefinder
5V rosu
Gnd negru
A0 alb
Daca vei apropia un obiect de senzorul IR, vei observa cum variaza A0,
din Firmata Test, in functie de distanta.
Urmeaza sa testezi motoarele direct din Firmata Test. In cazul acestui
shield, intrarile se afla pe pinii 3, 5, 6 si 9. Fie poti selecta Output pe acesti pini
si vei putea controla motoarele prin Low si High, fie poti selecta PWM si sa misti
http://www.robofun.ro/forum
de slider. In cazul acesta poti controla viteza de rotatie a motorului. Noteaza-ti
care sunt pinii pentru mersul inainte/inapoi pentru fiecare motor.
Poti descoperi si altfel in ce sens se rotesc motoarele astfel incat robotul
sa se miste corect.
7. Incarca pe Arduino programul scris mai jos si ajusteaza ordinea
pinilor pana cand robotul se misca in mod corect.
http://www.robofun.ro/forum
#define motor_stanga_inainte 5
#define motor_stanga_inapoi 3
#define motor_dreapta_inainte 6
#define motor_dreapta_inapoi 9
void setup() {
//initializam pinii pt motoare ca iesiri
pinMode(motor_stanga_inainte, OUTPUT);
pinMode(motor_stanga_inapoi, OUTPUT);
pinMode(motor_dreapta_inainte, OUTPUT);
pinMode(motor_dreapta_inapoi, OUTPUT);
//e bine sa oprim motoarele pt inceput
analogWrite(motor_stanga_inapoi, 0);
analogWrite(motor_stanga_inainte, 0);
analogWrite(motor_dreapta_inapoi, 0);
analogWrite(motor_dreapta_inainte, 0);
}
void loop() {
//inainte, cu viteza maxima, pt 2 secunde
analogWrite(motor_stanga_inapoi, 0);
analogWrite(motor_stanga_inainte, 255);
analogWrite(motor_dreapta_inapoi, 0);
analogWrite(motor_dreapta_inainte, 255);
delay(2000);
//inapoi, cu viteza mica, pt 2 secunde
analogWrite(motor_stanga_inapoi, 180);
analogWrite(motor_stanga_inainte, 0);
analogWrite(motor_dreapta_inapoi, 180);
analogWrite(motor_dreapta_inainte, 0);
delay(2000);
//la stanga: motor_dreapta inainte, motor_stanga oprit
analogWrite(motor_stanga_inapoi, 0);
analogWrite(motor_stanga_inainte, 0);
analogWrite(motor_dreapta_inapoi, 0);
analogWrite(motor_dreapta_inainte, 255);
delay(2000);//aprox 90 de grade, depinde de baterie
//stop pt 5 secunde
analogWrite(motor_stanga_inapoi, 0);
analogWrite(motor_stanga_inainte, 0);
analogWrite(motor_dreapta_inapoi, 0);
analogWrite(motor_dreapta_inainte, 0);
delay(5000);
}
8. Dupa ce ai descoperit ordinea pinilor, incarca firmware-ul
StandardFirmata din File – Example – Firmata.
http://www.robofun.ro/forum
Ai inteles in acest moment ce este Firmata si cum se poate folosi impreuna cu
Arduino pentru a controla direct senzori / motoare dintr-un calculator personal.
Mai departe vom instala Firmata pe Raspberry PI.
Firmata pe RaspberryPI
1. Deschide o sesiune SSH si logheaza-te la RaspberryPI.
2. Conecteaza Arduino la portul USB.
3. Instaleaza pachetele necesare prin comanda:
sudo apt-get install python-serial mercurial
4. Descarca pyFirmata, modulul de Firmata pentru Python:
hg clone https://bitbucket.org/tino/pyfirmata
5. Schimba locatia directorului:
cd pyfirmata
6. Instaleaza modulul.
sudo python setup.py install
7. Deschide editorul de texte nano:
sudo nano bumper.py
http://www.robofun.ro/forum
8. Copiaza codul listat mai jos.
#!/usr/bin/python
import pyfirmata #pt legatura cu Arduino
# Creeaza un obiect Arduino pe portul specificat
board = pyfirmata.Arduino('/dev/ttyACM0')
#Pinii Arduino pt motoare (ca variabile)
PIN_stanga_inainte = board.get_pin('d:5:p') #pinul digital 5 = pwm
PIN_stanga_inapoi = board.get_pin('d:3:p')
PIN_dreapta_inainte = board.get_pin('d:6:p')
PIN_dreapta_inapoi = board.get_pin('d:9:p')
# Pornim un thread Iterator care sa se ocupe de datele pe serial
(pt analog)
it = pyfirmata.util.Iterator(board)
it.start()
board.analog[0].enable_reporting() #A0 va trimite date
#Primele date citite pot fi eronate si le ignor
while board.analog[0].read() is None:
pass
def mergi(stanga, dreapta): #functie pt controlul
motoarelor(0..255)
if(stanga > 0):
PIN_stanga_inapoi.write(0)
PIN_stanga_inainte.write(stanga/255.0) #aici se opereaza in
#0..1
else:
PIN_stanga_inapoi.write(-stanga/255.0)
PIN_stanga_inainte.write(0)
if(dreapta > 0):
PIN_dreapta_inapoi.write(0)
PIN_dreapta_inainte.write(dreapta/255.0)
else:
PIN_dreapta_inapoi.write(-dreapta/255.0)
PIN_dreapta_inainte.write(0)
print 'Am pornit!'
try:
while (1):
if(board.analog[0].read() * 1024 < 400 ):
mergi(255,255) #inainte
else:
print 'Obstacol!'
mergi(180,-180) #dreapta
board.pass_time(0.8) #timpul trebuie recalibrat pt
#90grade.
except: #daca se intrerupe programul (Ctrl-C)
mergi(0,0) #stop motoare
board.exit() #inchide pyFirmata, inclusiv Iteratorul
http://www.robofun.ro/forum
9. Salveaza-l cu CTRL + X si Y pentru a confirma.
10. Executa-l cu:
sudo python bumper.py
http://www.robofun.ro/forum

Más contenido relacionado

La actualidad más candente

Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12Iulius Bors
 
Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Iulius Bors
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriIulius Bors
 
Arduino indicatoare cp-usiram
Arduino indicatoare cp-usiramArduino indicatoare cp-usiram
Arduino indicatoare cp-usiramIulius Bors
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaIulius Bors
 
Curs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernetCurs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernetIulius Bors
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoIulius Bors
 
Arduino flexsensorbrickbionicfinger
Arduino flexsensorbrickbionicfingerArduino flexsensorbrickbionicfinger
Arduino flexsensorbrickbionicfingerIulius Bors
 
Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Iulius Bors
 
Arduino alcoolmetru
Arduino alcoolmetruArduino alcoolmetru
Arduino alcoolmetruIulius Bors
 
Arduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aArduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aIulius Bors
 
Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduinoIulius Bors
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsIulius Bors
 

La actualidad más candente (14)

Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12
 
Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uri
 
Arduino indicatoare cp-usiram
Arduino indicatoare cp-usiramArduino indicatoare cp-usiram
Arduino indicatoare cp-usiram
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistanta
 
Aiesec University 2012-arduino
Aiesec University 2012-arduinoAiesec University 2012-arduino
Aiesec University 2012-arduino
 
Curs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernetCurs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernet
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduino
 
Arduino flexsensorbrickbionicfinger
Arduino flexsensorbrickbionicfingerArduino flexsensorbrickbionicfinger
Arduino flexsensorbrickbionicfinger
 
Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298
 
Arduino alcoolmetru
Arduino alcoolmetruArduino alcoolmetru
Arduino alcoolmetru
 
Arduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aArduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-a
 
Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduino
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocs
 

Destacado

Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Iulius Bors
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapseIulius Bors
 
Arduino shield wifi-monitorizarelocuinta
Arduino shield wifi-monitorizarelocuintaArduino shield wifi-monitorizarelocuinta
Arduino shield wifi-monitorizarelocuintaIulius Bors
 
Arduino releemodio2
Arduino releemodio2Arduino releemodio2
Arduino releemodio2Iulius Bors
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduinoIulius Bors
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteoIulius Bors
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelIulius Bors
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803Iulius Bors
 
Arduino gyro stabilizator
Arduino gyro stabilizatorArduino gyro stabilizator
Arduino gyro stabilizatorIulius Bors
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionIulius Bors
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaIulius Bors
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretIulius Bors
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8Iulius Bors
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspotIulius Bors
 

Destacado (17)

Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapse
 
Arduino shield wifi-monitorizarelocuinta
Arduino shield wifi-monitorizarelocuintaArduino shield wifi-monitorizarelocuinta
Arduino shield wifi-monitorizarelocuinta
 
Arduino releemodio2
Arduino releemodio2Arduino releemodio2
Arduino releemodio2
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduino
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteo
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcel
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803
 
Arduino gyro stabilizator
Arduino gyro stabilizatorArduino gyro stabilizator
Arduino gyro stabilizator
 
Arduino rtc
Arduino rtcArduino rtc
Arduino rtc
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueedition
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastatura
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecret
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8
 
Arduino sht11
Arduino sht11Arduino sht11
Arduino sht11
 
Arduino mod-gps
Arduino mod-gpsArduino mod-gps
Arduino mod-gps
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspot
 

Similar a Arduino toraspberrypi firmata

Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul internIulius Bors
 
Adxl345 raspberry pi
Adxl345 raspberry piAdxl345 raspberry pi
Adxl345 raspberry piIulius Bors
 
Arduino protocolul 1 wire
Arduino   protocolul 1 wireArduino   protocolul 1 wire
Arduino protocolul 1 wireIulius Bors
 
Arduino gsm gprs shield
Arduino   gsm gprs shieldArduino   gsm gprs shield
Arduino gsm gprs shieldIulius Bors
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2cIulius Bors
 
Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcIulius Bors
 

Similar a Arduino toraspberrypi firmata (7)

Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul intern
 
Adxl345 raspberry pi
Adxl345 raspberry piAdxl345 raspberry pi
Adxl345 raspberry pi
 
Arduino protocolul 1 wire
Arduino   protocolul 1 wireArduino   protocolul 1 wire
Arduino protocolul 1 wire
 
Arduino gsm gprs shield
Arduino   gsm gprs shieldArduino   gsm gprs shield
Arduino gsm gprs shield
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2c
 
Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pc
 
Arduino eeprom
Arduino   eepromArduino   eeprom
Arduino eeprom
 

Arduino toraspberrypi firmata

  • 1. Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Public-Domain Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website / blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
  • 2. RaspberryPI, Firmata si Arduino Ce este Firmata ? Firmata este un protocol prin care o aplicatie software poate comunica cu un microcontroller. Pe placa Arduino se instaleaza un firmware care va stabili o conexiune cu calculatorul pe care il utilizezi, folosind un protocol special. Evident, in loc de un calculator personal, poti folosi o placa RaspberryPI. Ceea ce obtii este posibilitatea de a utiliza multitudinea de componente din ecosistemul Raspberry PI impreuna cu placa Raspberry PI, intr-un mod extrem de simplu. In cele ce urmeaza voi exemplifica aceste lucruri demonstrand cum anume se controleaza doua motoare de curent continuu din Raspberry PI, folosind o placa Arduino cu Firmata, si cum anume se citesc valorile unui senzor de distanta conectat la placa Arduino direct din codul sursa Python ruland pe Raspberry PI. Componentele de care vei avea nevoie sunt: • RaspberryPI • Arduino UNO • motor cu reductor • senzor SharpIR Rangefinder • sursa de alimentare pentru RaspberryPI (5V) • sursa de alimentare pentru shield L298 (functie de tensiunea de alimentare a motorului) http://www.robofun.ro/forum
  • 3. Prima pas este sa testezi protocolul Firmata pe calculatorul personal, iar apoi il vei instala direct pe RaspberryPI. 1. Cupleaza placa shield peste Arduino, pinii Vin si Gnd la o sursa de alimentare(acumulator sau baterii); motoarele le vei conecta la pinii marcati cu MOTOR1 si MOTOR2. Conecteaza platforma Arduino la portul USB al calculatorului personal. 2. Deschide Arduino 1.0.2 (functioneaza si pe Arduino 1.0) si vei selecta: File – Examples – Firmata – StandardFirmata. 3. Incarca sketch-ul pe Arduino. 4. Descarca urmatoarea aplicatie fie de pe site: http://www.firmata.org/wiki/Main_Page sau direct pentru Windows. 5. Deschide aplicatia, selecteaza portul si configureaza fereastra astfel. http://www.robofun.ro/forum
  • 4. 6. Conecteaza senzorul SharpIR Rangefinder astfel. Arduino SharpIR Rangefinder 5V rosu Gnd negru A0 alb Daca vei apropia un obiect de senzorul IR, vei observa cum variaza A0, din Firmata Test, in functie de distanta. Urmeaza sa testezi motoarele direct din Firmata Test. In cazul acestui shield, intrarile se afla pe pinii 3, 5, 6 si 9. Fie poti selecta Output pe acesti pini si vei putea controla motoarele prin Low si High, fie poti selecta PWM si sa misti http://www.robofun.ro/forum
  • 5. de slider. In cazul acesta poti controla viteza de rotatie a motorului. Noteaza-ti care sunt pinii pentru mersul inainte/inapoi pentru fiecare motor. Poti descoperi si altfel in ce sens se rotesc motoarele astfel incat robotul sa se miste corect. 7. Incarca pe Arduino programul scris mai jos si ajusteaza ordinea pinilor pana cand robotul se misca in mod corect. http://www.robofun.ro/forum
  • 6. #define motor_stanga_inainte 5 #define motor_stanga_inapoi 3 #define motor_dreapta_inainte 6 #define motor_dreapta_inapoi 9 void setup() { //initializam pinii pt motoare ca iesiri pinMode(motor_stanga_inainte, OUTPUT); pinMode(motor_stanga_inapoi, OUTPUT); pinMode(motor_dreapta_inainte, OUTPUT); pinMode(motor_dreapta_inapoi, OUTPUT); //e bine sa oprim motoarele pt inceput analogWrite(motor_stanga_inapoi, 0); analogWrite(motor_stanga_inainte, 0); analogWrite(motor_dreapta_inapoi, 0); analogWrite(motor_dreapta_inainte, 0); } void loop() { //inainte, cu viteza maxima, pt 2 secunde analogWrite(motor_stanga_inapoi, 0); analogWrite(motor_stanga_inainte, 255); analogWrite(motor_dreapta_inapoi, 0); analogWrite(motor_dreapta_inainte, 255); delay(2000); //inapoi, cu viteza mica, pt 2 secunde analogWrite(motor_stanga_inapoi, 180); analogWrite(motor_stanga_inainte, 0); analogWrite(motor_dreapta_inapoi, 180); analogWrite(motor_dreapta_inainte, 0); delay(2000); //la stanga: motor_dreapta inainte, motor_stanga oprit analogWrite(motor_stanga_inapoi, 0); analogWrite(motor_stanga_inainte, 0); analogWrite(motor_dreapta_inapoi, 0); analogWrite(motor_dreapta_inainte, 255); delay(2000);//aprox 90 de grade, depinde de baterie //stop pt 5 secunde analogWrite(motor_stanga_inapoi, 0); analogWrite(motor_stanga_inainte, 0); analogWrite(motor_dreapta_inapoi, 0); analogWrite(motor_dreapta_inainte, 0); delay(5000); } 8. Dupa ce ai descoperit ordinea pinilor, incarca firmware-ul StandardFirmata din File – Example – Firmata. http://www.robofun.ro/forum
  • 7. Ai inteles in acest moment ce este Firmata si cum se poate folosi impreuna cu Arduino pentru a controla direct senzori / motoare dintr-un calculator personal. Mai departe vom instala Firmata pe Raspberry PI. Firmata pe RaspberryPI 1. Deschide o sesiune SSH si logheaza-te la RaspberryPI. 2. Conecteaza Arduino la portul USB. 3. Instaleaza pachetele necesare prin comanda: sudo apt-get install python-serial mercurial 4. Descarca pyFirmata, modulul de Firmata pentru Python: hg clone https://bitbucket.org/tino/pyfirmata 5. Schimba locatia directorului: cd pyfirmata 6. Instaleaza modulul. sudo python setup.py install 7. Deschide editorul de texte nano: sudo nano bumper.py http://www.robofun.ro/forum
  • 8. 8. Copiaza codul listat mai jos. #!/usr/bin/python import pyfirmata #pt legatura cu Arduino # Creeaza un obiect Arduino pe portul specificat board = pyfirmata.Arduino('/dev/ttyACM0') #Pinii Arduino pt motoare (ca variabile) PIN_stanga_inainte = board.get_pin('d:5:p') #pinul digital 5 = pwm PIN_stanga_inapoi = board.get_pin('d:3:p') PIN_dreapta_inainte = board.get_pin('d:6:p') PIN_dreapta_inapoi = board.get_pin('d:9:p') # Pornim un thread Iterator care sa se ocupe de datele pe serial (pt analog) it = pyfirmata.util.Iterator(board) it.start() board.analog[0].enable_reporting() #A0 va trimite date #Primele date citite pot fi eronate si le ignor while board.analog[0].read() is None: pass def mergi(stanga, dreapta): #functie pt controlul motoarelor(0..255) if(stanga > 0): PIN_stanga_inapoi.write(0) PIN_stanga_inainte.write(stanga/255.0) #aici se opereaza in #0..1 else: PIN_stanga_inapoi.write(-stanga/255.0) PIN_stanga_inainte.write(0) if(dreapta > 0): PIN_dreapta_inapoi.write(0) PIN_dreapta_inainte.write(dreapta/255.0) else: PIN_dreapta_inapoi.write(-dreapta/255.0) PIN_dreapta_inainte.write(0) print 'Am pornit!' try: while (1): if(board.analog[0].read() * 1024 < 400 ): mergi(255,255) #inainte else: print 'Obstacol!' mergi(180,-180) #dreapta board.pass_time(0.8) #timpul trebuie recalibrat pt #90grade. except: #daca se intrerupe programul (Ctrl-C) mergi(0,0) #stop motoare board.exit() #inchide pyFirmata, inclusiv Iteratorul http://www.robofun.ro/forum
  • 9. 9. Salveaza-l cu CTRL + X si Y pentru a confirma. 10. Executa-l cu: sudo python bumper.py http://www.robofun.ro/forum