This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
workshop [2014/07/05 08:51] dan.tudose [Configurarea IDE-ului Arduino pentru a suporta Zigduino] |
workshop [2014/10/27 12:44] (current) dan.tudose |
||
---|---|---|---|
Line 103: | Line 103: | ||
Sparrow v3 este nodul senzorial folosit în cadrul laboratorului de //Wireless Sensor Networks// şi este echipat cu trei tipuri de senzori: temperatură, | Sparrow v3 este nodul senzorial folosit în cadrul laboratorului de //Wireless Sensor Networks// şi este echipat cu trei tipuri de senzori: temperatură, | ||
+ | |||
+ | < | ||
==== Zigduino ==== | ==== Zigduino ==== | ||
Line 113: | Line 115: | ||
Pentru a introduce suportul de Zigduino în Arduino IDE este nevoie să se urmeze paşii de mai jos: | Pentru a introduce suportul de Zigduino în Arduino IDE este nevoie să se urmeze paşii de mai jos: | ||
- | <note tip> | + | - Se instalează Arduino IDE: http:// |
- | 2. Se descarcă arhiva Zigduino-1.0: | + | |
- | 3. Se înlocuieşte folder-ul // | + | |
- | 4. Se copiază în // | + | |
- | 5. Se înlocuieşte fişierul // | + | |
- | 6. Se copiază în // | + | |
După aceşti paşi ar trebui să fie vizibile doua intrări pentru Zigduino în // | După aceşti paşi ar trebui să fie vizibile doua intrări pentru Zigduino în // | ||
Line 189: | Line 191: | ||
</ | </ | ||
- | În programul de mai sus se observă folosirea unor macrouri: | + | În programul de mai sus se observă folosirea unor macrouri: |
+ | |||
+ | Alternativ, puteți folosi funcțiile de bibliotecă Arduino: | ||
+ | |||
+ | <code C> | ||
+ | /* | ||
+ | * Blink | ||
+ | * | ||
+ | * The basic Arduino example. | ||
+ | * then off for one second, and so on... We use pin 13 because, | ||
+ | * depending on your Arduino board, it has either a built-in LED | ||
+ | * or a built-in resistor so that you need only an LED. | ||
+ | * | ||
+ | * http:// | ||
+ | */ | ||
+ | |||
+ | |||
+ | int ledPin = 11; // LED (PB5) connected to digital pin 11 | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(ledPin, | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | digitalWrite(ledPin, | ||
+ | delay(1000); | ||
+ | digitalWrite(ledPin, | ||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
Pentru a compila şi executa codul de mai jos pe un nod Sparrow folosind Arduino IDE paşii sunt următorii: | Pentru a compila şi executa codul de mai jos pe un nod Sparrow folosind Arduino IDE paşii sunt următorii: | ||
Line 211: | Line 245: | ||
--*// | --*// | ||
- | Led-urile sunt legate la portul B, pinii PB5, PB6 și PB7.</ | + | Led-urile sunt legate la portul B, pinii PB5, PB6 și PB7 (pinii 11, 10, respectiv 9 pentru Arduino).</ |
Line 264: | Line 298: | ||
} | } | ||
</ | </ | ||
+ | |||
===== Comunicația serială ===== | ===== Comunicația serială ===== | ||
Line 313: | Line 348: | ||
<code C> | <code C> | ||
+ | int controlPin = 7; //sensor ON/OFF control pin (PE7) | ||
+ | |||
void setup() { | void setup() { | ||
- | | + | |
+ | pinMode(controlPin, | ||
+ | | ||
// initialize the serial communication: | // initialize the serial communication: | ||
Serial.begin(9600); | Serial.begin(9600); | ||
Line 320: | Line 359: | ||
void loop() { | void loop() { | ||
- | | + | |
+ | |||
+ | // wait a bit for the analog-to-digital converter | ||
+ | // to stabilize after the last reading: | ||
+ | delay(100); | ||
+ | | ||
// send the value of analog input 0: | // send the value of analog input 0: | ||
Serial.println(analogRead(A0)); | Serial.println(analogRead(A0)); | ||
| | ||
- | | + | |
| | ||
- | // wait a bit for the analog-to-digital converter | + | |
- | // to stabilize after the last reading: | + | |
- | delay(100); | + | |
} | } | ||
</ | </ | ||
Line 338: | Line 380: | ||
< | < | ||
< | < | ||
- | |||
==== Senzorul digital de temperatură și umiditate ==== | ==== Senzorul digital de temperatură și umiditate ==== | ||
Line 357: | Line 398: | ||
<code C> | <code C> | ||
- | #include "sht21b.h" | + | #include "sht21.h" |
float temp, humid; | float temp, humid; | ||
Line 395: | Line 436: | ||
===== Afișarea datelor de la senzori cu Processing ===== | ===== Afișarea datelor de la senzori cu Processing ===== | ||
- | This example shows you how to send a byte of data from the Arduino to a personal computer and graph the result. This is called serial communication because the connection appears to both the Arduino and the computer as a serial | + | în exemplul de mai jos vom vedea cum putem să trimitem un octet de date de la placa Sparrow la PC și să afișam grafic rezultatul. Comunicația se va face peste interfața serială, dar datele vor fi preluate de către un alt program care va fi responsabil pentru desenarea graficului pe ecran. |
- | You can use the Arduino serial monitor to view the sent data, or it can be read by Processing. | + | Bineînțeles, puteți folosi Serial Monitor ca și până acum pentru a vizualiza datele în formă text, dar pentru a le afișa sub formă grafică avem nevoie de Processing. |
+ | Pur și simplu dezarhivați în directorul Arduino și rulați fișierul .exe | ||
- | For this exercise you will need to download Processing. You can get it from here: http:// | + | Încărcați următorul program pe placa Sparrow: |
- | + | ||
- | Upload the following sketch into your Sparrow | + | |
<code C> | <code C> | ||
+ | int controlPin = 7; //sensor ON/OFF control pin (PE7) | ||
+ | |||
void setup() { | void setup() { | ||
- | | + | |
+ | pinMode(controlPin, | ||
+ | | ||
// initialize the serial communication: | // initialize the serial communication: | ||
Serial.begin(9600); | Serial.begin(9600); | ||
Line 411: | Line 455: | ||
void loop() { | void loop() { | ||
- | | + | |
- | // send the value of analog input 0: | + | |
- | Serial.println(analogRead(A0)); | + | |
- | + | ||
- | PORTE |= (1<< | + | |
- | | + | |
// wait a bit for the analog-to-digital converter | // wait a bit for the analog-to-digital converter | ||
// to stabilize after the last reading: | // to stabilize after the last reading: | ||
delay(100); | delay(100); | ||
+ | | ||
+ | // send the value of analog input 0: | ||
+ | Serial.println(analogRead(A2)); | ||
+ | | ||
+ | digitalWrite(controlPin, | ||
+ | | ||
+ | |||
} | } | ||
</ | </ | ||
- | Afterwards, load the following | + | După cum puteți vedea, programul trimite pe serială datele citite de la senzorul de lumină. |
+ | Pentru a le afișa în mod grafic, încărcați următoarea schiță în Processing: | ||
<code C> | <code C> | ||
Line 533: | Line 581: | ||
*/ | */ | ||
</ | </ | ||
+ | |||
+ | La prima rulare vi se va afișa o listă cu porturi COM disponibile, | ||
Datele eșantionate de la senzorul de lumină ar trebui să fie vizibile în fereastra deschisă de către schița Processing. | Datele eșantionate de la senzorul de lumină ar trebui să fie vizibile în fereastra deschisă de către schița Processing. | ||
- | ===== Transmisia radio ===== | + | < |
- | Pentru a folosi transceiver-ul radio cu care sunt dotate nodurile senzoriale, vom utiliza o bibliotecă scrisă pentru Arduino ce ne va smplifica foarte mult codul. Această bibliotecă se numește ZigduinoRadio și poate fi descărcată de {{:: | ||
- | |||
- | Instalarea bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în // | ||
- | |||
- | Mai jos aveți un exemplu care vă permite să trimiteți și să recepționați date de pe interfața radio. | ||
- | |||
- | <code C> | ||
- | /* | ||
- | |||
- | Run this sketch on two Zigduinos, open the serial monitor at 9600 baud, and type in stuff | ||
- | Watch the Rx Zigduino output what you've input into the serial port of the Tx Zigduino | ||
- | |||
- | */ | ||
- | |||
- | #include < | ||
- | |||
- | void setup() | ||
- | { | ||
- | ZigduinoRadio.begin(11); | ||
- | Serial.begin(9600); | ||
- | | ||
- | ZigduinoRadio.attachError(errHandle); | ||
- | ZigduinoRadio.attachTxDone(onXmitDone); | ||
- | } | ||
- | |||
- | void loop() | ||
- | { | ||
- | if (Serial.available()) | ||
- | { | ||
- | ZigduinoRadio.beginTransmission(); | ||
- | | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | | ||
- | while(Serial.available()) | ||
- | { | ||
- | char c = Serial.read(); | ||
- | Serial.write(c); | ||
- | ZigduinoRadio.write(c); | ||
- | } | ||
- | | ||
- | Serial.println(); | ||
- | | ||
- | ZigduinoRadio.endTransmission(); | ||
- | } | ||
- | | ||
- | if (ZigduinoRadio.available()) | ||
- | { | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | | ||
- | while(ZigduinoRadio.available()) | ||
- | Serial.write(ZigduinoRadio.read()); | ||
- | | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.print(ZigduinoRadio.getLqi(), | ||
- | Serial.print(", | ||
- | Serial.print(ZigduinoRadio.getLastRssi(), | ||
- | Serial.print(" | ||
- | Serial.print(ZigduinoRadio.getLastEd(), | ||
- | Serial.println(" | ||
- | } | ||
- | |||
- | | ||
- | delay(1000); | ||
- | } | ||
- | |||
- | void errHandle(radio_error_t err) | ||
- | { | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.print((uint8_t)err, | ||
- | Serial.println(); | ||
- | } | ||
- | |||
- | void onXmitDone(radio_tx_done_t x) | ||
- | { | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.print((uint8_t)x, | ||
- | Serial.println(); | ||
- | } | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||