Περιγραφή project

Στο project "Aiolos" βασικός στόχος είναι η λήψη μετρήσεων από την ατμόσφαιρα με την βοήθεια αισθητήρων αέρα, ώστε να διαπιστωθεί εάν παρουσιάζονται ορισμένες ουσίες αλλά και να παρατηρηθεί η ποιότητα του αέρα. Οι ασθητήρες που χρησιμοποιούνται είναι 8 (οκτώ) και μετρούν μεταξύ άλλων, διαρροή αερίου, συγκέντρωση αλκοόλης, μεθανόλης, υδρογόνου και καπνού. Οι αισθητήρες βρίσκονται τοποθετημένοι πάνω σε ένα drone, λαμβάνοντας έτσι δεδομένα κατά την διάρκεια της πτήσης του. Τα δεδομένα στέλνονται σε μία βάση δεδομένων και είναι προσβάσιμα από ιστοσελίδα, στην οποία φαίνεται η θέση του drone, οι μετρήσεις, καθώς και διάφορα στατιστικά.

Στο προγραμματιστικό κομμάτι του project έγιναν χρήση των παρακάτω:

  • Drone: Wiring (C/C++ like programming language for Arduino programming)

  • Base: Python 3

  • REST API: NodeJS (Σαν framework χρησιμοποιείται NestJS)

  • Frontend: HTML/CSS/JS (Angular 8)

Υλικό που χρησιμοποιήθηκε κατά την υλοποίησή του

  • Αισθητήρες:

MQ2: Χρησιμοποιούνται για την ανίχνευση διαρροής αερίου, οικιακά αλλά και βιομηχανικά, είναι κατάλληλοι για ανίχνευση LPG, ισο-βουτάνιου, προπανίου, μεθανίου, αλκοόλ, υδρογόνου και καπνού.

MQ2

MQ3: Ευαίσθητος στην αλκοόλη και την αιθανόλη.

MQ3

MQ5: Αισθητήρας ιδανικός για ανίχνευση διαρροών φυσικού αερίου. Ο συγκεκριμένος αισθήτηρας ανιχνεύει από 300 εως 5000ppm φυσικού αερίου.

MQ5

MQ6: Ανιχνεύει συγκεντρώσεις γκαζιού από 200 μέχρι 10000ppm.

MQ6

MQ135: Αισθητήρας για βενζίνη, αλκοόλ και καπνό.

MQ135

MQ7: Χρησιμοποιείται για ανίχνευση μονοξειδίου του άνθρακα (CO) στον αέρα καθώς και την συγκέντρωσή του.

MQ7

MQ8: Ανιχνεύει υδρογόνο και την συγκέντρωσή του στον αέρα.

MQ8

MQ9: Ανιχνεύει διαρροές γκαζιού τόσο σε επιχειρήσεις όσο και σε οικιακό περιβάλλον. Κατάλληλο και για ανίχνευση υγροποιημένου αερίου πετρελαίου (LPG), μονοδειδίου του άνθρακα (CO) και μεθανίου CH4.

MQ9
  • Πλακέτες:

Arduino Mega

Arduino_Mega

Raspberry Pi

RaspberryPi
  • Λοιπά στοιχεία:

REYLAX RYLR896: LoRa Transceiver Module

RYLR896

CRIUS NEO-6 GPS

GPS

Συνδεσμολογία

Arduino
Figure 1: Arduino

Υπάρχουν 8 αισθητήρες και λειτουργούν με 5 volt ο καθένας. Κάθε αισθητήρας έχει 4 pins: vcc, gnd, digital και analog. Η σύνδεση γίνεται στο analog για να μπορούμε να έχουμε τις ακριβείς τιμές από τις μετρήσεις. Το LoRa λειτουργεί με 3,3 volt και έχει 6 pins. Οι resistors χρησιμοποιούνται ώστε το LoRa να παίρνει το κατάλληλο ρεύμα.
Τα TX και RX είναι ο τρόπος επικοινωνίας που χρησιμοποιούμε για να επικοινωνήσουμε με το LoRa και το GPS. Επικοινωνούν σειριακά.

Raspberry
Figure 2: Raspberry

Εδώ δεν χρειάζoνται resistors καθώς το LoRa παίρνει το απαραίτητο ρεύμα.

Plaketa
Figure 3: Πλακέτα
Plaketavol2

Η πλακέτα δημιουργήθηκε επειδή το project χρειαζόταν να γίνει mount σε drone. Λειτουγρεί σαν shield πάνω στο Arduino mega ώστε να είναι πιο "μαζεμένο" το κύκλωμα για να μπορέσει να μπει στο 3d printed κουτί που θα γίνει mount επάνω στο drone.

kouti
Figure 4: 3D printed κουτί

Περιγραφή κώδικα

  • Drone:
    Στο κομμάτι αυτό του κώδικα ουσιαστικά γίνεται αχρικοποίηση των ports του arduino και ετοιμάζεται το string με τις πληροφορίες που λαμβάνονται από τους sensors και στέλνεται στο LoRa.

  • Relay:
    Το τμήμα αυτό του κώδικα πραγματεύεται την λήψη των δεδομένων από το arduino και την επεξεργασία τους από το raspberry. Τα δεδομένα γίνονται σε μορφή JSON και η διαδικασία είναι multithreaded, οπότε μπορεί να επαναλαμβάνεται για πολλά δεδομένα χωρίς να χρειάζεται να περιμένει απάντηση.

  • Web:
    Το κομμάτι αυτό αποτελείται από δύο μέρη, backend και frontend.
    Backend: Στο service υπάρχει μία μέθοδος που παίρνει όλα τα logs από την βάση δεδομένων (τη μορφή των οποίων έχουμε ορίσει εμείς) και μία μέθοδος που τα αποθηκεύει στην βάση. Το service αυτό γίνεται consume από τον controller ο οποίος λειτουργεί με βάση το ανάλογο decorator.
    Frontend: Η σελίδα αποτελείται από 3 components. Το header, τον χάρτη και το γράφημα. Υπάχρει ένα service που τραβάει δεδομένα από το backend και συναρτήσεις που χρησιμοποιούνται για την εμφάνιση των δεδομένων, οι οποίες λειτουργούν έτσι ώστε να μην υπάρχουν διπλότυπα δεδομένα.

Προβλήματα και αντιμετώπισή τους

  • Μπαταρία:
    Κατά τη διάρκεια ανάπτυξης του project τροφοδοτούσαμε το arduino με ένα powerbrick 5V⎓2A. Αρχικά, πριν την ενωσμάτωση του LoRa module το οποίο απαιτούσε 3,3V, το κύκλωμα λειτουργούσε κανονικά. Μετά την προσθήκη του, συνειδητοποιήσαμε πως οι αισθητήρες γονάτιζαν την τάση τροφοδοσίας (2,8V αντί για 5V), καθώς η τάση εισόδου στον διαιρέτη τάσης δεν ήταν αρκετή για να δώσει έξοδο 3,3V. Ως αποτέλεσμα το LoRa module δεν μπορούσε να λειτουργήσει. Παρ'όλα αυτά, στην συνέχεια αποφασίσαμε να τροφοδοτήσουμε το arduino μέσω του power delivery συστήματος του drone, το οποίο ήταν ικανό να διατηρήσει την τάση σταθερή για όλο το κύκλωμα.

  • GPS:
    Δεν υπήρχαν τα schematics και γενικά πληροφορίες στο internet για το συγκεκριμένο μοντέλο, οπότε δεν γνωρίζαμε πως να φτιάξουμε την συνδεσμολογία και πως να το λειτουργήσουμε.

  • Sensor pins:
    Τα sensor pins ήταν γωνιακά, με αποτέλεσμα να μην υπάρχει δυνατότητα να γίνει χρήση τους στο project. Η αποκόλλησή τους δεν λειτούργησε, καθώς χάλασαν τα pads. Αγοράστηκαν καινούρια sensors και κατασκευάστηκε πλακέτα με γωνιακά headers.

  • Hardware Serial library:

logic_analyser
Figure 5: Η εικόνα πάρθηκε από logic analyser

Αρχικά η Arduino βιβλιοθήκη για το LoRa που αναπτύξαμε ήταν αυτή που έκανε initialize (ορισμό baudrate) το σειριακό interface που θα χρησιμοποιούσε. Κατά την διάρκεια της ανάπτυξής της, οι δοκιμές γινόντουσαν σε ένα ESP-32 και όλα λειτουργούσαν κανονικά. Παρόλα αυτά, όταν έγινε χρήση της στο Arduino Mega, προέκυψε μια περίεργη συμπεριφορά της HardwareSerial.h βιβλιοθήκης του Arduino Mega με αποτέλεσμα να ορίζει λάθος baudrate στην σειριακή όταν αυτό γινόταν μέσα από τρίτη βιβλιοθήκη. Έτσι, το LoRa δεν μπορούσε να αναγνωρίσει τα AT commands που έστελνε το Arduino και επέστρεφε μηνύματα λάθους. Η λύση που εφαρμόσαμε ήταν η αρχικοποίηση της σειριακής εκτός της LoRa βιβλιοθήκης.