Εμφάνιση αναρτήσεων με ετικέτα Arduino. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Arduino. Εμφάνιση όλων των αναρτήσεων

Τετάρτη 4 Σεπτεμβρίου 2024

Παρακολούθηση ποιότητας αέρα εσωτερικών χώρων

 Ένα σύστημα παρακολούθησης της ποιότητας αέρα εσωτερικών χώρων βασισμένο στον αισθητήρα ENS160 παρουσιάζω εδώ. 


Στο σχετικό κείμενο, που θα το βρείτε εδώ, παρουσιάζονται πέντε διαφορετικές εκδοχές:

  • Με Arduino R4 Minima και τη μονάδα ENS160 + AHT2X
  • Με ESP32 και τη μονάδα Fermion Environmental Module
  • Με ESP32 και κλασσικό Bluetooth πρωτόκολλο (και κατάλληλη εφαρμογή για smartphones)
  • Με ESP32 και Bluetooth Low Energy πρωτόκολλο (χρησιμοποιώντας και το Phyphox)
  • Με ESP32 και WiFi / Bluetooth

Δίνονται ο απαραίτητος κάθε φορά κώδικας, οδηγίες για τη συναρμολόγηση της διάταξης, 3D μοντέλα και αρχεία GERBER απαραίτητα για την κατασκευή πλακέτας και τη συναρμολόγηση, καθώς και πολλές ιδέες για τη βελτίωση και αύξηση της λειτουργικότητας του συστήματος.




Σάββατο 24 Φεβρουαρίου 2024

 Το 2013 με το φανατισμό του νεοφώτιστου στον Arduino παρουσίασα ένα πλήρες σύστημα συγχρονικής λήψης και απεικόνισης που εκμεταλλευόταν τις δυνατότητες του Arduino για τη λήψη δεδομένων από αναλογικούς και ψηφιακούς αισθητήρες. Από τότε και μέχρι σήμερα διατηρώ αμείωτο το ενδιαφέρον μου για την αξιοποίηση του Arduino ή και άλλων αντίστοιχων μικροϋπολογιστικών συστημάτων στη διδασκαλία των Φυσικών Επιστημών, συνεχίζω να αναπτύσσω το λογισμικό λήψης και απεικόνισης δεδομένων, αλλά έχει μετατοπιστεί το ενδιαφέρον μου σε μικρότερες και απλούστερες διατάξεις, ώστε να είναι δυνατή η κατασκευή τους ακόμη και από τον αρχάριο και να δίνεται περισσότερη σημασία στη διδασκαλία των Φυσικών Επιστημών με τη βοήθειά τους.



Αυτή η πορεία της σκέψης μου αντικατοπτρίζεται καθαρά στο νέο βιβλίο μου, που διατίθεται ελεύθερα και στο οποίο:

• Παρουσιάζεται η χρήση πολλών διαφορετικών αισθητήρων για την πραγματοποίηση πειραμάτων και τη λήψη μετρήσεων, όπως για παράδειγμα η χρήση πομποδέκτη υπερύθρων για την κατασκευή μιας απλής φωτοπύλης, η χρήση αισθητήρα υπερήχων για τη μέτρηση της ταχύτητας του ήχου ή τον προσδιορισμό θέσης σε μια κίνηση, η κατασκευή ενός απλού μαγνητόμετρου, και πολλά άλλα που θα τα βρείτε ξεφυλλίζοντας αυτό το βιβλίο.

• Παρουσιάζονται διάφορες προγραμματιστικές τεχνικές όπως η εξομάλυνση των πειραματικών δεδομένων με χρήση τoυ κυλιόμενου μέσου όρου ή η μέσω λογισμικού αύξηση της διακριτικής ικανότητας των μετρήσεων (oversampling).

• Επιδεικνύονται και αξιοποιούνται οι δυνατότητες δικτύωσης Bluetooth για την ασύρματη μετάδοση δεδομένων και τη λήψη και ανάλυση από υπολογιστή ή κινητό τηλέφωνο εφοδιασμένο με κατάλληλη εφαρμογή ή με το PhyPhox.

• Αξιοποιούνται και άλλα μικροϋπολογιστικά συστήματα (ESP8266, ESP32) που προγραμματίζονται με το Arduino IDE και διαθέτουν κάποια επιπλέον χαρακτηριστικά (π.χ. δικτύωση WiFi), που απουσιάζουν από τις βασικές εκδόσεις του Arduino. Δίνεται έτσι η δυνατότητα απεικόνισης των πειραματικών δεδομένων σε ιστοσελίδα στο διαδίκτυο είτε μέσω δημιουρ-γίας Web Server σε ένα ESP8266 ή μέσω αποστολής των δεδομένων σε κάποια ΙοΤ πλατ-φόρμα, π.χ. ThingSpeak.

Ελπίζω το βιβλίο αυτό να φανεί χρήσιμο στους συναδέλφους που διδάσκουν Φυσικές Επιστήμες και στους μαθητές τους.

Μεταφορτώστε το βιβλίο από εδώ

Σάββατο 23 Ιανουαρίου 2021

Μέτρηση διοξειδίου του άνθρακα

 Η διάταξη την οποία παρουσιάζω εδώ αποτέλεσε μέρος ενός project (CO2duino) με μαθητές του 3ου Γυμνασίου Ηγουμενίτσας, που παρουσιάστηκε αρχικά στους 10ους Πανελλήνιους Αγώνες Κατασκευών και Πειραμάτων Φυσικών Επιστημών και μετά στο φεστιβάλ Science on Stage που διεξάχθηκε από 30 Οκτωβρίου μέχρι 3 Νοεμβρίου 2019 στο Cascais της Πορτογαλίας.

Για τη μέτρηση των επιπέδων του CO2 χρησιμοποιήσαμε τον αισθητήρα MH-Z16 με δυνατότητες μέτρησης συγκέντρωσης CO2 από 0 – 5000 ppm.

Εικόνα 1: Ο αισθητήρας ανίχνευσης διοξειδίου του άνθρακα MH-Z16

    Η λειτουργία του αισθητήρα ΜΗ-Ζ16 βασίζεται στη φασματομετρία υπερύθρων για τη μέτρηση της συγκέντρωσης (σε ppm) του CO2 σε κάποιο μίγμα αερίων. Αποτελείται από ένα πομπό και ένα δέκτη υπερύθρων, ενώ πολύ κοντά στο δέκτη έχει τοποθετηθεί ειδικό φίλτρο που αποκόπτει όλες τις άλλες ακτινοβολίες εκτός από αυτές τις οποίες απορροφά το διοξείδιο του άνθρακα. Δηλαδή από τις ακτινοβολίες που εκπέμπει ο πομπός, ο δέκτης ανιχνεύει μόνο τις ακτινοβολίες που απορροφά το διοξείδιο του άνθρακα. Όσο αυξάνεται η συγκέντρωση του CO2 στο χώρο μεταξύ πομπού και δέκτη, τόσο μειώνεται η ένταση της ακτινοβολίας που ανιχνεύει ο δέκτης του αισθητήρας. Για χρήση σε εσωτερικούς χώρους ο αισθητήρας είναι ικανοποιητικά αξιόπιστος.

Για τη λειτουργία του ο αισθητήρας χρειάζεται τάση 5V, αλλά η επικοινωνία του αισθητήρα με τον μικροελεγκτή γίνεται στα 3,3V. Για το λόγο αυτό δε χρησιμοποιήσαμε ένα Arduino για τη σύνδεση του αισθητήρα, αλλά μια πλακέτα με τον μικροελεγκτή ESP8266 (Wemos D1 R1), η οποία όμως μπορεί να προγραμματιστεί χρησιμοποιώντας το ίδιο περιβάλλον εργασίας και την ίδια γλώσσα με τον Arduino. Η επικοινωνία του αισθητήρα με τον μικροελεγκτή γίνεται σειριακά στο 9600bps, ενώ τα αποτελέσματα των μετρήσεων αποστέλλονται σειριακά σε υπολογιστή, όπου καταγράφονται και απεικονίζονται γραφικά με τη βοήθεια του λογισμικού DataPlotter που διατίθεται ελεύθερα για εκπαιδευτική και μόνο χρήση από το blog μου.

Με τη χρήση της διάταξης διαπιστώσαμε την ύπαρξη του CO2 στα προϊόντα της αναπνοής του ανθρώπου (Εικόνα 2), αλλά και το σημαντικό του ρόλο στη φωτοσύνθεση και την αναπνοή των φυτών (Εικόνα 4). 

Εικόνα 2: Εκπνέοντας πάνω στον αισθητήρα

Ειδικότερα για την ανίχνευση των μεταβολών στη συγκέντρωση του CO2 κατά τη φωτοσύνθεση και την αναπνοή των φυτών εργαστήκαμε ως εξής: Σε μια μικρή διαφανή πλαστική φιάλη βάλαμε μερικά φύλλα μολόχας, ενώ ταυτόχρονα από το άνοιγμα της φιάλης εισάγαμε και τον αισθητήρα στο εσωτερικό της φιάλης. Με μια λάμπα λευκού φωτός φωτίσαμε τα φύλλα της μολόχας, προσομοιώνοντας την κατάσταση που επικρατεί κατά τη διάρκεια της ημέρας, ενώ στη συνέχεια καλύψαμε τη φιάλη με αλουμινόχαρτο για να προσομοιώσουμε την κατάσταση κατά τη διάρκεια της νύχτας. Στα πειράματά μας ο συνολικός κύκλος εναλλαγής ημέρας – νύχτας διαρκούσε περί τα 10 λεπτά. Χρησιμοποιώντας την κατάλληλη βιβλιοθήκη για να εκμεταλλευτούμε τις δυνατότητες του αισθητήρα με τον Arduino και το λογισμικό DataPlotter, πήραμε αποτελέσματα (Εικόνα 4), που επιβεβαιώνουν τη μείωση της συγκέντρωσης του CO2 κατά την ημέρα, όταν επικρατεί η φωτοσύνθεση και αντίστοιχα την αύξηση της συγκέντρωσης κατά τη νύχτα, οπότε και επικρατεί η αναπνοή.

Η πειραματική διάταξη

Εικόνα 4: Προσομοίωση ημερήσιου κύκλου μεταβολής της συγκέντρωσης CO2 λόγω φωτοσύνθεσης - αναπνοής φυτού

Νεότερη έκδοση της διάταξης υλοποιήθηκε με Arduino Micro, με τον στα 8ΜΗz χρονισμένο μικροελεγκτή του να στηρίζεται σε λογική 3.3V. Χρησιμοποιεί επιπλέον και μικρή OLED οθόνη για την την αποτύπωση των αποτελεσμάτων. 

Επίσης μια νεότερη έκδοση του λογισμικού DataPlotter με την επιπλέον δυνατότητα λήψης δεδομένων μέσω διαδικτύου (MQTT Broker) είναι διαθέσιμη στο blog μου αποκλειστικά και μόνο για εκπαιδευτική χρήση (http://ntphyslab.blogspot.com/2021/01/blog-post.html).


Λογισμικό απεικόνισης μετρήσεων (ΙΙ)

 Tη δεύτερη έκδοση του προγράμματος DataPlotter με δυνατότητα λήψης δεδομένων είτε από τον σειριακά συνδεδεμένο Arduino, είτε μέσω διαδικτύου (μέσω MQTT broker) μπορείτε να κατεβάσετε ελεύθερα για εκπαιδευτικούς και μόνο σκοπούς από εδώ

Τα προς απεικόνιση δεδομένα πρέπει να αποστέλλονται με τη μορφή: "data1 data2 data 3 data4".


Πέμπτη 25 Ιουλίου 2019

Βιβλίο: Arduino για αρχάριους

Μπορείτε ελεύθερα να κατεβάσετε το βιβλιαράκι μου "Arduino για αρχάριους", που γράφτηκε για σειρά σεμιναρίων που απευθύνονταν σε συναδέλφους εκπαιδευτικούς:

Τα παραδείγματα του βιβλίου σε ένα συμπιεσμένο αρχείο μπορείτε να τα κατεβάσετε από εδώ.

Δευτέρα 8 Απριλίου 2019

Λογισμικό απεικόνισης μετρήσεων

Μπορείτε να κατεβάσετε ελεύθερα για εκπαιδευτικούς και μόνο σκοπούς το λογισμικό γραφικής απεικόνισης μετρήσεων που λαμβάνονται σειριακά από τον Arduino από εδώ. Τα προς απεικόνιση δεδομένα πρέπει να αποστέλλονται σειριακά με τη μορφή: "data1 data2 data 3 data4".

Τρίτη 5 Ιουλίου 2016

Μέτρηση μαγνητικού πεδίου με τον Arduino και τον αισθητήρα SS49E

Το ολοκληρωμένο τριών ακίδων SS49Ε της Honeywell περιλαμβάνει ένα αισθητήρα μαγνητικού πεδίου, που η λειτουργία του στηρίζεται στο φαινόμενο Hall, καθώς και τα απαραίτητα ηλεκτρονικά στοιχεία για την ενίσχυση του ασθενούς σήματος. Στην έξοδο του ολοκληρωμένου η παραγόμενη τάση είναι ευθέως ανάλογη της έντασης του μαγνητικού πεδίου στο οποίο βρίσκεται ο αισθητήρας.
Με βάση τα στοιχεία που δίνει ο κατασκευαστής της διάταξης:

Στοιχεία από τον κατασκευαστή του αισθητήρα SS49E

  • Εκτός μαγνητικού πεδίου η τάση στην έξοδο του ολοκληρωμένου ισούται με το μισό της τάσης τροφοδοσίας (Vout = 2.5V αν Vcc=5V)
  • Η τάση στην έξοδο αυξάνεται με τυπικό ρυθμό 1,4mV/Gauss όταν στη μπροστινή επιφάνεια του ολοκληρωμένου προσεγγίζει ένας νότιος μαγνητικός πόλος και μειώνεται με τον ίδιο ρυθμό όταν προσεγγίζει βόρειος μαγνητικός πόλος.
  • Ο αισθητήρας μετράει μαγνητικά πεδία έντασης από -1000 έως 1000 Gauss (-100 έως 100 mT)
Ο αισθητήρας συνδέεται στον Arduino ως εξής: Η ακίδα 1 του αισθητήρα στην ακίδα 5V του Arduino, η ακίδα 2 στην ακίδα γείωσης του Arduino και η ακίδα 3 στην αναλογική είσοδο Α0 του Arduino.

Για τη σύνδεση του αισθητήρα στον Arduino

Με το ακόλουθο sketch μετράμε την ένταση του μαγνητικού πεδίου με τον αισθητήρα. Το ίδιο sketch μπορεί να χρησιμοποιηθεί και με διαφορετικούς αισθητήρες μαγνητικού πεδίου τύπου φαινομένου Hall όπως οι Α1301 ή Α1302 της Allegro Microsystems.

#define NOFIELD 509L    // Analog output with no applied field, calibrate this

// Uncomment one of the lines below according to device in use A1301 or A1302 or SS49e
// This is used to convert the analog voltage reading to milliGauss
//#define TOMILLIGAUSS 1953L   // For A1301: 2.5mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 1953mG
//#define TOMILLIGAUSS 3756L  // For A1302: 1.3mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 3756mG
#define TOMILLIGAUSS 3488L    // For SS49e: 1.4mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 3488mG

void setup()
{
  Serial.begin(115200);
}

void loop()
{
    //  Μeasure magnetic field
    int raw = analogRead(0);

    //  Uncomment this to get a raw reading for calibration of no-field point
    //  Serial.print("Raw reading: ");
    //  Serial.print(raw);
    //  Serial.print(" - ");

    long compensated = raw - NOFIELD;                                            // adjust relative to no applied field
    float magnField = compensated * TOMILLIGAUSS / 10000.0;   // adjust scale to mili Tesla

    Serial.print(magnField);
    Serial.print(" mT ");

    if ( magnField > 0 )     Serial.println("(South pole)");
    else if( magnField < 0 ) Serial.println("(North pole)");
    else Serial.println();

    delay(1000);
}

Αρχικά πρέπει να αποσχολιαστούν οι τρεις γραμμές μετά την "// Uncomment this ..." ώστε αφού μεταφορτωθεί o κώδικας στον Arduino, να πάρουμε στη σειριακή κονσόλα την τιμή που επιστρέφει ο αισθητήρας όταν ευρίσκεται εκτός μαγνητικού πεδίου. Την τιμή αυτή πρέπει να εισάγουμε στη μεταβλητή NOFIELD του sketch. Μετατρέπουμε ξανά σε σχόλια τις τρεις προηγούμενες γραμμές και στη συνέχεια και εκ νέου μεταγλωτίζουμε και μεταφορτώνουμε το sketch στον Arduino. Κατά την εκτέλεση του προγράμματος και πλησιάζοντας το βόρειο και μετά το νότιο πόλο ενός μαγνήτη στον αισθητήρα, στη σειριακή κονσόλα παίρνουμε:

Τα αποτελέσματα μέτρησης μαγνητικού πεδίου με τον Arduino



Τρίτη 28 Ιουνίου 2016

Μέτρηση έντασης ρεύματος με τον Arduino και το ΙΝΑ219


Το ολοκληρωμένο INA219 της Texas Instruments μετράει την τάση κατά μήκος μιας αντίστασης 0,1Ω (ανοχής 1%) η οποία παρεμβάλλεται στη διαδρομή του ρεύματος, και από την τάση αυτή προσδιορίζει την ένταση του ρεύματος που διαρρέεει την αντίσταση. Στο εμπόριο διατίθενται συναρμολογημένες μονάδες που περιέχουν το INA219 μαζί με τα απαραίτητα ηλεκτρονικά εξαρτήματα για τη σύνδεση σε μικροϋπολογιστικά συστήματα.

Προσυναρμολογημένη μονάδα INA219

To ΙΝΑ219 περιλαμβάνει στην είσοδό του ένα τελεστικό ενισχυτή ακριβείας που η μέγιστη επιτρεπτή διαφορά τάσης στις εισόδους του είναι ±320mV και συνεπώς μπορούν να μετρηθούν ρεύματα στην περιοχή ±3,2 A. Ενσωματώνει επίσης ένα αναλογικοψηφιακό μετατροπέα μέγιστης ακρίβειας 12bit που σημαίνει πως στην περιοχή των ±3,2 A έχει διακριτική ικανότητα 0,8mA. Μεταβάλλοντας το κέρδος του τελεστικού ενισχυτή μπορούμε να μεταβάλλουμε την περιοχή μέτρησης αλλά και την αντίστοιχη διακριτική ικανότητα. Για παράδειγμα με το ελάχιστο προκαθορισμένο κέρδος η περιοχή μέτρησης περιορίζεται στα ±400mA με διακριτική ικανότητα 0,1mA. Κάθε αναλογικοψηφιακή μετατροπή σε ακρίβεια 12bit διαρκεί 532μs. Το ολοκληρωμένο μπορεί να προγραμματιστεί για συνεχή τρόπο λειτουργίας, κατά τoν οποίo με τη λήξη μιας μετατροπής ξεκινάει αυτόματα μια άλλη μετατροπή, ενώ το αποτέλεσμα διατηρείται στο σχετικό καταχωρητή του ολοκληρωμένου. Ένα επιπλέον σημαντικό χαρακτηριστικό του ΙΝΑ219 είναι η δυνατότητα λήψης 2(N = 1..7) διαδοχικών μετατροπών και η επιστροφή του μέσου όρου τους, με αποτέλεσμα τη μείωση του ψηφιακού θορύβου αλλά με σημαντική αύξηση του απαιτούμενου χρόνου για τη μετατροπή. Η επικοινωνία του ολοκληρωμένου με τον Arduino υλοποιείται μέσω του δισύρματου διαύλου I2C.
Στο σχήμα που ακολουθεί φαίνεται ο τρόπος συνδεσμολογίας της έτοιμης μονάδας INA219 στον Arduino. Περιλαμβάνεται και ένα απλό κύκλωμα αποτελεούμενο από δύο αντιστάσεις συνδεδεμένες σε σειρά και τροφοδοτούμενες από μπαταρία των 9V.

Σύνδεση μονάδας ΙΝΑ219 στον Arduino

Υπάρχουν διάφορες βιβλιοθήκες που απλοποιούν τον προγραμματισμό του Arduino για τη μέτρηση της έντασης ρεύματος με τη μονάδα INA219:
Στα επόμενα παραδείγματα χρησιμοποιούμε τη βιβλιοθήκη του Korneliusz Jarzebski. Στο πρώτο παράδειγμα μετράμε την ένταση του ρεύματος που διαρρέει το απλό κύκλωμα της προηγούμενης εικόνας.

/*
    INA219 Bi-directional Current/Power Monitor.
    First Example.
*/

#include <Wire.h>
#include <INA219.h>

INA219 ina;

void setup()
{
   Serial.begin(115200);

   Serial.println("INA219 Current monitor");
   Serial.println("------------------------------");

   // Default INA219 address is 0x40
   ina.begin();

   // Configure INA219
   // INA219_RANGE_32V: Max input Voltage = 32V
   // INA219_GAIN_320MV:Max ShuntVoltage = 320mV - Current range  ±3,2 A
   // INA219_BUS_RES_12BIT: ACD precision 12bit
   // INA219_SHUNT_RES_12BIT_1S: 1 measurement =  1 Conversion
   ina.configure( INA219_RANGE_32V,                    
                          INA219_GAIN_320MV,                                                                                  
                          INA219_BUS_RES_12BIT,            
                          INA219_SHUNT_RES_12BIT_1S
                         );

   // Calibrate INA219
   //Rshunt = 0.1 ohm, Max excepted current = 2A
   ina.calibrate(0.1, 2);
}

void loop()
{
   Serial.print("Current: ");
   Serial.print(ina.readShuntCurrent(), 3);
   Serial.println(" A");
   delay(1000);
}

Μπορούμε να χρησιμοποιήσουμε τη δυνατότητα του ΙΝΑ219 λήψης πολλών διαδοχικών δειγμάτων από αντίστοιχο αριθμό μετατροπών και επιστροφής του μέσου όρου τους, π.χ. με την εντολή:

configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_16S)

η τιμή της έντασης ρεύματος που λαμβάνουμε είναι ο μέσος όρος 16 διαδοχικών δειγμάτων.

Επιπλέον το ΙΝΑ219 έχει τη δυνατότητα μέτρησης της τάσης μεταξύ του ακροδέκτη του V- και της γείωσης, καθώς και την τάση στα άκρα της παρεμβαλόμενης στο κύκλωμα αντίστασης. Το άθροισμα των δύο αυτών τάσεων είναι η συνολική τάση στα άκρα του προς μέτρηση κυκλώματος. Προφανώς γνωρίζοντας την τάση στα άκρα του κυκλώματος και το ρεύμα που το διαρρέει, είμαστε σε θέση να προσδιορίσουμε και την ισχύ που καταναλώνει. Για να εκμεταλλευτούμε τη δυνατότητα αυτή πρέπει να συνδεθεί η γείωση του Arduinο στον αρνητικό πόλο της μπαταρίας.

Τροποποιημένο κύκλωμα

Το αντίστοιχο sketch του Arduino παίρνει τη μορφή:

/*
    INA219 Bi-directional Current/Power Monitor.
    Second Example.
*/

#include <Wire.h>
#include <INA219.h>

INA219 ina;

void setup()
{
  Serial.begin(115200);

  Serial.println("INA219 Current/Power monitor");
  Serial.println("----------------------------");

  // Default INA219 address is 0x40
  ina.begin();

  // Configure INA219
  ina.configure( INA219_RANGE_32V,
                         INA219_GAIN_320MV,
                         INA219_BUS_RES_12BIT,
                         INA219_SHUNT_RES_12BIT_16S
                       );

  // Calibrate INA219.
  // Rshunt = 0.1 ohm, Max excepted current = 2A
  ina.calibrate(0.1, 2);
}

void loop()
{
  Serial.print("Current: ");
  Serial.print(ina.readShuntCurrent(), 3);
  Serial.println(" A");
  Serial.print("Bus Voltage: ");
  Serial.print(ina.readBusVoltage(), 4);
  Serial.println(" V");
  Serial.print("Total Voltage: ");
  Serial.print(ina.readBusVoltage()+ina.readShuntVoltage(), 4);
  Serial.println(" V");
  Serial.print("Bus Power: ");
  Serial.print(ina.readBusPower(), 4);
  Serial.println(" W");
  while(1);
}

Τα αποτελέσματα του sketch για το παραπάνω κύκλωμα λαμβάνονται στο σειριακό τερματικό:

Τα αποτελέσματα του 2ου sketch


Πέμπτη 16 Ιουνίου 2016

Μέτρηση πίεσης με τον Arduino και τον αισθητήρα MPX5700DP

Οι αισθητήρες πίεσης μετρούν την πίεση σε σχέση με κάποια άλλη πίεση αναφοράς. Διακρίνονται σε τρεις κατηγορίες:
  • Αισθητήρες απόλυτης πίεσης (absolute pressure): μετρούν την πίεση στην είσοδό τους σε σχέση με το κενό.
  • Αισθητήρες πίεσης βαθμίδας (gauge pressure): μετρούν την πίεση στην είσοδό τους σε σχέση με την ατμοσφαιρική.
  • Αισθητήρες διαφορικής πίεσης (differential pressure): μετρούν τη διαφορά των πιέσεων στις δύο εισόδους τους.
Υπάρχουν σήμερα ολοκληρωμένα συστήματα μέτρησης πίεσης που εκτός από τον αισθητήρα (που συνήθως λειτουργεί με βάση το πιεζοηλεκτρικό φαινόμενο) περιλαμβάνουν και κυκλώματα ενίσχυσης του σήματος και αντιστάθμισης θερμοκρασίας, απλοποιώντας εξαιρετικά τη διασύνδεση με μικροϋπολογιστικά συστήματα. Για παράδειγμα ο αισθητήρας διαφορικής πίεσης MPX5700DP της Freescale (τώρα NXP) μπορεί να μετρήσει διαφορικές πιέσεις στην περιοχή 0 - 700 kPa δημιουργώντας αναλογικό σήμα στην έξοδό του που με τροφοδοσία 5V μπορεί να κυμαίνεται στην περιοχή 0,2 - 4,7V. Διαθέτει αντιστάθμιση θερμοκρασίας και έρχεται προρυθμισμένος από τον κατασκευαστή.

Ο αισθητήρας πίεσης MPX5700DP

Η τάση (σε V) στην έξοδό του μεταβάλλεται ανάλογα με την πίεση (σε kPa) στην εισοδό του σύμφωνα με τη σχέση: Vout = Vs*(0,0012858*P+0,04), όπου Vs είναι η τάση τροφοδοσίας.

Η σχέση τάσης εξόδου - πίεσης εισόδου για τον αισθητήρα MPX5700DP

Η σύνδεση του MPX5700DP σε κάποια διάταξη μέτρησης γίνεται με βάση το κυκλωματικό διάγραμμα του επόμενου σχήματος:

Συνδέσεις του MPX5700DP

Ενώ για τη σύνδεση στον Arduino και με τη χρήση ενός breadboard μπορεί να χρησιμοποιηθεί ως οδηγός το επόμενο σχήμα. Προσοχή: Ο ακροδέκτης 1 (έξοδος) είναι αυτός με την εγκοπή.

Σύνδεση του MPX5700DP στον Arduino

Για λόγους ευκρίνειας του σχήματος οι πυκνωτές απόζευξης τροφοδοσίας (των 100nF και 1μF) φαίνονται τοποθετημένοι σχετικά μακριά από τα αντίστοιχα "ποδαράκια" του αισθητήρα. Στην πραγματικότητα πρέπει να συνδεθούν όσο το δυνατό πλησιέστερα προς αυτά.
Το ακόλουθο sketch χρησιμεύει στη λήψη μετρήσεων διαφορικής πίεσης με το συνδεδεμένο στον Arduino MPX5700DP.

//Sketch #1 - Example for Pressure Sensor MPX5700DP

long time;

void setup ( void )
{
    Serial.begin( 115200 );
    Serial.println( "Time (ms)\tPressure(kPa)" );
}

void loop ( void )
{
    time = millis();
 
    //Διάβασε την τάση στην έξοδο του αισθητήρα
    int val = analogRead( 0 );

    //Η μεταβλητή fval ισούται με το πηλίκο (Vout/Vs)
    float fval = ( float ) val / 1024.0;

    //Μετατροπή τάσης σε πίεση
    float kpa = ( fval - 0.04 ) / 0.0012858;
 
    //Εκτύπωση δεδομένων στο σειριακό τερματικό
    Serial.print( time );
    Serial.print( "\t" );
    Serial.println( kpa );

    delay ( 100 );
}  

Στην είσοδο (1) του MPX5700DP συνδέσαμε τη φουσκωμένη πλαστική σακούλα ενός πιεσομέτρου και μετρήσαμε τις μεταβολές της πίεσης καθώς πιέζαμε τη σακούλα με το χέρι μας. Η άλλη είσοδος του αισθητήρα πίεσης έμεινε ανοιχτή στον ατμοσφαιρικό αέρα και συνεπώς ο διαφορικός αισθητήρας χρησιμοποιήθηκε ουσιαστικά ως αισθητήρας πίεσης βαθμίδας. Το λογισμικό Terminal χρησιμοποιήθηκε για τη λήψη των δεδομένων από τον Arduino (αν και εξίσου καλά μπορεί να χρησιμοποιηθεί και το ενσωματωμένο τερματικό στο IDE του Arduino).

Οι μετρήσεις που λάβαμε με τον Arduino

Τα πειραματικά δεδομένα μπορούν να μεταφερθούν στο Excel όπου μπορεί να σχεδιαστεί και το γράφημα της πίεσης σε σχέση με το χρόνο.

Γραφική παράσταση διαφορικής πίεσης σε συνάρτηση με το χρόνο

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

Η σχέση τάσης εξόδου - πίεσης εισόδου για τον αισθητήρα MPX4250AP


Δευτέρα 30 Μαΐου 2016

Μέτρηση θερμοκρασίας με τον Arduino και το ψηφιακό θερμόμετρο DS18B20

Το ψηφιακό θερμόμετρο DS18B20 της Dallas Semiconductors (τώρα Maxim) συνδυάζει ένα αισθητήρα θερμοκρασίας και ένα μετατροπέα αναλογικού σε ψηφιακό. Ο αισθητήρας του DS18B20 μετράει θερμοκρασίες από -55°C μέχρι +125°C με ακρίβεια ±2°C, ενώ στην περιοχή από -10°C μέχρι +85°C η ακρίβεια είναι ±0,5°C. Η ανάλυση του αναλογικοψηφιακού μετατροπέα του DS18B20 μπορεί  να επιλεγεί από το χρήστη στα 9, 10, 11 ή 12 bit, που οδηγεί σε βήμα μέτρησης 0,5°C, 0,25°C, 0,125°C ή 0,0625°C αντίστοιχα. Η ψηφιοποίηση της θερμοκρασίας διαρκεί 750 ms ή λιγότερο. Η τάση λειτουργίας του DS18B20 κυμαίνεται στην περιοχή 3V - 5,5V.
To DS18B20 επικοινωνεί με τον κεντρικό μικροεπεξεργαστή (με τον Arduino στην περίπτωσή μας) μέσω του διαύλου 1-Wire, ο οποίος απαιτεί μόνο μια γραμμή δεδομένων (και τη γραμμή γείωσης) για την επικοινωνία. Κάθε ψηφιακό θερμόμετρο DS18B20 ενσωματώνει μια 64-bit μνήμη ROM, στην οποία κατά τη φάση παραγωγής έχει αποθηκευθεί ένας μοναδικός για κάθε ολοκληρωμένο κωδικός μέσω του οποίου ο κεντρικός μικροεπεξεργαστής αναγνωρίζει και διευθυνσιοδοτεί το ψηφιακό θερμόμετρο στο δίαυλο. Κατ' αυτό τον τρόπο πολλαπλά DS18B20 (μέχρι και 127) μπορούν να λειτουργήσουν συνδεδεμένα στον ίδιο 1-Wire δίαυλο.
Η σύνδεση των DS18B20 στον κεντρικό μικροεπεξεργαστή υπολοιείται όπως φαίνεται στο ακόλουθο σχήμα:

Εικόνα 1: Σύνδεση DS18B20 στο δίαυλο 1-Wire (κανονικός τρόπος τροφοδοσίας)
Ένα ιδιαίτερο χαρακτηριστικό του DS18B20 είναι η δυνατόπτητα λειτουργίας χωρίς εξωτερική τροφοδοσία ("παρασιτικός" τρόπος λειτουργίας). Στην περίπτωση αυτή η τροφοδοσία του DS18B20 εξασφαλίζεται από τη γραμμή μεταφοράς δεδομένων (Data Line) του δίαυλου 1-Wire.

Εικόνα 2: Σύνδεση DS18B20 στο δίαυλο 1-Wire ("παραστιτικός" τρόπος τροφοδοσίας)
Στον Arduino πολλαπλά DS18B20 μπορούν να συνδεθούν, όπως φαίνεται στο σχήμα που ακολουθεί:

Εικόνα 3: Σύνδεση DS18B20 στον Arduino
Στο εμπόριο κυκλοφορούν υδατοστεγείς διατάξεις που καθε μια περικλείει ένα ψηφιακό θερμόμετρο DS18B20, απλοποιώντας τη χρήση τους σε διάφορες πρακτικές περιπτώσεις:

Εικόνα 4: Υδατοστεγή DS18B20 στον Arduino
Για τη λειτουργία του DS18B20 με τον Arduino απαιτούνται οι βιβλιοθήκες:
  • OneWire, που μπορεί να μεταφορωθεί από την ιστοσελίδα OneWire Project, μέσω της οποίας υλοποιείται το πρωτόκολλο επικοινωνίας του διαύλου 1-Wire.
  • DallasTemperature, που μπορεί να μεταφορτωθεί από την ιστοσελίδα του Miles Burton στο Github.
Είναι χρήσιμο (αν και όχι απαραίτητο) να γνωρίζουμε τον μοναδικό κωδικό (διεύθυνση) κάθε DS18Β20 που διαθέτουμε. Το πρόγραμμα (sketch) που ακολουθεί και προέρχεται (με κάποιες μικροαλλαγές) από την ιστοσελίδα Hackatronics, εκτελεί αυτήν ακριβώς τη λειτουργία:

//Sketch #1 - Address Finder

// This sketch looks for 1-wire devices and prints their addresses (serial number) to the UART,
// in a format that is useful in Arduino sketches

#include <OneWire.h>

// Setup a oneWire instance to communicate with OneWire devices
// 1-wire Data Line is connected to Arduino pin 2
OneWire  ds( 2 );  

void setup( void )
{
   Serial.begin( 115200 );
   discoverOneWireDevices();
}

void discoverOneWireDevices( void )
{
   byte addr[8];

  Serial.println( "Looking for 1-Wire devices..." );
  while ( ds.search( addr ) )
  {
     Serial.println( "\n\rFound \'1-Wire\' device with address:" );
     for( int i = 0; i < 8; i++ )
     {
        Serial.print( "0x" );
        if ( addr[i] < 16 )
        {
          Serial.print( '0' );
        }
        Serial.print( addr[i], HEX );
        if ( i < 7 )
        {
           Serial.print( ", " );
        }
     }
     if ( OneWire::crc8( addr, 7 ) != addr[7])
     {
         Serial.println( "CRC is not valid!" );
         return;
     }
  }
  Serial.println( "\n\rThat's it." );
  ds.reset_search();
  return;
}

void loop( void )
{
   // nothing to do here
}

Το sketch εμφανίζει τα αποτελέσματα της αναζήτησης είτε στην ενσωματωμένη στο Arduino IDE σειριακή οθόνη είτε σε οποιοδήποτε άλλο εξωτερικό λογισμικό προσομοίωσης σειριακής οθόνης όπως π.χ. το Termite, το Τερματικό, κ.ά.

Έχοντας βρει τον μοναδικό για το ψηφιακό μας θερμόμετρο κωδικό μπορούμε πλέον να μεταφορτώσουμε στον Arduino το επόμενο sketch, ώστε να πάρουμε τις πρώτες μετρήσεις θερμοκρασίας:

//Sketch #2 - First example DS 18B20

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// 1-Wire Data line is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire( ONE_WIRE_BUS );

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors( &oneWire );

// Array to hold device address
DeviceAddress Thermometer = { 0x28, 0x02, 0xAB, 0x34, 0x5, 0x0, 0x0, 0x40 };
// You have to chagne DeviceAddress data to match your specific sensor !!!

// Setup function. Here we do the basics
void setup( void )
{
    // Start serial port
    Serial.begin( 115200 );
    Serial.println( "Dallas DS18B20 Digital Thermometer" );

    // Set the resolution to 11 bit
    sensors.setResolution( Thermometer, 11 );
}

// Function to print the temperature for a device
void printTemperature( DeviceAddress deviceAddress )
{
    float tempC = sensors.getTempC( deviceAddress );
    Serial.print( "Temperature: " );
    Serial.print( tempC );
    Serial.write( 0xB0 );  // Print degrees symbol
    Serial.println( "C" );
}

// Main function. It will request the tempC from the sensors and display on Serial.
void loop( void )
{
    // Call sensors.requestTemperatures() to issue a global temperature
    // request to all devices on the 1-Wire bus
    sensors.requestTemperatures();

    // Print out the data
    printTemperature( Thermometer );

    // Some delay
    delay( 625 );
}

Τα αποτελέσματα που παίρνουμε στη σειριακή οθόνη έχουν τη μορφή που φαίνεται στην επόμενη εικόνα:

Εικόνα 5: Μέτρηση θερμοκρασίας με το DS18B20

Εναλλακτικά αν δε γνωρίζουμε τη διεύθυνση (σειριακό κωδικό) του ψηφιακού μας θερμομέτρου DS18B20 μπορούμε να χρησιμοποιήσουμε το επόμενο sketch:

//Sketch #3 - Second example DS 18B20

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// 1-Wire Data Line is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire( ONE_WIRE_BUS );

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors( &oneWire );

// The setup function. We only start the sensors here
void setup( void )
{
    // start serial port
    Serial.begin( 115200 );
    Serial.println( "Dallas DS18B20 Digital Thermometer" );

    // Start up the library
    sensors.begin();
}

// Main function, get and show the temperature

void loop( void )
{
    // Call sensors.requestTemperatures() to issue a global temperature
    // request to all devices on the bus
    sensors.requestTemperatures(); // Send the command to get temperatures

    // After we got the temperatures, we can print them here.
    // We use the function ByIndex, and as an example get the temperature from the first sensor only.
    Serial.print( "Temperature for the device 1 ( index 0 ) is: " );
    Serial.print( sensors.getTempCByIndex( 0 ) );
    Serial.write( 0xB0 );  // Print degrees symbol
    Serial.println( "C" );

    //Some delay
    delay( 250 );
}

Οι Εικόνες (1) και (2) προέρχονται από την ιστοσελίδα tweaking4all. Τα δύο sketch λήψης θερμοκρασίας με το DS18B20 που δίνω εδώ (Sketch #2 και Sketch #3), είναι τροποποιημένες εκδόσεις από αντίστοιχα παραδείγματα εφαρμογών της βιβλιοθήκης DallasTemperature.


Δευτέρα 9 Μαΐου 2016

Arduino - Βασικά χαρακτηριστικά

Ο Arduino είναι  μια  ανοιχτού  υλικού  και  κώδικα  πλατφόρμα  ανάπτυξης  ηλεκτρονικών πρωτοτύπων, βασισμένη σε ευέλικτο και εύκολο στη χρήση υλικό και λογισμικό. Το υλικό του Arduino (μοντέλο Uno, στο οποίο θα αναφερόμαστε εν συνεχεία) συναρμολογείται σε μια μικρή πλακέτα διαστάσεων 68mmx53mm.
Η πλακέτα του Arduino
Στην καρδιά του συστήματος βρίσκεται ο οκτάμπιτος μικροελεγκτής ATmega328 της Atmel χρονισμένος στα 16MHz. Ο ATmega328 διαθέτει ενσωματωμένη μνήμη τριών τύπων:
  1. 2kB στατικής μνήμης RAM στην οποία τα προγράμματα κατά την εκτέλεσή τους αποθηκεύουν μεταβλητές, πίνακες κ.λπ. Η μνήμη αυτή χάνει τα δεδομένα της όταν η παροχή ρεύματος σταματήσει ή αν γίνει επανεκκίνηση (reset) του συστήματος.
  2. 1kB μνήμης EEPROM στην οποία κατά την εκτέλεση των προγραμμάτων μπορούν να εγγραφούν/διαβαστούν δεδομένα byte προς byte. Η EEPROM δεν χάνει τα περιεχόμενά της με απώλεια τροφοδοσίας ή επανεκκίνηση του συστήματος.
  3. 32kB μνήμης Flash, από τα οποία τα 0,5kb χρησιμοποιούνται από τον bootloader του Arduino, το λογισμικό δηλ. εκείνο που είναι απαραίτητο για την εγκατάσταση των δικών μας προγραμμάτων στον μικροελεγκτή μέσω της θύρας USB, χωρίς να χρειάζεται εξωτερικός προγραμματιστής. Το υπόλοιπο της μνήμης Flash χρησιμοποιείται για την αποθήκευση αυτών ακριβώς των προγραμμάτων. Και η μνήμη Flash δε χάνει τα περιεχόμενά της με απώλεια τροφοδοσίας ή επανεκκίνηση.
Στο υλικό του μικροελεγκτή ATmega328 συμπεριλαμβάνονται και τρεις «χρονιστές»: timer0 και timer2 διακριτικής ικανότητας 8bit και ο timer1 των 16bit. Χρησιμεύουν είτε στην εισαγωγή καθυστέρησης κατά την εκτέλεση των εντολών κάποιου προγράμματος είτε στην εκτέλεση συγκεκριμένων εντολών σε καθορισμένες χρονικές στιγμές ή ανά τακτά χρονικά διαστήματα.
Ο Atmega328 διαθέτει 14 ψηφιακές εισόδους/εξόδους. Λειτουργούν στα 5V και μπορούν να δώσουν ή να «αντλήσουν» μέχρι 40mA ρεύματος. Μπορούν για παράδειγμα ως έξοδοι να χρησιμοποιηθούν για να ανάψουν ή να σβήσουν ένα LED ή ως είσοδοι να καταγράψουν την κατάσταση ενός διακόπτη. Όλες οι ψηφιακές είσοδοι/έξοδοι έχουν εσωτερικές pull-up (πρόσδεσης στην τροφοδοσία) αντιστάσεις των 20-50 kΩ οι οποίες εξ ορισμού είναι απενεργοποιημένες. Μερικές από τις ψηφιακές εισόδους/εξόδους, έχουν και ειδικές χρήσεις:
  • Οι είσοδοι 0 και 1 χρησιμοποιούνται για τη λήψη και μετάδοση σειριακών δεδομένων.
  • Oι είσοδοι 3, 5, 6, 9, 10, 11 λειτουργούν ως «ψευδοαναλογικές» έξοδοι (PWM) των 8-bit.
  • Οι είσοδοι 2 και 3 μπορούν να ρυθμιστούν ώστε να προκαλέσουν εξωτερική διακοπή (interrupt) του εκτελούμενου κώδικα στον μικροελεγκτή.
  • Οι είσοδοι 10, 11, 12 και 13 υποστηρίζουν τη σειριακή επικοινωνία SPI.
Στην πλακέτα του Arduino οι 14 ψηφιακές είσοδου/έξοδοι καταλήγουν στις αντίστοιχες θηλυκές ακίδες σύνδεσης που καταλαμβάνουν τη μια πλευρά της πλακέτας. Στην άλλη πλευρά της πλακέτας στις ακίδες που σημαίνονται από Α0 – Α5 καταλήγουν οι 6 αναλογικές είσοδοι του Atmega328 οι οποίες μέσω πολυπλέκτη συνδέονται στον εντός του μικροελεγκτή ευρισκόμενο μετατροπέα αναλογικού σε ψηφιακό (ADC) που έχει διακριτική ικανότητα 10-bit δηλ. ψηφιοποιεί μια αναλογική τάση 0-5V σε 1024 διαφορετικές τιμές. Σχετική με τις αναλογικές εισόδους είναι η ακίδα AREF της πλακέτας μέσω της οποίας υπάρχει η δυνατότητας παροχής εξωτερικής τάσης αναφοράς για τη λειτουργία του αναλογικοψηφιακού μετατροπέα (ADC) του μικροελεγκτή. Μεγάλος αριθμός διαφορετικών αισθητήρων (π.χ. θερμοκρασίας, πίεσης, δύναμης, μαγνητικού πεδίου, φωτοπύλες κ.ά.) μπορεί να συνδεθεί στις εισόδους αυτές δίνοντάς μας τη δυνατότητα να πραγματοποιήσουμε μετρήσεις των αντίστοιχων φυσικών μεγεθών. Και οι έξι αναλογικές είσοδοι μπορούν να χρησιμοποιηθούν ως ψηφιακές είσοδοι/έξοδοι (ψηφιακές ακίδες 14 μέχρι 19), ενώ οι αναλογικές είσοδοι Α4 και Α5 με χρήση του κατάλληλου λογισμικού χρησιμοποιούνται για την υλοποίηση του δισύρματου σειριακού πρωτοκόλλου επικοινωνίας Ι2C.
Στην ίδια πλευρά της πλακέτας υπάρχει μια σειρά ακίδων σχετικών με την τροφοδοσία του συστήματος, ως εξής:
  • Vin: Η τάση τροφοδοσίας του συστήματος όταν χρησιμοποιείται εξωτερική πηγή. Μπορεί να χρησιμοποιηθεί και ως είσοδος τροφοδοσίας του συστήματος.
  • 5V: Έξοδος σταθεροποιημένης τάσης 5V. Χρησιμεύει για την τροφοδοσία συσκευών ή αισθητήρων που πρόκειται να συνδεθούν στον Arduino.
  • 3.3V: Έξοδος σταθεροποιημένης τάσης 3.3V.
  • GND: Γείωση.
  • Reset: Ακίδα επανεκκίνησης. Το σύστημα επανεκκινεί όταν η ακίδα γειωθεί.
  • IOREF: Παρέχει ένδειξη για την τάση αναφοράς με την οποία λειτουργεί ο μικροελεγκτής.
Η τροφοδοσία του Arduino μπορεί να γίνει είτε μέσω της θύρας USB είτε από εξωτερική τάση (7-12V). Η πηγή τροφοδοσίας επιλέγεται αυτόματα.
Στην πλακέτα του Arduino, περιλαμβάνονται επίσης:
  • Τα κατάλληλα ηλεκτρονικά εξαρτήματα για την παροχή σταθερής τάσης τροφοδοσίας στο κύκλωμα.
  • Ένας δεύτερος μικροελεγκτής (Atmega 16U2) με τον κρύσταλλο χρονισμού του, που κατάλληλα προγραμματισμένος λειτουργεί ως μετατροπέας σειριακού σε USB για την επικοινωνία του Arduino με ηλεκτρονικό υπολογιστή.
  • Βύσμα USB για τη σύνδεση του Arduino με υπολογιστή.
  • Βύσμα τύπου jack για την τροφοδοσία του Arduino από εξωτερική πηγή.
  • Διακόπτης επανεκκίνησης (reset).
  • 4 ενδεικτικά LED (Power, Tx, Rx και L συνδεδεμένο στην ψηφιακή έξοδο 13) καθώς και μικρός ακόμη αριθμός συνοδευτικών ηλεκτρονικών εξαρτημάτων.
Σε επίπεδο υλικού πρέπει να αναφέρουμε πως έχει αναπτυχθεί μεγάλος αριθμός πλακετών (shields) οι οποίες «κουμπώνουν» κατευθείαν πάνω στην πλακέτα του Arduino αυξάνοντας τις δυνατότητες και τη λειτουργικότητά του συστήματος.

Το λογισμικό που συνοδεύει την πλατφόρμα Arduino διακρίνεται σε:
1. Bootloader : Είναι ένα μικρού μεγέθους πρόγραμμα (0,5 kb στην περίπτωση του Arduino Uno) προεγκατεστημένο από τον κατασκευαστή στη μνήμη flash του μικροελεγκτή που εκτελείται κατά την τροφοδοσία ή την επανεκκίνηση του Arduino. Ο ρόλος του είναι να επιτρέπει τη μεταφόρτωση των προγραμμάτων μας στη μνήμη του Arduino από τον υπολογιστή μέσω του καλωδίου USB χωρίς να είναι απαραίτητη για το σκοπό αυτό η χρήση ειδικών συσκευών προγραμματισμού.
2. Ολοκληρωμένο περιβάλλον ανάπτυξης (Arduino IDE) : Είναι μια εφαρμογή που εκτελείται στον υπολογιστή στον οποίο μέσω της θύρας USB συνδέεται ο Arduino. Είναι γραμμένη σε Java και προέρχεται από το IDE της γλώσσας προγραμματισμού Processing. Η σχεδίασή του είναι μινιμαλιστική. Περιλαμβάνει ένα επεξεργαστή κειμένου για τη συγγραφή των προγραμμάτων (που στη γλώσσα του Arduino αποκαλούνται sketches) ενώ με τη χρήση εξωτερικών προγραμμάτων εκτελεί τη μεταγλώττιση του προγράμματος σε κώδικα κατανοητό από τον μικροελεγκτή, και μεταφορτώνει με ένα «κλικ» τον κώδικα στον Arduino. Περιλαμβάνει επίσης μια σειριακή κονσόλα μέσω της οποίας ο χρήστης μπορεί να αλληλεπιδρά με το σύστημα Arduino  είτε στέλνοντας κατάλληλες εντολές είτε λαμβάνοντας δεδομένα. Παρότι ο έμπειρος προγραμματιστής μπορεί να το βρει αρκετά περιοριστικό, το ολοκληρωμένο περιβάλλον του Arduino παρέχει στον αρχάριο όλα όσα χρειάζεται για τη διαχείριση του Arduino από τον υπολογιστή.
3. Βιβλιοθήκες : Είναι αρχεία κώδικα γραμμένα σε C ή C++ που παρέχουν επιπλέον λειτουργικότητα στη διαχείριση του υλικού και των δεδομένων και βελτιώνουν την αναγνωσιμότητα του κώδικα. Η βιβλιοθήκη πυρήνα (core library) συμπυκνώνει χαμηλού επιπέδου πτυχές του προγραμματισμού του μικροελεγκτή (π.χ. διαχείριση καταχωρητών), επιτρέποντας στους χρήστες να επικεντρωθούν στο κάθε φορά ιδιαίτερο έργο τους και όχι στην χρονοβόρα και επίπονη διαδικασία εκμάθησης του προγραμματισμού σε χαμηλό επίπεδο. Η βιβλιοθήκη πυρήνα  εξ ορισμού συμπεριλαμβάνεται σε οποιοδήποτε πρόγραμμά μας (χωρίς αυτό να απαιτεί κάποια ιδιαίτερη ενέργεια από εμάς). Λόγω της περιορισμένης μνήμης του μικροελεγκτή, μέρος του κώδικα έχει διαχωριστεί σε επιμέρους βιβλιοθήκες οι οποίες μπορεί κατά περίπτωση να συμπεριληφθούν όταν απαιτείται σε κάποιο πρόγραμμα. Μεταξύ αυτών περιλαμβάνονται:
  • EEPROM – διαχείριση της μνήμης EEPROM του μικροελεγκτή
  • Ethernet – Για σύνδεση στο διαδίκτυο μέσω του Ethernet Shield
  • Firmata – Για την επικοινωνία με εφαρμογές στον υπολογιστή χρησιμοποιώντας το τυπικό σειριακό πρωτόκολλο.
  • GSM – για τη σύνδεση σε ένα δίκτυο GSM/GRPS με το GSM shield.
  • LiquidCrystal – για τον έλεγχο οθόνης υγρών κρυστάλλων (LCD).
  • SD – διαχείριση καρτών μνήμης SD.
  • Servo – για τον έλεγχο σερβοκινητήρων.
  • SPI – για την επικοινωνία με συσκευές μέσω του Serial Peripheral Interface (SPI) Bus
  • SoftwareSerial – για τη σειριακή επικοινωνία με χρήση οποιωνδήποτε ψηφιακών ακίδων.
  • Stepper – για τον έλεγχο βηματικών κινητήρων.
  • TFT – για τον έλεγχο οθόνης TFT.
  • WiFi – Για ασύρματη σύνδεση στο διαδίκτυο μέσω του Arduino WiFi shield.
  • Wire – για την επικοινωνία με συσκευές μέσω του Two Wire Interface (TWI/I2C).
Ιδιαίτερη προσπάθεια έχει γίνει ώστε οι βιβλιοθήκες πυρήνα να απλοποιούν τη διαδικασία συγγραφής του κώδικα χωρίς να περιορίζουν υπερβολικά την ευελιξία του χρήστη. Παρ’ όλα αυτά διαδικασίες όπως η ανάγνωση μιας ψηφιακής εισόδου ή εγγραφή μιας τιμής σε κάποια ψηφιακή έξοδο (digitalRead ή digitalWrite) ή η ψηφιακή μετατροπή και ανάγνωση της επιστρεφόμενης τιμής σε μια αναλογική είσοδο (analogRead)  -διαδικασίες βασικές για ένα σύστημα μετρήσεων- μπορούν να υλοποιηθούν ώστε να τρέχουν πολλές φορές γρηγορότερα.
Επιπλέον βιβλιοθήκες έχουν αναπτυχθεί από  τα μέλη της κοινότητας των χρηστών του Arduino αυξάνοντας τόσο τη λειτουργικότητα όσο και την απόδοση της πλατφόρμας.

Σε  συνδυασμό  με  κατάλληλο  πρόγραμμα  ελέγχου  και  απεικόνισης  ο Arduino μπορεί  να χρησιμεύσει  ως  το απολύτως οικονομικό, αλλά ικανοποιητικών δυνατοτήτων εργαλείο  συγχρονικής  λήψης  (MBL) στο  εργαστήριο  Φυσικών  Επιστημών  των Γυμνασίων και Λυκείων.