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 που είναι έτσι κι αλλιώς η βάση και των δύο εργαλείων, αλλά σκεφτείτε για λίγο σε τι σύστημα αναπτύσετε και τις δυνατότητες που έχετε και οπλιστείτε με υπομονή ;)

Κυριακή 23 Σεπτεμβρίου 2012

TVout Library test

Σε παλαιότερο post είχαμε μιλήσει για τις δυνατότητες απεικόνισης γραφικών και ήχου με το Gameduino shield. Σε μια πιο απλή-φθηνότερη μορφή, μπορείτε να δοκιμάσετε τη βιβλιοθήκη TVout με την οποία προβάλλετε μηνύματα σε μια τηλεόραση ή οποιαδήποτε οθόνη με είσοδο video in

Η συνδεσμολογία :


Το σήμα Sync με αντίσταση 1ΚΩ συνδέεται στο pin 7 του Arduino.

Το σήμα Video με αντίσταση 470Ω συνδέεται στο pin 9 του Arduino. (εγώ χρησιμοποίησα 2 x 220Ω σε σειρά)



η βιβλιοθήκη πέρα από κείμενο περιλαμβάνει και συναρτήσεις για την παραγωγή γραφικών αλλά και ήχου, παρακάτω ένα demo video :



δείτε και μερικά απλά παιχνίδια:


Κώδικα θα βρείτε εδώ και εδώ.

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

Τετάρτη 19 Σεπτεμβρίου 2012

Arduino + Chiptunes = Nostalgia!

Η παρακάτω κατασκευή με Arduino είναι πραγματικά εύκολη και γρήγορη στην υλοποίηση και έχει να κάνει με την παραγωγή ήχων...η καλύτερα μουσικής... μέσω των ενσωματωμένων PWM (Pulse Width Modulation) pin. Η λογική απλή, μέσω του κώδικα, οδηγούμε το PWM pin με πολύ γρήγορες εναλλαγές ώστε να παράγει τόνους σε ένα ηχείο.

Η μουσική που παράγεται είναι η χαρακτηριστική των ηλεκτρονικών μηχανών των 80's  (C64, CPC, Spectrum, Amiga, Atari) αυτά τα blip-blop είναι γνωστά ως Chiptune και πραγματικά ξαφνιάστηκα όταν είδα τι σχετικό παράγεται ακόμη. Δεν κρύβω ότι τα συγκεκριμένα ακούσματα μου ξύπνησαν μνήμες από τα παλιά, μια πραγματική Nostalgia!

Για την κατασκευή θα χρειαστείτε:


1 x ηχείο (μικρής ισχύος, ακουστικά ή ακόμη και buzzer) αλλά και ενισχυτής για μεγαλύτερα ηχεία ;)
2 x connector cable (2 καλωδιάκια pin 3+gnd για τη σύνδεση arduino<->speaker)



και φυσικά κώδικα με μουσικά κομμάτια που θα βρείτε εδώ αλλά και εδώ

Αυτό που αλλάζει στα παραδείγματα είναι το byte stream  song_data[] που προκύτπει από τη μετατροπή κομματιών .mod, .mid, .xm, s3m, .sid κτλ που δημιουργήθηκαν από trackers. Στην ουσία πρόκειται για ένα port του player του Linus Akesson στο Arduino. Μπορείτε κι εσείς να δημιουργήσετε κομμάτια και γενικά να πειραματιστείτε όπως σε αυτό το blog.

να και ένα βίντεο:



Σε άλλες υλοποιήσεις γίνεται χρήση του YM2149 ή ενός όλα σε ένα FPGA.


Ok, ξέρω ότι αντί για όλο αυτό, μερικοί θα προτιμούσατε απλά .mp3 αλλά είπαμε, όσο γίνεται πιο κοντά στο πρωτότυπο...

Happy Nostalgia Hacking!


Δευτέρα 13 Αυγούστου 2012

Codebender - Bring the Cloud to your IDE (II)

Το @Codebender_cc είναι ένα νέο και πολλά υποσχόμενο περιβάλλον ανάπτυξης εφαρμογών (IDE) για Arduino στο cloud που αναπτύσσουν τα παδιά από την Πάτρα !


Τα πλεονεκτήματα που αποκτά ένα IDE στο cloud δεν είναι δύσκολο να τα φανταστούμε...

  • Καμία εγκατάσταση λογισμικού στον η/υ
  • Διαχείριση κώδικα online
  • Compile online 
  • Upload sketch στο Arduino μέσω USB ή μέσω δικτύου*
  • Documentation online
  • Libraries built-in
  • cross platform (Linux, OS X, Windows)
  • Your IDE everywhere!
 To project είναι open source και το αποθετήριο βρίσκεται στο Github. Επίσης, υπάρχουν κατατοπιστικά tutorial με video. Το Codebender βασίζεται σε state-of-the-art τεχνολογίες όπως HTML5, Java, CSS3, AWS, Symphony, Ace κτλ.

Κορωνίδα του συστήματος αποτελεί η δυνατότητα φόρτωσης κώδικα στο arduino μέσω δικτύου απομακρυσμένα και η οποία επιτυγχάνεται χρησιμοποιώντας την Ariadne το TFTP-Bootloader που έχει εξελίξει η ομάδα και προς το παρόν μπορούμε να το δούμε σε δράση μόνο σε ένα teaser video:



Το έργο είναι ακόμη closed beta σε φάση pre-register και μέχρι στιγμής πέτυχε τον στόχο που έθεσε ως crowdfunding project!

Keep up the good work!


Κυριακή 12 Αυγούστου 2012

Nanode feed to Cosm

To Nanode είναι ένα Arduino clone με ενσωματωμένες δυνατότητες διασύνδεσης με το web και το project το οποίο κέρδισε την πρώτη θέση, σε ψηφοφορία, για το καλύτερο έργο IoT του 2011 (best open-source IoT project).



Αν το προμηθευτείς σε kit, υπάρχουν οδηγίες βήμα-βήμα για το πως να το συναρμολογήσεις και να δοκιμάσεις την καλή λειτουργία του οι οποίες είναι τόσο αναλυτικές, ώστε ακόμη και ένας αρχάριος δε θα χρειαστεί πάνω από 1 ώρα για να το κατασκευάσει! Καλή ιδέα για soldering workshop btw ;)

Υπάρχουν πολλές εφαρμογές για έλεγχο συσκευών από web interface απομακρυσμένα, όπως και παροχή δεδομένων από διάφορους αισθητήρες στον φυσικό κόσμο προς το web αντίστοιχα. Με αυτό το sketch δημιουργώ ένα demo για την τροφοδότηση δεδομένων από έναν εικονικό αισθητήρα συνδεδεμένο στο Nanode προς μια υπηρεσία web αυτή της Cosm (πρώην Pachube). Ουσιαστικά είναι ένας client για την υπηρεσία του cosm στην οποία θα πρέπει πρώτα να γίνει εγγραφή και να δημιουργηθεί ένα feed στο οποίο θα τροφοδοτούνται τα δεδομένα από το Nanode.

Οδηγίες για δημιουργία λογαριασμού στο Cosm, δημιουργία API key και feed εδώ.

Live Datastream από το Nanode:


Τέλος, το σύνολο των δεδομένων του feed στην υπηρεσία Cosm εδώ.

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

Κυριακή 12 Φεβρουαρίου 2012

Arduino and Ethernet - Building the Internet of Things (IoT)

Τα περισσότερα ethernet shield που υπάρχουν για Arduino είναι βασισμένα στο W5100  της WIZnet και το ENC28J60 της Microchip. Το τελευταίο κυκλοφορεί και σε module το οποίο χρησιμοποιεί για επικοινωνία το SPI:

Για τη σύνδεση με το Arduino χρειάζονται τα εξής pin:
GND
VCC
SO (Serial data out)
SI (Serial data in)
SCLK (Serial data clock)
CS (Chip select)
INT (Interrupt)

Η συμβατή library για το module είναι η Ethershield. (full tcp/ip stack, www server, dhcp)

Η σύνδεση ενός Arduino στο internet προσφέρει έδαφος για νέα project που χαράσουν το δρόμο για το Internet of Things.

Εδώ, μπορείτε να κατεβάσετε ένα κομμάτι κώδικα για το Arduino, βασισμένο στο demo του @denhart, με το οποίο αναβοσβήνουμε ένα led μέσω μιας σελίδας στον ενσωματωμένο web server. 

Μπορείτε να το δοκιμάσετε στο δικό μου test board : live video για να παρακολουθείτε το LED και η σελίδα για τον έλεγχό του.

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

Παρασκευή 20 Ιανουαρίου 2012

Old Joystick Hack for Gameduino



Σε συνέχεια αυτού του post, κι εκεί που ήμουν έτοιμος να αγοράσω το joystick shield της sparkfun για να το συνδέσω με το gameduino, θυμήθηκα και "ξέθαψα" ένα gamepad που είχα για pc (PS like) και είναι σαφώς καλύτερο από αυτό της sparkfun για τρεις λόγους, 1ον ήμουν σίγουρος ότι θα ικανοποιούσε ένα pro-gamer σαν τον ανηψιό μου 2ον ένα καλοφτιαγμένο joystick πάντα βοηθάει το Human-Computer Interaction και 3ον θα προσέφερε σε μένα άλλη μια ευκαιρία για hack ;)



Για τη σχεδίαση, η λογική στηρίζεται στη χρήση των πλήκτρων του gamepad ως διακόπτες, για τη σύνδεση μεταξύ της γείωσης (gnd) και εσωτερικών pull-up resistor στα pin του Arduino.


Στην πράξη, τα βήματα που ακολούθησα για την κατασκευή είναι τα εξής

1. Αποσυναρμολόγηση, αποσύνδεση pcb, απογύμνωση καλωδίων



Χρησιμοποίησα το ίδιο καλώδιο που είχε εσωτερικά 7 καλωδιάκια και τα οποία έφταναν για τα βασικά (up, down, left, right, fire, start, gnd).

2. Κόλληση καλωδίων στο pcb




Ευτυχώς, υπήρχε κοινή γείωση (GND) για όλους τους διακόπτες όπου κόλλησα 1 καλώδιο (κάτω αριστερά), τα υπόλοιπα καλώδια κολλήθηκαν σε κάθε διακόπτη ξεχωριστά.


3. Απογύμνωση επαφών καλωδίων για σύνδεση pin headers


4. Σύνδεση με το Arduino

 
Για το παιχνίδι Asteroids ο κώδικας χρησιμοποιεί 4 digital pin (fire, thrust, left, right) κατ' επέκταση 4 + 1(gnd) καλώδια συνδέονται από το gamepad. Στον ίδιο κώδικα παρατηρείται ότι τα digitalpin ενεργοποιούνται όταν είναι low :
 
if (!digitalRead(5))
  r |= CONTROL_DOWN; 

Αν συνέβαινε το αντίθετο θα έπρεπε να υλοποιηθεί διάταξη με pull-down resistor ή να αλλάζε ο κώδικας ;)

5. Showtime !!!

  



Σχετικές κατασκευές στο instructables και artlum.

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