DASDUINO I PYTHON

CRODUINO I PYTHON-Uncategorized

UVOD

Python je jedan od najpopularnijih i najkorištenijih programskih jezika današnjice, a predviđa mu se još i svjetlija budućnost. Ono što nas više zanima je da omogućava “razgovor” s Dasduino putem jednostavnog serijskog sučelja. Svi UNIX sustavi mogu čitati i pisati serijske uređaje, a posao je uvelike olakšan s pySerial libraryom.

INSTALACIJA:PYTHON I PYSERIAL

Prije nego krenemo s programiranjem serijskog porta idemo instalirati Python i pySerial.NAPOMENA: u ovom tutorialu koristiti ćemo Python 2.7. Ako želite koristiti Python 3.x pri kraju se nalaze kratka upustva kako prilagoditi kod.

Kratko upustva kako instalirati .tar file:
U terminalu izvršite sljedeće naredbe:

tar xfvz /Users/*imekorisnika*/Downloads/pyserial-2.7.tar.gz
cd pyserial-2.7
sudo python setup.py install

Ukoliko koristite Windows OS preuzmite .msi file.

ARDUINO KOD

Prvi korak je natjerati Dasduino da šalje podatke preko serijskog porta. Ovo je isto kao i kada koristimo serial monitor, dakle koristimo funkciju Serial.print(). Radili smo već nekoliko primjera s printom u Serial Monitor pa ćemo to i iskoristiti. Koristiti ćemo HC-SR04 ultrazvučni modul, a kako možete se prisjetiti u KKM tutorialu.
Za početak idemo spojiti modul na Dasduino:

Napraviti ćemo i sitne preinake u kodu:

const int trig = 11;        // Trig na PIN11
const int echo = 12;        // Echo na PIN12
 
void setup() {
   
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
   
  Serial.begin(9600);  // zapocinjem serijsku komunikaciju
   
}
 
void loop() {
   
// buduci da ne koristimo library, dolje je napisan nacin komunikacije s modulom
   
  double vrijeme, udaljenost;
   
  digitalWrite(trig, HIGH);   // Slanje triga
  delayMicroseconds(10);      // Odaslani trig traje 10 μs = 0.1 ms
  digitalWrite(trig, LOW);
   
  vrijeme = pulseIn(echo, HIGH);       // Primanje reflektiranog triga
  udaljenost = (vrijeme/2) / 28;       // Racunanje udaljenosti, u centimetrima
                                       // konacna udaljenost senzora od predmeta
                                       // u cm je varijabla "udaljenost"
     
  Serial.println(udaljenost); 
  delay(50);  // preporucena pauza izmedu ocitanja ne bi trebala biti manja od 50ms
}

ako, preinake nisu nužne prilagoditi ćemo kod kako bismo mogli nastaviti nove Dasduino i Python lekcije na ovaj tutorial.

Prije pisanja skripte važno je zapamtiti koji baud rate smo odabrali, te na kojem je portu naš Dasduino. Baud rate zadajemo prilikom izvršenja Serial.begin() funkcije, pa pronađimo je u kodu gore:

Serial.begin(9800);
Dakle, baud rate je 9800 bitova po sekundi. pySerial može koristiti razne standardne i nestandardne rateove, a cijeli popis možete pronaći ovdje.
Već smo pričali pronaći vritualni COM port na kojem se nalazi Dasduino u tutorialu o Arduino IDE. Ako ste nešto snalažljiviji možete koristiti i Terminal:

Mac OS X

ls /dev/tty.*

Linux

ls /dev/ttyUSB*

 

PYTHON KOD

Python kod možemo pisati i izvršavati na razne načine, radi jednostavnosti prikaza koristiti ćemo IDLE. Na Windowsima ga možete pronaći na: Start – All programs – Python – IDLE. Ako koristite OSX IDLE se nalazi u Application\Python folderu.

Prvi korak je dodati pySerial libray u kod:

import serial

Nakon toga otvaramo konekciju:

croduinoSerial = serial.Serial(‘COM71’, 9600)

Imajte na umu da su ‘COM71’ i baud 9600 specifične za Windows računalo koje koristim trenutno. Više pročitajte na pySerial API.

Sljedeći korak je napraviti loop koji će neprestano čitati podatke sa serijskog porta:

while True: #beskonacni loop
    if (croduinoSerial.inWaiting() > 0): #ako postoje neki podaci
        myData = croduinoSerial.readline() #spremi podatke u myData
        print (myData)
Skriptu možete pokrenuti s F5 tipkom. Nakon toga u Python Shell-u vidimo ispis podataka koje Dasduino šalje preko serijskog porta. Imate li potrebu dalje obrađivati primljene podatke, imajte na umu da readline() varijable sprema kao string. U float ih možete promjeniti pomoću:
myData_number = float(myData)

S PYTHONA NA DASDUINO

Slati podatke na Dasduino s Python 2.x je vrlo jednostavno:

import serial #ako vec nije dodana, dodajte pySerial library
croduinoSerial = serial.Serial('COM71', 9600)
croduinoSerial.write('tekst')

PYTHONA 3.X

U python 3.x string je unicode sam po sebi. Kako bi library uspješno radio moramo ga konvertati u byte, što nije bilo nužno za Python 2.x:

croduinoSerial.write(b’tekst’)

ŠTO JOŠ?

Postoji nekoliko vrlo dobrih open-source platformi za ostvarivanje ove komunikacije. Večina njih ima GUI (Graphical User Interface) framework za kontrolu, a pojedini prikazuju i prikupljene podatake u realtime-u u obliku dijagrama. Naše preporuke su:
Instrumentino
Python Firmata
GUI s pySerial i Matplotlib

Plan je u idućim lekcijama nešto slično i sami napraviti, kako bismo što bolje shvatili način komuniciranja Dasduina i Pythona. Ako imate problema s izvođenjem slobodno ostavite pitanje ili komentar kako bi unaprijedili ovaj tutorial…