Google+

Κυριακή, 11 Νοεμβρίου 2012

RaspberryPi playing with Arduino and Processing

Για αρχή, θα αρκεστώ σε μια μικρή εισαγωγή για το φοβερό RaspberryPi SBC, ωστόσο για όσους θέλουν μάθουν περισσότερα, μπορούν να βρουν κάποια πολύ καλά άρθρα στο OSArena αλλά και πληροφορίες στο επίσημο site raspberrypi.org.

File:RaspberryPi.jpg

Η καρδιά του συστήματος είναι το SoC της Broadcom BCM2835 με ARM επεξεργαστή και 256/512MB μνήμη (model A/B), επεξεργαστή γραφικών με έξοδο hdmi (video+audio out), 2 x USB OTG, Ethernet και SD card reader. Ένα από τα βασικά του χαρακτηριστικά είναι το GPIO τα οποία είναι προγραματιζόμενα pin επέκτασης εισόδου/εξόδου και μέσω των οποίων μπορούμε να επικοινωνήσουμε με το φυσικό κόσμο όπως ακριβώς και με το Arduino. Πολλές διανομές Linux υποστηρίζουν ήδη το RaspberryPi. Και όλα αυτά με τιμή που τα σπάει στα 35$ !

Για το project, θα χρησιμοποιήσουμε τη γλώσσα Processing στο RaspberryPi, θα συνδέσουμε το Arduino με USB και θα εκτελέσουμε ένα πρόγραμμα ελέγχου του Arduino (ανάγνωση θερμοκρασίας από το LM35 και άναμμα ενός LED) από το RasberryPi, μέσω ενός γραφικού εργαλείου (ιδέα του scruss).

Τα βήματα:

  1. φορτώνουμε τo Occidentalis 0.2 Linux που έφτιαξε η  adafruit και έχει πολλά εργαλεία για makers στην SD, οδηγίες.
  2. ενημέρωση συστήματος:
    $ sudo apt-get update
    $ sudo apt-get upgrade
    $ sudo rpi-update
    
  3. εγκατάσταση της Java (open-jdk):
    $ sudo apt-get install librxtx-java openjdk-6-jdk
    
  4. κατέβασμα της Processing για linux και αποσυμπίεση σε ένα φάκελο πχ στο /home/pi
  5. διαγραφή του φακέλου java/ μέσα από το φάκελο του processing πχ για μένα στο processing-1.5.1/java
  6. αντί του φακέλου java, δημιουργία συντόμευσης στη java της εγκ/σης(βήμα 3):
    $ ln -s /usr/lib/jvm/java-6-openjdk-armhf java 
  7. διαγραφή μέσα στο φάκελο του processing του: modes/java/libraries/serial/library/linux32/librxtxSerial.so 
  8. αντικατάσταση του: modes/java/libraries/serial/library/RXTXcomm.jar με ένα αντίγραφο του: /usr/share/java/RXTXcomm.jar
  9. κατέβασμα και εγκατάσταση της βιβλιοθήκης controlP5 του Processing.
  10. κατέβασμα και εγκατάσταση της βιβλιοθήκης Arduino του Processing.
  11. εγκατάσταση του Arduino IDE για χρήση της firmata
    $ sudo apt-get install arduino
    
  12. σύνδεση του arduino με το RasberryPi με καλώδιο USΒ.

Για ένα τεστ της επικοινωνίας εκτελούμε τον κώδικα στο Processing:
import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
println(Arduino.list());
που μας επιστρέφει το όνομα της θύρας επικοινωνίας πχ. [0] /dev/ttyUSB0.



τώρα μπορούμε να συνδέσουμε το LM35 στο Analog Pin 0 και το LED στο Digital PWM Pin 3 του Arduino.

φόρτωση κώδικα firmata (File->examples->firmata->standardfirmata)




To πρόγραμμα Processing:

import processing.serial.*;
import cc.arduino.*;
import controlP5.*;
ControlP5 controlP5;
Arduino arduino;
 
int ledPin = 3;       // digital 3; PWM capable
int lm35pin = 0;      // analogue 0
int brightness=128;   // LED brightness, 0-255
int lastbrightness=0; // store brightness to stop flicker
 
void setup()
{
  size(250, 50);
  controlP5 = new ControlP5(this);
  // horizontal controlP5 slider bound to brightness variable
  controlP5.addSlider("brightness",0,255,128,90,12,128,16);
  // set up first Arduino we find
  arduino = new Arduino(this, Arduino.list()[0]);
  arduino.pinMode(ledPin, Arduino.OUTPUT);
}
 
void draw() {
  background(240);             // blank screen
  fill(0,0,0);                 // black text
  text("Brightness:", 15, 25); // slider label
  // read LM35 and print
  text("Temperature: " + str(int(read_lm35(lm35pin))) + " °C", 15, 48);
  if (brightness != lastbrightness) {
    // LED flickers if we keep doing analogWrite() with same value
    //  so only write if slider brightness value has changed
    arduino.analogWrite(ledPin, brightness);
  }
  lastbrightness=brightness;
}
 
float read_lm35(int pin) {
  // read lm35 on pin, and return float °C
  // assumes 5V supply, and 0-100°C range
  return (5.0 * arduino.analogRead(pin) * 100.0)/1024.0;
} 

Αν όλα πάνε καλά θα έχετε κάτι σαν το παρακάτω:






Δείτε κι ένα βίντεο.


Καλή επιτυχία!

Σημείωση: Σας προειδοποιώ ότι θα παρατηρήσετε καθυστέρηση καθόλη τη διάρκεια των ενεργειών compile & upload & run που εκτελεί και το Arduino IDE αλλά και το Processing, εξαιτίας της Java που είναι έτσι κι αλλιώς η βάση και των δύο εργαλείων, αλλά σκεφτείτε για λίγο σε τι σύστημα αναπτύσετε και τις δυνατότητες που έχετε και οπλιστείτε με υπομονή ;)