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 01:22] dan.tudose [Transmisia radio] |
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: | ||
- | 1. Se instalează Arduino IDE: http:// | + | - 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 194: | 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 216: | 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 269: | Line 298: | ||
} | } | ||
</ | </ | ||
+ | |||
===== Comunicația serială ===== | ===== Comunicația serială ===== | ||
Line 318: | 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 325: | 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 343: | Line 380: | ||
< | < | ||
< | < | ||
- | |||
==== Senzorul digital de temperatură și umiditate ==== | ==== Senzorul digital de temperatură și umiditate ==== | ||
Line 362: | Line 398: | ||
<code C> | <code C> | ||
- | #include "sht21b.h" | + | #include "sht21.h" |
float temp, humid; | float temp, humid; | ||
Line 398: | Line 434: | ||
</ | </ | ||
- | ===== Transmisia radio ===== | + | ===== Afișarea datelor de la senzori cu Processing |
- | Pentru a folosi transceiver-ul radio cu care sunt dotate nodurile senzoriale, | + | î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 |
- | Instalarea bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în //Arduino\libraries// | + | Bineînțeles, |
+ | Pur și simplu dezarhivați în directorul Arduino și rulați fișierul .exe | ||
- | Mai jos aveți un exemplu care vă permite să trimiteți și să recepționați date de pe interfața radio. | + | Încărcați următorul program |
<code C> | <code C> | ||
- | /* | + | int controlPin = 7; //sensor ON/OFF control pin (PE7) |
- | + | ||
- | 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() { |
- | + | ||
- | void setup() | + | |
- | { | + | |
- | ZigduinoRadio.begin(11); | + | |
- | Serial.begin(9600); | + | |
| | ||
- | | + | |
- | 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(); | + | |
- | } | + | |
| | ||
- | | + | |
- | | + | Serial.begin(9600); |
- | | + | } |
- | | + | |
- | + | ||
- | 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(" | + | |
- | | + | |
+ | void loop() { | ||
+ | digitalWrite(controlPin, | ||
+ | |||
+ | // wait a bit for the analog-to-digital converter | ||
+ | // to stabilize after the last reading: | ||
+ | delay(100); | ||
| | ||
- | | + | |
+ | Serial.println(analogRead(A2)); | ||
+ | |||
+ | digitalWrite(controlPin, | ||
+ | |||
+ | |||
} | } | ||
+ | </ | ||
- | void errHandle(radio_error_t err) | + | 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: |
- | Serial.println(); | + | |
- | | + | |
- | Serial.print((uint8_t)err, | + | |
- | Serial.println(); | + | |
- | } | + | |
- | void onXmitDone(radio_tx_done_t x) | + | <code C> |
- | { | + | // Graphing sketch |
- | Serial.println(); | + | |
- | Serial.print(" | + | |
- | Serial.print((uint8_t)x, 10); | + | // This program takes ASCII-encoded strings |
- | | + | // from the serial port at 9600 baud and graphs them. It expects values in the |
- | } | + | // range 0 to 1023, followed by a newline, or newline and carriage return |
+ | |||
+ | // Created 20 Apr 2005 | ||
+ | // Updated 18 Jan 2008 | ||
+ | // by Tom Igoe | ||
+ | // This example code is in the public domain. | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | int xPos = 1; // horizontal position of the graph | ||
+ | |||
+ | void setup () { | ||
+ | // set the window size: | ||
+ | | ||
+ | |||
+ | // List all the available serial ports | ||
+ | | ||
+ | // I know that the first port in the serial list on my mac | ||
+ | // is always my Arduino, so I open Serial.list()[0]. | ||
+ | // Open whatever port is the one you're using. | ||
+ | | ||
+ | // don't generate a serialEvent() unless you get a newline character: | ||
+ | | ||
+ | // set inital background: | ||
+ | | ||
+ | } | ||
+ | void draw () { | ||
+ | // everything happens in the serialEvent() | ||
+ | } | ||
+ | |||
+ | void serialEvent (Serial | ||
+ | // get the ASCII string: | ||
+ | | ||
+ | |||
+ | | ||
+ | // trim off any whitespace: | ||
+ | | ||
+ | // convert to an int and map to the screen height: | ||
+ | float inByte = float(inString); | ||
+ | | ||
+ | |||
+ | // draw the line: | ||
+ | | ||
+ | | ||
+ | |||
+ | // at the edge of the screen, go back to the beginning: | ||
+ | if (xPos >= width) { | ||
+ | xPos = 0; | ||
+ | | ||
+ | } | ||
+ | else { | ||
+ | // increment the horizontal position: | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | /* Max/MSP v5 patch for this example | ||
+ | | ||
+ | 1591.3oc0YszbaaCD9r7uBL5RalQUAO3CvdyS5zVenWZxs5NcfHgjPCIfJIT | ||
+ | RTxj+6AOHkoTDooroUs0AQPR73a+1cwtK3WtZxzEpOwqlB9YveAlL4KWMYh6 | ||
+ | Q1GLo99ISKXeJMmU451zTUQAWpmNy+NM+SZ2y+sR1l02JuU9t0hJvFlNcMPy | ||
+ | dOuBv.U5Rgb0LPpRpYBooM3529latArTUVvzZdFPtsXAuDrrTU.f.sBffXxL | ||
+ | vGE50lIHkUVJXq3fRtdaoDvjYfbgjujaFJSCzq4.tLaN.bi1tJefWpqbO0uz | ||
+ | 1IjIABoluxrJ1guxh2JfPO2B5zRNyBCLDFcqbwNvuv9fHCb8bvevyyEU2JKT | ||
+ | YhkBSWPAfq2TZ6YhqmuMUo0feUn+rYpY4YtY+cFw3lUJdCMYAapZqzwUHX8S | ||
+ | crjAd+SIOU6UBAwIygy.Q1+HAA1KH6EveWOFQlitUK92ehfal9kFhUxJ3tWc | ||
+ | sgpxadigWExbt1o7Ps5dk3yttivyg20W0VcSmg1G90qtx92rAZbH4ez.ruy1 | ||
+ | nhmaDPidE07J+5n2sg6E6oKXxUSmc20o6E3SPRDbrkXnPGUYE.i5nCNB9TxQ | ||
+ | jG.G0kCTZtH88f07Rt0ZMMWUw8VvbKVAaTk6GyoraPdZff7rQTejBN54lgyv | ||
+ | HE0Ft7AvIvvgvIwO23jBdUkYOuSvIFSiNcjFhiSsUBwsUCh1AgfNSBAeNDBZ | ||
+ | DIDqY.f8.YjfjV1HAn9XDTxyNFYatVTkKx3kcK9GraZpI5jv7GOx+Z37Xh82 | ||
+ | LSKHIDmDXaESoXRngIZQDKVkpxUkMCyXCQhcCK1z.G457gi3TzMz4RFD515F | ||
+ | G3bIQQwcP3SOF0zlkGhiCBQ1kOHHFFlXaEBQIQnCwv9QF1LxPZ.A4jR5cyQs | ||
+ | vbvHMJsLll01We+rE2LazX6zYmCraRrsPFwKg1ANBZFY.IAihr8Ox.aH0oAL | ||
+ | hB8nQVw0FSJiZeunOykbT6t3r.NP8.iL+bnwNiXuVMNJH9H9YCm89CFXPBER | ||
+ | bz422p8.O4dg6kRxdyjDqRwMIHTbT3QFLskxJ8tbmQK4tm0XGeZWF7wKKtYY | ||
+ | aTAF.XPNFaaQBinQMJ4QLF0aNHF0JtYuHSxoUZfZY6.UU2ejJTb8lQw8Fo5k | ||
+ | Rv6e2PI+fOM71o2ecY1VgTYdCSxxUqLokuYq9jYJi6lxPgD2NIPePLB0mwbG | ||
+ | YA9Rgxdiu1k5xiLlSU6JVnx6wzg3sYHwTesB8Z5D7RiGZpXyvDNJY.DQX3.H | ||
+ | hvmcUN4bP1yCkhpTle2P37jtBsKrLWcMScEmltOPv22ZfAqQAdKr9HzATQwZ | ||
+ | q18PrUGt6Tst2XMCRUfGuhXs6ccn23YloomMqcTiC5iMGPsHsHRWhWFlaenV | ||
+ | XcqwgCQiGGJzptyS2ZMODBz6fGza0bzmXBj7+DA94bvpR01MffAlueO7HwcI | ||
+ | pWCwmzJdvi9ILgflLAFmyXB6O7ML0YbD26lenmcGxjVsZUN+A6pUK7AtTrPg | ||
+ | M+eRYG0qD9j4I7eEbco8Xh6WcO.or9XDC6UCiewbXHkh6xm5LiPEkzpJDRTu | ||
+ | mEB44Fgz4NCtJvX.SM1vo2SlTCZGAe7GZu6ahdRyzFOhYZ+mbVVSYptBw.K1 | ||
+ | tboIkatIA7c1cTKD1u.honLYV04VkluHsXe0szv9pQCE9Ro3jaVB1o15pz2X | ||
+ | zYoBvO5KXCAe0LCYJybE8ZODf4fV8t9qW0zYxq.YJfTosj1bv0xc.SaC0+AV | ||
+ | 9V9L.KKyV3SyTcRtmzi6rO.O16USvts4B5xe9EymDvebK0eMfW6+NIsNlE2m | ||
+ | eqRyJ0utRq13+RjmqYKN1e.4d61jjdsauXe3.2p6jgi9hsNIv97CoyJ01xzl | ||
+ | c3ZhUCtSHx3UZgjoEJYqNY+hYs5zZQVFW19L3JDYaTlMLqAAt1G2yXlnFg9a | ||
+ | 53L1FJVcv.cOX0dh7mCVGCLce7GFcQwDdH5Ta3nyAS0pQbHxegr+tGIZORgM | ||
+ | RnMj5vGl1Fs16drnk7Tf1XOLgv1n0d2iEsCxR.eQsNOZ4FGF7whofgfI3kES | ||
+ | 1kCeOX5L2rifbdu0A9ae2X.V33B1Z+.Bj1FrP5iFrCYCG5EUWSG.hhunHJd. | ||
+ | HJ5hhnng3h9HPj4lud02.1bxGw. | ||
+ | -----------end_max5_patcher----------- | ||
+ | |||
+ | */ | ||
</ | </ | ||
+ | |||
+ | 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. | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ |