Εισαγωγή

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

Έρευνα

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

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

Σε αναζητήσεις μας για τις συνθήκες που επηρεάζουν την ποιότητα ζωής πολλές φορές συναντούσαμε τον όρο θερμική άνεση. Οι παράγοντες που επηρεάζουν τη θερμική άνεση διερευνήθηκαν πειραματικά τη δεκαετία του 1970 και οι μελέτες αυτές οδήγησαν στην ανάπτυξη διεθνών στάνταρ. Ιδιαίτερα τα κτίρια κατοικιών μπορεί να διαφέρουν πολύ περισσότερο σε θερμική άνεση από τα δημόσια και εμπορικά κτίρια. Αυτό οφείλεται στο μικρότερο μέγεθος τους, στις παραλλαγές στα ρούχα που φοράμε και στις διαφορετικές χρήσεις κάθε δωματίου. Τα μπάνια πρέπει να είναι σε θερμοκρασία άνετη για έναν άνθρωπο με ή χωρίς ρούχα. Τα υπνοδωμάτια είναι σημαντικά επειδή πρέπει να φιλοξενούν διαφορετικά επίπεδα ρούχων και επίσης διαφορετικούς ρυθμούς μεταβολισμού των ανθρώπων που κοιμούνται ή ξυπνούν. Τα τελευταία είκοσι χρόνια, οι ερευνητές ανέπτυξαν επίσης προηγμένα μοντέλα θερμικής άνεσης που χωρίζουν το ανθρώπινο σώμα σε πολλά τμήματα και προβλέπουν τοπική θερμική δυσφορία λαμβάνοντας υπόψη τη θερμική ισορροπία. Αυτό άνοιξε μια νέα αρένα μοντελοποίησης θερμικής άνεσης που στοχεύει στη θέρμανση/ψύξη επιλεγμένων τμημάτων του σώματος.

Συνθήκες θερμικής άνεσης

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

Βίντεο το οποίο περιγράφει τον φυσικό αερισμό των κτιρίων ως παράγοντα για την θερμική άνεση

Παράλληλα, στο σύστημα ελέγχου που σχεδιάζουμε, θέλουμε να ενσωματώσουμε τεχνολογίες τεχνητής νοημοσύνης όπως η Google Assistant, η Amazon Alexa και η Apple Siri. Έμπνευσή μας ήταν και διάφορα μοντέλα ρομπότ τεχνητής νοημοσύνης, που εξυπηρετούν τον άνθρωπο στο σπίτι, όπως το Vector της Anki. Σκοπός μας είναι η δημιουργία ενός συστήματος πιο φιλικού, διασκεδαστικού και πρακτικού για τον χρήστη.

Λίστα υλικών και εργαλείων

Τα υλικά που χρειαστήκαμε για την υλοποίηση της Envi κόστισαν περίπου 165 ευρώ και είναι τα εξής:

  • 1 πλατφόρμα ρομποτικής με τροχούς mechanum με κόστος περίπου 30 ευρώ
  • 1 Arduino Mega με κόστος περίπου 30 ευρώ
  • 1 οδηγό κινητήρων L293D Motor Driver Shield με κόστος περίπου 5 ευρώ
  • 1 αισθητήρα σκόνης GP2Y1010AU0F Optical Dust Sensor με κόστος περίπου 30 ευρώ
  • 1 αισθητήρα MQ-135 Air Quality Sensor με κόστος περίπου 3 ευρώ
  • 1 αισθητήρα θερμοκρασίας-υγρασίας DHT11 Digital Temperature/Humidity Sensor με κόστος περίπου 3 ευρώ
  • 1 μονάδα bluetooth HC-05 με κόστος περίπου 8 ευρώ
  • 1 αντίσταση 1KΩ και μια αντίσταση 2KΩ
  • 1 Mini Solderless Breadboard με κόστος περίπου 3 ευρώ
  • 1 μπαταρία λιθίου Gens ace 800mAh 11.1V 45C 3S1P Lipo Battery Pack με κόστος περίπου 13 ευρώ
  • 1 φορτιστή μπαταρίας λιθίου Turnigy 12v 2-3S Basic Balance Charger με κόστος περίπου 12 ευρώ
  • 1 διακόπτη on-off switch
  • 1 9V T-type Battery Connector to Barrel Jack for Arduino με κόστος 1 ευρώ
  • Μπαταρίες 9V
  • Καλώδια για συνδέσεις
  • 1KG Νήμα PLA 0,4mm με κόστος περίπου 20 ευρώ

Τα βασικά εργαλεία και λογισμικά που χρησιμοποήσαμε ήταν τα εξής:

  • Για το σχεδιασμό και την εκτύπωση των τρισδιάστατων κομματιών της Envi (κέλυφος, στηρίγματα κινητού, λογότυπο, βάση σύνδεσης) χρησιμοποιήσαμε το TinkerCAD, την εκπαιδευτική έκδοση του Fusion 360 και τους 2 3Δ εκτυπωτές του εργαστηρίου μας (Creality CR-20 Pro και Rep Rap Prusa i3).
  • Για την συναρμολόγηση της πλατφόρμας και την σύνδεση των ηλεκτρονικών στοιχείων χρησιμοποιήσαμε κατσαβίδια, αποστάτες, βίδες, κολητήρι και καλάι.
  • Για τον προγραμματισμό του Arduino Mega χρησιμοποιήσαμε το Arduino IDE.
  • Για τον προγραμματισμό της εφαρμογής χρησιμοποιήσαμε το AppInventor και το πρόσθετο Personal Image Classifier.

Σχεδιασμός

Πλατφόρμα οχήματος και στήριγμα τηλεφώνου

Η Άσπα στο σχεδιαστήριο

Μετά τη παραλαβή της πλατφόρμας του οχήματος ξεκινήσαμε τον 3d σχεδιασμό του κέλυφους της Envi, το οποίο τοποθετείται πάνω από την πλατφόρμα. Στο κε΄λυφος βρίσκεται και το στήριγμα του τηλεφώνου το αρχικό σχέδιο του οποίου βρήκαμε στον δικτυακό τόπο thingiverse και το τροποποιήσαμε έτσι ώστε να ταιριάζει με το υπόλοιπο σχέδιο. Παράλληλα πάνω στο κέλυφος υπάρχει το λογότυπο της ομάδας μας, ενώ για την στερέωση του σχεδιάσαμε και μία βάση η οποία τοποθετείται πάνω στην πλατφόρμα. Όλα τα σχέδια έγιναν στο Tinkercad από την ομάδα μας και βρίσκονται αποθηκευμένα σε αυτή την πλατφόρμα.

Πλέον έχουμε προχωρήσει στον σχεδιασμό της σκεπής μέσω ενός πιο επαγγελματικού προγράμματος, του Fusion 360. Όλα τα μέρη της Envi σχεδιάστηκαν από την αρχή εκεί και εκτυπώθηκαν ξανά στους 3Δ εκτυπωτές μας.

Ηλεκτρονικά στοιχεία και συνδέσεις

Σύνδεση της μονάδας Bluetooth

Η μονάδα bluetooth συνδέεται στις υποδοχές RX3 και TX3 στο Arduino Mega. Είναι σημαντικό να προσέξουμε την σύνδεση RX της μονάδας bluetooth η οποία θα πρέπει να συνδεθεί με ένα κύκλωμα διεραίτη τάσης (με 1 αντίσταση 1KΩ και 1 2ΚΩ) ώστε να δέχεται το σήμα από το Arduino Mega, μετατρέπωντας το από 5 σε 3V.

Σχηματικό σύνδεσης της μονάδας Bluetooth

Σύνδεση αισθητήρων

Ο αισθητήρας θερμοκρασίας και υγρασίας συνδέεται με το digital pin 33, ενώ ο αισθητήρας επικίνδυνων αερίων με την αναλογική θύρα A7. Ο αισθητήρας σκόνης έχει δύο συνδέσεις με το Arduino. Η αναλογική του έξοδος συνδέεται με την αναλογική θύρα A8, ενώ η μονάδα led που έχει συνδέεται με το digital pin 31.

Σχηματικό σύνδεσης των αισθητήρων που διαθέτει η Envi

Σύνδεση κινητήρων

Για την σύνδεση των κινητήρων αυτών χρησιμοποιούμε το L293D Motor Driver Shield που μας επιτρέπει να συνδέσουμε μέχρι και 4 κινητήρες DC και 2 κινητήρες servo στο Arduino. Αυτό φυσικά σημαίνει ότι χρησιμοποιεί πολλά από τα digital pins του Arduino. Το Motor Driver Shield τοποθετείται πάνω στην πλακέτα Arduino Mega. Για να καταφέρουμε να κάνουμε την σωστή τοποθέτηση θα πρέπει να προσέξουμε να εισάγουμε τα Αναλογικά pins του Driver στα αντίστοιχα της κάθε πλακέτας.

Τρόπος τοποθέτησης του Motor driver πάνω στην πλακέτα Arduino Mega

Το Motor Driver Shield που έχουμε επιλέξει δέχεται μέχρι και 4 DC κινητήρες στις θέσεις από M1 μέχρι Μ4 που διαθέτει. Κάθε θέση δέχεται δυο καλώδια που έρχονται από τον κάθε κινητήρα. Επίσης επειδή οι κινητήρες απαιτούν αρκετό ρεύμα και παράγουν ηλεκτρικό θόρυβο που είναι πιθανό να δημιουργήσει πρόβλημα στο Arduino, χρειάζεται να συνδέσουμε χωριστά στο Motor Driver Shield μια πηγή ρεύματος με μπαταρίες. Σε αυτή τη περίπτωση δεν θα πρέπει να ξεχάσουμε να αφαιρέσουμε το jumper που υπάρχει στην πλακέτα του Driver.

Το jumper το οποίο θα αφαιρέσουμε για να δώσουμε ξεχωριστή πηγή ρεύματος στους κινητήρες

Έχουμε 4 διαφορετικούς κινητήρες και θα αξιοποιήσουμε τις 4 θέσεις (M1, M2, M3, M4) συνδέοντας στην κάθε μία έναν διαφορετικό κινητήρα, όπως φαίνεται στην παρακάτω εικόνα. Επίσης θα τροφοδοτήσουμε τον motor driver με μια μπαταρία λιθίου, ενώ το Arduino Mega το τροφοδοτούμε με μια μπαταρία 9V.

Σχηματικό σύνδεσης κινητήρων και μπαταριών
Πλήρες σχηματικό με όλες τις συνδέσεις

Αλγόριθμοι

Η φύση της Envi είναι στενά συνδεδεμένη με την αλληλεπίδρασή της με τον άνθρωπο. Γι’ αυτόν τον λόγο, η φιλοσοφία των αλγορίθμων ενθαρρύνει την επικοινωνία σε κάθε βήμα – από την φωνητική εντολή ως την επεξεργασία των δεδομένων. Ο βασικός μας αλγόριθμος έχει ως εξής:

  • H Envi “κοιμάται” και περιμένει από εμάς να την ξυπνήσουμε με μια κίνηση του χεριού μας:
    • Τότε ενεργοποιεί το σύστημα αναγνώρισης προσώπου,
    • μας χαιρετά προσωποποιημένα με οικείο τρόπο αφού μας έχει αναγνωρίσει
    • και παράλληλα ενεργοποιεί το σύστημα αναγνώρισης φωνητικής εντολής.
  • Ακούει την φωνητική εντολή και
    • αν την αναγνωρίσει καλεί το σύστημά της να πάρει την κατάλληλη περιβαλλοντική μέτρηση
    • αλλιώς αν δεν την αναγνωρίσει μας ζητάει με ευγενικό τρόπο να επαναλάβουμε την φωνητική εντολή
  • Μόλις τα δεδομένα των αισθητήρων, σταλούν από το πυρήνα του Arduino στην εφαρμογή της Envi:
    • η Envi μας τα παρουσιάζει φωνητικά ενώ παράλληλα δεν χάνει τον ενθουσιασμό της! Όσο μας μιλά, μπορεί να μας εκπλήξει με τις άψογες χορευτικές τις κινήσεις.
  • Η Envi μπορεί να μας ειδοποιήσει ακόμα και όταν κοιμάται. Παίρνει συνεχώς μετρήσεις από τον αισθητήρα επικύνδυνων αερίων και
    • αντιδρά σε περίπτωση υψηλής συγκέντρωσης φωνάζοντας μας.

Υλοποίηση

Εκτύπωση και συναρμολόγηση

Τα εκτυπωμένα μέρη της Envi

Αρχικά η ομάδα μας συναρμολόγησε την βασική πλατφόρμα η οποία αποτελείται από δύο ορόφους με απόσταση 5,5 εκατοστά. Στον κάτω όροφο έχουμε τοποθετήσει την κεντρική μονάδα του Arduino, τον οδηγό των κινητήρων, το breadboard και την μονάδα bluetooth, ενώ στον πάνω όροφο βρίσκονται όλοι οι αισθητήρες (σκόνης, θερμοκρασίας, υγρασίας και επικίνδυνων αερίων) και οι δύο μπαταρίες για την τροφοδοσία του συστήματός μας (μία μπαταρία για τους κινητήρες και μία για το υπόλοιπο σύστημα). Επειδή η πλατφόρμα μας είναι μεταλλική για να αποφύγουμε προβλήματα βραχυκύκλωσης, τοποθετήσαμε κομμάτια κόντρα πλακέ για την μόνωση των ηλεκτρονικών στοιχείων.

Η σκεπή και τα στηρίγματα εκτυπώθηκαν στους 3D Εκτυπωτές που βρίσκονται στο εργαστήριο μας. Η εκτύπωση της σκεπής ολοκληρώθηκε μέσα σε 9 ώρες ενώ τα στηρίγματα της βάσης του κινητού σε 2. Λόγω του κλειστού χώρου του εργαστηρίου επιλέξαμε να εκτυπώσουμε με υλικό PLA 0,4mm γιατί δεν είναι τόσο βλαβερό όσο κάποια άλλα υλικά όπως το ABS που χρησιμοποιούνται για την τρισδιάστατη εκτύπωση.

Προγραμματισμός

Ο προγραμματισμός του Arduino που βρίσκεται πάνω στην Envi έγινε με το Arduino IDE και το πρόγραμμα μας βρίσκεται αποθηκευμένο στο αποθετήριο μας στο Github. Το πρόγραμμα μας αξιοποιεί την βιβλιοθήκη AFMotor για τον έλεγχο των 4 κινητήρων, την βιβλιοθήκη DHT για τον έλεγχο του αισθητήρα θερμοκρασίας και υγρασίας, καθώς και μέρος του κώδικα που προτείνει η κατασκευάστρια εταιρία του αισθητήρα σκόνης για την λειτουργία του.

Στο κυρίως μέρος του προγράμματος ελέγχουμε ανά 10 λεπτά την συγκέντρωση επικίνδυνων αερίων και σε περίπτωση που αυτή ξεπερνά το 20% στέλνουμε μήνυμα στην εφαρμογή για να ειδοποιήσει τους ανθρώπους.

//Every 10 minutes we test to see if there is a high concentration of dangerous gases in the room
  if (curTime - prevTime > 600000) {
    int gas = analogRead(gasPin);
    //We map the value to a 1-100 scale
    int mappedGas = map(gas, 1, 1024, 1, 100);
    //Debugging messages
    Serial.print("gas:");                           
    Serial.print(mappedGas);
    Serial.println("%");
    //If the value is over 20% we send it to the Smartphone via bluetooth
    if (mappedGas > 20) {
      Serial3.println(mappedGas);  
    }
    prevTime = curTime;
  }

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

//Check for a possible incoming command from bluetooth
  if (Serial3.available() > 0) {  
    //Store the incoming command to the command variable
    command = Serial3.readString();   
    //Debugging messages
    Serial.print("Command:");         
    Serial.println(command);
    //Envi wakes up and moves around for a few seconds
    rotate();
    delay(1300);
    Stop();
    //Actions for get temperature command
    if (command == "temp") {
      Serial.print("Temperature:");
      float t = dht.readTemperature();                              
      Serial3.println(t);
      //Debugging messages
      Serial.print(t);
      Serial.println("C");
    }
    //Actions for get humidity command
    if (command == "hum") {
      float h = dht.readHumidity(); 
      Serial3.println(h);
      //Debugging messages
      Serial.print("Humidity:");                           
      Serial.print(h);
      Serial.println("%");
    }
    //Actions for get dust command
    if (command == "getDust") {
      digitalWrite(ledPin, HIGH);
      delayMicroseconds(280);
      adcvalue = analogRead(dustPin);
      digitalWrite(ledPin, LOW);
      adcvalue = Filter(adcvalue);
      voltage = (SYS_VOLTAGE / 1024.0) * adcvalue * 11;
      if(voltage >= NO_DUST_VOLTAGE)
      {
        voltage -= NO_DUST_VOLTAGE;
        density = voltage * COV_RATIO;
      }
      else 
        density = 0;
      Serial3.println(density);
      //Debugging messages
      Serial.println("microparticles concentration: ");
      Serial.print(density);
      Serial.println("mg/m3");
    }

Ο προγραμματισμός της εφαρμογής έγινε με την πλατφόρμα AppInventor και το πρόγραμμα μας βρίσκεται και αυτό στο αποθετήριο μας στο Github. Ο σχεδιασμός της εφαρμογής είναι αρκετά μινιμαλιστικός. Στην οθόνη του κινητού εμφανίζονται δυο μπλε κύκλοι που είναι τα μάτια της Envi, ενώ από κάτω έχουμε συμπεριλάβει ένα μικρό webViewer το οποίο χρειάζεται για να πάρει τα δεδομένα της κάμερας το Personal Image Classifier για να γίνει η ανγνώριση προσώπου.

Για να δώσουμε την δυνατότητα στην Envi να εκφράζεται με περισσότερους τρόπους έχουμε δημιουργήσει λίστες με πιθανές εκφράσεις τις οποίες μπορεί να λέει σε κάθε περίπτωση.

Παρόμοια προσέγγιση είχαμε και για να δώσουμε στην Envi τη δυνατότητα να αναγνωρίζει διαφορετικές εκφράσεις – εντολές από τους χρήστες.

Κάθε φορά που ενεργοποιείται η αναγνώριση φωνής (speech recognizer) από τον αισθητήρα proximity sensor, το πρόγραμμα ελέγχει τις λίστες των εντολών για να καταλάβει αν η φωνητική εντολή ανήκει σε κάποια από αυτές και στέλνει το αντίστοιχο μήνυμα στο Arduino μέσω bluetooth.

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

Για την αναγνώριση των προσώπων, αξιοποιήσαμε το πρόσθετο Personal Image Classifier. Δημιουργήσαμε ένα μοντέλο που περιλαμβάνει αρκετές φωτογραφίες από τον καθένα μας και κάθε φορά που ενεργοποιείται η κάμερα συγκρίνουμε την εικόνα που έχουμε με το μοντέλο. Η σύγκριση αυτή μας επιστρέφει τον βαθμό ομοιότητας για κάθε πρόσωπο και επιλέγουμε το όνομα που έχει την μεγαλύτερη ομοιότητα, αρκεί να είναι τουλάχιστον 0,5 (πιο κάτω θεωρούμε ότι το πρόσωπο που έχει καταγράψει η κάμερα είναι εντελώς άγνωστο στο μοντέλο).

Μελλοντικά σχέδια

Κάθε ένας από μας έχει το δικαίωμα να οραματίζεται το μέλλον – μαζί με την Envi, τα όνειρα αυτά έχουν έρθει λίγο πιο κοντά. Κι όμως, πολλά μένουν που μπορούν να βελτιωθούν, να προστεθούν και να δώσουν έδαφος σε νέες ιδέες.

  • Θέλουμε η Envi να εξερευνήσει και πέρα από το concept του περιβάλλοντος και της ατμόσφαιρας στο σπίτι. Από την αρχή, είχαμε φανταστεί κάτι περισσότερα από μία αναβάθμιση του Envirosocial – οι στόχοι μας περιλαμβάνουν ικανότητες ελέγχου συσκευών στο σπίτι, επιλογές ψυχαγωγίας εξατομικευμένες για τον κάθε χρήστη, καλύτερες επικοινωνιακές δυνατότητες της Envi.
  • Η χρησιμότητά της θα είναι σημαντική σε έναν ρόλο “προσωπικού φίλου” που θα μπορεί να κατευνάσει το αίσθημα μοναξιάς της πανδημίας, του σπιτιού και της ρουτίνας.
  • Έχουμε σκοπό να βελτιώσουμε την λειτουργία της Envi με καλύτερες τεχνολογίες, όπως πυρήνα Raspberry Pi, δική της οθόνη και μικρόφωνο, καθώς και εκτεταμένη δυνατότητα κίνησης στο σπίτι.
  • Θέλουμε η Envi και το EnviroSocial να αποτελέσουν μέρη του ίδιου τεχνολογικού οικοσυστήματος με μια κοινή πλατφόρμα που να τα ενώνει και να επιτρέπει τον διαμοιρασμό μετρήσεων και δεδομένων.