This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
sparrow_v4 [2018/10/09 22:22] dan.tudose [Configurarea IDE-ului Arduino pentru Sparrow] |
sparrow_v4 [2018/10/12 10:02] (current) dan.tudose [Senzorul digital de măsurare a luminozității] |
||
---|---|---|---|
Line 67: | Line 67: | ||
Step 1. Open the Arduino IDE | Step 1. Open the Arduino IDE | ||
Step 2. Go to File → Preferences | Step 2. Go to File → Preferences | ||
- | Step 3. In the Additional Boards Manager URLs textbox add the following link: http:// | + | Step 3. In the Additional Boards Manager URLs textbox add the following link: |
+ | [[http:// | ||
Step 4. Close the window by pressing OK | Step 4. Close the window by pressing OK | ||
Step 5. Go to Tools → Board → Boards Manager | Step 5. Go to Tools → Board → Boards Manager | ||
Line 129: | Line 131: | ||
===== Hello LED cu Arduino IDE si Sparrow V4 ===== | ===== Hello LED cu Arduino IDE si Sparrow V4 ===== | ||
- | Vom testa un program care stinge și aprinde un LED la interval de 1000ms. Acest lucru se face modificând | + | Vom testa un program care stinge și aprinde un LED la interval de 1000ms. Acest lucru se face modificând |
Line 183: | Line 185: | ||
- Se creează un proiect nou şi se copiază codul de mai jos (File-> | - Se creează un proiect nou şi se copiază codul de mai jos (File-> | ||
- | - În // | ||
- În // | - În // | ||
- Se alege portul COM la care a fost conectat nodul din // | - Se alege portul COM la care a fost conectat nodul din // | ||
Line 195: | Line 196: | ||
< | < | ||
- | Implementați folosind cele 3 LED-uri de pe placa de extensie o secvență de aprindere dinamică: | + | Scrieți un program care să cicleze prin toate culorile posibile pentru led-ul RGB. |
- | //*-- | + | |
- | -*- | + | |
- | --*// | + | |
- | Led-urile sunt legate la portul B, pinii PB5, PB6 și PB7 (pinii 11, 10, respectiv | + | Led-urile sunt legate la portul B, pinii PB4, PB5 și PB6 (pinii |
< | < | ||
Line 230: | Line 228: | ||
void setup() { | void setup() { | ||
// set the digital pin as output: | // set the digital pin as output: | ||
- | | + | |
} | } | ||
Line 251: | Line 249: | ||
{ | { | ||
ledState = HIGH; | ledState = HIGH; | ||
- | | + | |
} | } | ||
else | else | ||
{ | { | ||
ledState = LOW; | ledState = LOW; | ||
- | | + | |
} | } | ||
| | ||
Line 357: | Line 355: | ||
<code C> | <code C> | ||
#include < | #include < | ||
- | #include <SHT2x.h> | + | #include <Sodaq_SHT2x.h> |
- | int controlPin 7; | + | int controlPin=7; |
void setup() | void setup() | ||
Line 397: | Line 395: | ||
#include " | #include " | ||
- | int controlPin 7; | + | int controlPin |
Adafruit_SI1145 uv = Adafruit_SI1145(); | Adafruit_SI1145 uv = Adafruit_SI1145(); | ||
void setup() { | void setup() { | ||
pinMode(controlPin, | pinMode(controlPin, | ||
- | delay(100); | + | |
+ | | ||
| | ||
Serial.begin(9600); | Serial.begin(9600); | ||
Line 434: | Line 433: | ||
} | } | ||
</ | </ | ||
+ | ===== Senzorul barometric ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Nodurile Sparrow folosesc senzorul [[http:// | ||
+ | |||
+ | <code C> | ||
+ | #include < | ||
+ | #include < | ||
+ | int controlPin = 7; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(controlPin, | ||
+ | delay(100); | ||
+ | | ||
+ | digitalWrite(controlPin, | ||
+ | | ||
+ | Serial.begin(9600); | ||
+ | BaroSensor.begin(); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if(!BaroSensor.isOK()) { | ||
+ | Serial.print(" | ||
+ | Serial.println(BaroSensor.getError()); | ||
+ | BaroSensor.begin(); | ||
+ | } | ||
+ | else { | ||
+ | Serial.print(" | ||
+ | Serial.println(BaroSensor.getTemperature()); | ||
+ | Serial.print(" | ||
+ | Serial.println(BaroSensor.getPressure()); | ||
+ | } | ||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
==== Senzorul inerțial ==== | ==== Senzorul inerțial ==== | ||
Line 607: | Line 645: | ||
< | < | ||
- | ===== Transmisia radio ===== | ||
- | |||
- | Pentru a folosi transceiver-ul radio cu care sunt dotate nodurile senzoriale, vom utiliza o bibliotecă scrisă pentru Arduino ce ne va simplifica 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(); | ||
- | } | ||
- | </ | ||
- | |||
- | < | ||
- | |||
- | < | ||
- | </ | ||
- | {{ :: | ||
- | < | ||
- | < | ||
- | |||
- | ===== Protocoale de transmisie radio ===== | ||
- | |||
- | Pentru lucrarea curentă de laborator veți folosi biblioteca ZigduinoTransfer ce folosește clasele definite în laboratorul anterior pentru transmisia radio. Clasa implementează un protocol peste functiile de transmisie și recepție obișnuite și poate fi descărcată de {{: | ||
- | |||
- | Instalarea bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în Arduino\libraries | ||
- | |||
- | Mai jos aveți un exemplu care vă permite să trimiteți și să recepționați pachete de date de pe interfața radio. Pentru aceasta aveți nevoie de două noduri: primul rulează codul care transmite (Tx) și al doilea recepționează (Rx). | ||
- | |||
- | Codul pentru Transmitter: | ||
- | <code C> | ||
- | #include < | ||
- | |||
- | //create object | ||
- | ZigduinoTransfer ET; | ||
- | |||
- | struct SEND_DATA_STRUCTURE{ | ||
- | //put your variable definitions here for the data you want to send | ||
- | //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO | ||
- | int blinks; | ||
- | int pause; | ||
- | }; | ||
- | |||
- | //give a name to the group of data | ||
- | SEND_DATA_STRUCTURE mydata; | ||
- | |||
- | void setup(){ | ||
- | Serial.begin(9600); | ||
- | //start the library, pass in the data details | ||
- | ET.begin(details(mydata)); | ||
- | | ||
- | pinMode(11, OUTPUT); | ||
- | | ||
- | | ||
- | | ||
- | } | ||
- | |||
- | void loop(){ | ||
- | //this is how you access the variables. [name of the group].[variable name] | ||
- | mydata.blinks = 5; | ||
- | mydata.pause = 10; | ||
- | //send the data | ||
- | ET.sendData(); | ||
- | | ||
- | //Just for fun, we will blink it out too | ||
- | | ||
- | digitalWrite(11, | ||
- | delay(mydata.pause * 100); | ||
- | digitalWrite(11, | ||
- | delay(mydata.pause * 100); | ||
- | } | ||
- | | ||
- | delay(5000); | ||
- | } | ||
- | </ | ||
- | |||
- | Codul pentru Receiver: | ||
- | |||
- | <code C> | ||
- | #include < | ||
- | |||
- | //create object | ||
- | ZigduinoTransfer ET; | ||
- | |||
- | struct RECEIVE_DATA_STRUCTURE{ | ||
- | //put your variable definitions here for the data you want to receive | ||
- | //THIS MUST BE EXACTLY THE SAME ON THE OTHER NODE!!! | ||
- | int blinks; | ||
- | int pause; | ||
- | }; | ||
- | |||
- | //give a name to the group of data | ||
- | RECEIVE_DATA_STRUCTURE mydata; | ||
- | |||
- | void setup(){ | ||
- | Serial.begin(9600); | ||
- | //start the library, pass in the data details | ||
- | ET.begin(details(mydata)); | ||
- | | ||
- | pinMode(11, OUTPUT); | ||
- | | ||
- | } | ||
- | |||
- | void loop(){ | ||
- | //check and see if a data packet has come in. | ||
- | if(ET.receiveData()){ | ||
- | //this is how you access the variables. [name of the group].[variable name] | ||
- | //since we have data, we will blink it out. | ||
- | for(int i = mydata.blinks; | ||
- | digitalWrite(11, | ||
- | delay(mydata.pause * 100); | ||
- | digitalWrite(11, | ||
- | delay(mydata.pause * 100); | ||
- | } | ||
- | } | ||
- | | ||
- | //you should make this delay shorter than your transmit delay or else messages could be lost | ||
- | delay(250); | ||
- | } | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||