Instalacija programske opreme in prva vaja

Z vzpostavitvijo komunikacije med Arduinom in programskim jezikom Python, lahko naredimo zanimive projekte.

Python lahko opišemo kot objektno orientiran visokonivojski programski jezik. Pogosto ga opisujejo kot "glue language" za različne aplikacije in okolja. Lahko ga uporabljamo v okolju Windows in drugih okoljih (Unix/Linux, Mac OSX ...) in je za uporabnike brezplačen, ne glede na namen uporabe. Mi ga bomo uporabljali za virtualne oz. grafične prikaze dogajanj, ki jih zaznavajo posamezni senzorji, priključeni na razvojno ploščo Arduino Uno.

Najprej moramo instalirati okolje Python in nekatera druga programska okolja, ki vsebujejo za naše projekte ustrezne knjižnice.

1. Instaliranje programskega okolja Python:

Instalirali bomo 32-bitno verzijo, tudi če ima naš računalnik 64-bitni operacijski sistem. Razlog je predvsem v dostopnosti ustreznih knjižnic. Obstoja verzija Python 2.7 in Python 3. Mi izberemo 32-bitno verzijo Python 2.7.

Odpremo spletno stran https://www.python.org/download/releases/2.7.7/. Ko se nam spletna stran odpre, v prvi vrstici izberemo (kliknemo) Python 2.7.8 (Slika 1).

Slika 1: Izvleček spletne strani https://www.python.org/download/releases/2.7.7/

Na spletni strani, ki se nam je odprla izberemo pod Download: Windows x86 MSI Installer (2.7.8). Po prenosu program zaženemo in instaliramo na računalnik.

2. Instaliranje okolja pySerial verzije 2.7:

pySerial 2.7 potrebujemo za komunikacijo s serijskim portom, da lahko Python in Arduino medsebojno komunicirata. Tudi tukaj izberemo 32-bitno verzijo. V brskalnik vpišemo pyserial 2.7 in odpremo pySerial - pySerial 2.7 documentation. (http://pyserial.sourceforge.net/pyserial.html). Na strani, ki se odpre izberemo (kliknemo) Download page with releasee (Pypi), (Slika 2).

Slika 2: Izvleček spletne strani https://pyserial.sourceforge/pyserial.html

Na tej strani (https://pypi.python.org/pypi/pyserial) izberemo pyserial-2.7.win32.exe(md5). Po prenosu program zaženemo in instaliramo.

3. Instaliranje VPython:

Potrebujemo ga zaradi knjižnic. V brskalnik vpišemo http://vpython.org/contents/download_windows.html in izberemo (kliknemo) VPython-Win.32-Py2.7-6.11

Na strani, ki se odpre ničesar ne izberemo, le počakamo na prenos in zaženemo ter instaliramo program.

Zdaj lahko napišemo prvi program, ko bo Arduino komuniciral s Python-om. Arduino bo pošiljal podatke Python-u preko serijskega porta.

Program v okolju Arduino:

 /*

  Komunikacija Arduino Uno s Python-om.

  Izračun kombinacij več bitnih števil.

  Avtor: Milan Ivič

  Julij 2015

 */

 int racunaj=2;             //Spremenljivki z imenom racunaj dodelimo vrednost 2.

 int bitna_vrednost=1;   //Spremenljivki z imenom bitna_vrednost dodelimo vrednost 1.

 void setup()

 {

   Serial.begin(9600);   //Serijska komunikacija z računalnikom (v mojem primeru s com10).

 }

 void loop()

 {

    while(bitna_vrednost<11)      //Zanka while dela, dokler je pogoj resničen, dokler je

                                             //vrednost spremenljivke bitna_vrednost manjša od 11).

   {

   Serial.print("Vseh kombinacij ");

   Serial.print(bitna_vrednost);

   Serial.print(" bitnega binarnega stevila je: ");

   Serial.println(racunaj);  

   racunaj = racunaj*2;

   bitna_vrednost = bitna_vrednost + 1;

   delay(1500);                   //Počakaj 1,5 sekunde preden naslednjič pošlješ podatke na serijski port com10.

   }

 }

Arduino računa število kombinacij več bitnih števil in podatke pošilja na serijski port. Te podatke bo prejemal Python. Na namizju imamo bljižnico za Python, VIDLE for VPython. Odprimo Python in napišimo program.

Program Python:

 import serial       #Import Serial Library, vključimo knjižnico za serijsko komunikacijo.

 #Kreiranje objekta z imenom ArduinoSerialData:

 ArduinoSerialData = serial.Serial('com10', 9600)    #Python čaka na podatke, ki bodo prihajali na com10.

 while(1==1):                                                 #Zanka while se neprestano izvaja (1 je vedno enako 1).

     if(ArduinoSerialData.inWaiting()>0):            #Ali je prišel podatek na serijski port com10?

         Podatki = ArduinoSerialData.readline()    #Je prišel, preberi ga in ga shrani v spremenljivko Podatki.

         print Podatki                                         #Izpiši podatek.

Izdelajmo še primer, ko Python pošilja podatke Arduinu preko serijskega porta. Na Arduino Uno priključimo LED diodo na pin 13 (zaporedno z LED diodo vežemo zaščitni upor 470 Ω). LED diodo bomo vklopili s Python-om, če vpišemo 1 in izklopili, če vpišemo 0. Arduino bo stalno preverjal prihajajoče podatke na serijskem portu in na podlagi prejetih podatkov krmilil LED diodo.

Program v okolju Arduino:

 /*

  Komunikacija Arduino Uno s Python-om.

  Vklop / izklop LED diode z ukazi v Python-u

  Avtor: Milan Ivič

  Julij 2015

 */

 int PrihajajociPodatek = 0;

 int LEDpin = 13;

 

 void setup()

 {

   Serial.begin(9600);

   pinMode(LEDpin, OUTPUT);

 }

 

 void loop()

 {

    if (Serial.available() > 0)        //Ali je prišel podatek na COM10?

   {    

     PrihajajociPodatek = Serial.read();     //Prebrani podatek se shrani v spremenljivko PrihajajociPodatek.

     if(PrihajajociPodatek == 49)                //ACSII koda za znak 1 je 49. Če je podatek 1, vklopi LED.

     {      

       digitalWrite(LEDpin, HIGH);

     }

     else if(PrihajajociPodatek == 48)        //ACSII koda za znak 0 je 48. Če je podatek 0, izklopi LED.

     {      

       digitalWrite(LEDpin, LOW);

     }

   }

}

Program Python:

 import serial   #Vključimo knjižnico za serijsko komunikacijo.

 serial = serial.Serial('COM10', 9600)                                 #Komunikacija s COM port 10, 9600 bit/s.

 while (1==1):                                                                  #Zanka while se neprestano izvaja.

     #Funkcija raw_input v spremenljivko Podatek vrača vtipkano število:

     Podatek = raw_input("\nVpiši 1 za vklop oziroma 0 za izklop LED diode: ")

     serial.write(Podatek)                                                   #Podatek pošlji na serijski port (COM10).

     if(Podatek == '1'):

         print ("Izbrali ste: %s, LED dioda je vklopljena!" % Podatek);

     if(Podatek == '0'):

         print ("Izbrali ste: %s, LED dioda je izklopljena!" % Podatek);