Σκοπός Σχεδίαση Συστημάτων με τον Arduino Μάθημα 2 Δραστηριότητα 2: Δημιουργώντας το Μετεωρολογικό Σταθμό. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού. Κατανόηση των βημάτων στη συστηματική ανάπτυξη ενός προγράμματος. Κατανόηση της έννοιας «Δομή Δεδομένων». Είσοδος / ανάγνωση δεδομένων από αρχείο. Κατανόηση μίας απλής επεξεργασίας ψηφιακού σήματος. Εισαγωγή στο Ολοκληρωμένο Περιβάλλον Ανάπτυξης Προγραμμάτων (IDE) Eclipse
2 Μάθημα 2: Μετεωρολογικός Σταθμός Μέρος Α : Σκοπός και Περιγραφή του Μαθήματος 3.1 ΕΠΙΔΙΩΞΗ ΤΗΣ ΑΣΚΗΣΗΣ Στο Β Μέρος, σ ένα δεύτερο πείραμα, θα μετρήσουμε διαφορετικά φυσικά μεγέθη / μεταβλητές. Θα δημιουργήσουμε ένα συνθετότερο σύστημα μέτρησης, από περισσότερους από έναν αισθητήρες, συνδέοντας στον Arduino, πέρα από τον TMP36, τον αισθητήρα για τη μέτρηση φωτεινότητας, τον TSL2561, για να μετράμε thn ένταση του φωτός, δημιουργώντας ένα μικρό μετεωρολογικό σταθμό. Θα δούμε μία διαφορετική σύνδεση / επικοινωνία αισθητήρων μικροελεγκτή, μέσα από το I2C δίαυλο. Αλλά και τη διαφορετική επικοινωνία μικροελεγκτή υπολογιστή / ασύρματη επικοινωνία. Μέσα από το μετεωρολογικό σταθμό, θα δούμε ένα συνθετότερο σύστημα μέτρησης από περισσότερους από έναν, αισθητήρες. Όμως, θα δούμε και συνθετότερες λειτουργίες και πιο προχωρημένες δυνατότητες ενός συστήματος, τη δυνατότητα να συνδέεται στο διαδίκτυο, μέσα από το WiFi δίκτυο και να ανεβάζει μετρήσεις και δεδομένα, στο διαδίκτυο 3.2 Εισαγωγή Ο TSL2561 O TSL μετράει την ένταση του φωτός σε LUX. Ανήκει σε μία μεγάλη κατηγορία αισθητήρων που επικοινωνούν με το μικροελεγκτή, με το πρωτόκολλο I2C, χρησιμοποιώντας ένα καλώδιο, για την επικοινωνία του με το μικροελεγκτή. Η σύνδεσή του, στο μικροελεγκτή είναι χαρακτηριστική όλων των αισθητήρων που χρησιμοποιούν το πρωτόκολλο Ι2C και περιγράφεται στην επόμενη ενότητα. 3.3 Η Πειραματική Διάταξη Συνδέουμε τους ακροδέκτες του TSL, Arduino με τον εξής τρόπο: Συνδέουμε τον VCC στα 3.3V του Arduino. Συνδέουμε GND στο GND του Arduino. Συνδέουμε τον i2c SCL clock ακροδέκτη στο i2c clock ακροδέκτη. Στο κλασσικό Arduinο, αυτός ο ακροδέκτης είναι η Αναλογική πύλη #5. Connect the i2c SDA ακροδέκτη στο i2c ακροδέκτη δεδομένων (data). Στο κλασσικό Arduinο, αυτός ο ακροδέκτης είναι η Αναλογική πύλη #4. Όλη αυτή η συνδεσμολογία, παριστάνεται στην Εικόνα 1.
3 Σχεδίαση Συστημάτων με τον ARDUINO Εικόνα 1: Η σύνδεση του αισθητήρα φωτεινότητας, στον Arduino. 3.4 Το Πρόγραμμα Όλη η διαδικασία της μέτρησης φωτεινότητας με τον αισθητήρα φωτεινότητας και της μετάδοσης των τιμών θερμοκρασίας, δηλαδή της ψηφιοποιημένης τάσης από τον αισθητήρα, στον υπολογιστή, ρυθμίζεται από ένα πρόγραμμα που εκτελείται στον μικροεπεξεργαστή του Arduino. Το πρόγραμμα για τη μέτρηση της έντασης του φωτός και οι βασικές λειτουργίες του προγράμματος, παριστάνονται στην Εικόνα 2. Η διαδικασία εκτέλεσης του προγράμματος είναι απλή. Αφού γράψουμε το πρόγραμμα στο αναπτυξιακό περιβάλλον του Arduino, το φορτώνουμε στον Arduino, επιλέγοντας την εντολή:
4 Μάθημα 2: Μετεωρολογικός Σταθμός Αρχείο Φόρτωση Τότε το πρόγραμμα θα αρχίσει να εκτελείται, εμφανίζοντας στη σειριακή οθόνη του υπολογιστή τις τιμές έντασης του φωτός σε LUX που παίρνει / διαβάζει από τo αισθητήρα φωτεινότητας (Εικόνα 2). #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_TSL2561_U.h> Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified (TSL2561_ADDR_FLOAT, 12345); void configuresensor(void) tsl.enableautorange(true); tsl.setintegrationtime(tsl2561_integrationtime_13ms); /* fast but low resolution */ Serial.println("------------------------------------"); Serial.print ("Gain: "); Serial.println("Auto"); Serial.print ("Timing: "); Serial.println("13 ms"); Serial.println("------------------------------------"); void setup(void) Serial.begin(9600); /* Initialise the sensor */ if(!tsl.begin()) /* There was a problem detecting the ADXL345... check your connections */ Serial.print("Ooops, no TSL2561 detected... Check your wiring or I2C ADDR!"); while(1); /* Setup the sensor gain and integration time */ configuresensor(); /* We're ready to go! */ Serial.println("");
5 Σχεδίαση Συστημάτων με τον ARDUINO void loop(void) /* Get a new sensor event */ sensors_event_t event; tsl.getevent(&event); /* Display the results (light is measured in lux) */ if (event.light) Serial.print(event.light); Serial.println(" lux"); else /* If event.light = 0 lux the sensor is probably saturated and no reliable data could be generated! */ Serial.println("Sensor overload"); delay(250);