You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
11 KiB

= Aiolos - IoT Project Documentation
Άτομα Ομάδας: Καμαρόπουλος Κωνσταντίνος 46830 - Ζαχαρία Ναταλία 45224 - Βαλαγκούτη Ηρώ-Αθηνά 161082
:toc:
== Περιγραφή 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, ισο-βουτάνιου, προπανίου, μεθανίου, αλκοόλ, υδρογόνου και καπνού.
image::https://www.cableworks.gr/images/thumbnails/400/350/detailed/255/mq2_sensor.jpg[MQ2,300,200]
MQ3: Ευαίσθητος στην αλκοόλη και την αιθανόλη.
image::https://www.waveshare.com/img/devkit/accBoard/MQ-3-Gas-Sensor/MQ-3-Gas-Sensor-2.jpg[MQ3,300,200]
MQ5: Αισθητήρας ιδανικός για ανίχνευση διαρροών φυσικού αερίου. Ο συγκεκριμένος αισθήτηρας ανιχνεύει από 300 εως 5000ppm φυσικού αερίου.
image::https://www.hellasdigital.gr/images/detailed/5/mq5.jpg[MQ5,300,200]
MQ6: Ανιχνεύει συγκεντρώσεις γκαζιού από 200 μέχρι 10000ppm.
image::https://i.ebayimg.com/images/g/nEIAAOSwN8FZrkJ2/s-l300.jpg[MQ6,300,200]
MQ135: Αισθητήρας για βενζίνη, αλκοόλ και καπνό.
image::https://www.cytron.io/image/catalog/products/SN-MQ135-MOD/SN-MQ135-MOD%20(4).jpg[MQ135,300,200]
MQ7: Χρησιμοποιείται για ανίχνευση μονοξειδίου του άνθρακα (CO) στον αέρα καθώς και την συγκέντρωσή του.
image::https://4.imimg.com/data4/HH/UT/MY-11936130/mq-7-gas-sensor-module-500x500.jpg[MQ7,300,200]
MQ8: Ανιχνεύει υδρογόνο και την συγκέντρωσή του στον αέρα.
image::https://mytechtools.com.pk/wp-content/uploads/2019/05/Hydrogen-Gas-Sensor-Module-MQ-8-B.jpg[MQ8,300,200]
MQ9: Ανιχνεύει διαρροές γκαζιού τόσο σε επιχειρήσεις όσο και σε οικιακό περιβάλλον. Κατάλληλο και για ανίχνευση υγροποιημένου αερίου πετρελαίου (LPG), μονοδειδίου του άνθρακα (CO) και μεθανίου CH4.
image::https://www.hellasdigital.gr/images/detailed/5/mq9.jpg[MQ9,300,200]
* Πλακέτες: +
Arduino Mega
image::https://solarbotics.com/wp-content/uploads/50452-img_5101-2.jpg[Arduino_Mega,300,200]
Raspberry Pi
image::https://b.scdn.gr/images/sku_main_images/019212/19212716/20190627125506_raspberry_pi_4_model_b_4gb.jpeg[RaspberryPi,300,200]
* Λοιπά στοιχεία: +
REYLAX RYLR896: LoRa Transceiver Module
image::https://www.electorials.com/uploads/1/0/1/7/101767294/editor/screen-shot-2018-05-31-at-8-48-03-pm.png?1532661796[RYLR896,300,200]
CRIUS NEO-6 GPS
image::https://img.dxcdn.com/productimages/sku_266784_2.jpg[GPS,300,200]
== Συνδεσμολογία
.Arduino
[#img-arduino]
[caption="Figure 1: "]
image::arduino.png[Arduino]
Υπάρχουν 8 αισθητήρες και λειτουργούν με 5 volt ο καθένας. Κάθε αισθητήρας έχει 4 pins: vcc, gnd, digital και analog. Η σύνδεση γίνεται στο analog για να μπορούμε να έχουμε τις ακριβείς τιμές από τις μετρήσεις. Το LoRa λειτουργεί με 3,3 volt και έχει 6 pins. Οι resistors χρησιμοποιούνται ώστε το LoRa να παίρνει το κατάλληλο ρεύμα. +
Τα TX και RX είναι ο τρόπος επικοινωνίας που χρησιμοποιούμε για να επικοινωνήσουμε με το LoRa και το GPS. Επικοινωνούν σειριακά.
.Raspberry
[#img-raspberry]
[caption="Figure 2: "]
image::raspberry.png[Raspberry]
Εδώ δεν χρειάζoνται resistors καθώς το LoRa παίρνει το απαραίτητο ρεύμα.
.Πλακέτα
[#img-plaketa]
[#img-plaketavol2]
[caption="Figure 3: "]
image::plaketa.jpg[Plaketa,300,200]
image::plaketavol2.jpg[Plaketavol2,300,200]
Η πλακέτα δημιουργήθηκε επειδή το project χρειαζόταν να γίνει mount σε drone. Λειτουγρεί σαν shield πάνω στο Arduino mega ώστε να είναι πιο "μαζεμένο" το κύκλωμα για να μπορέσει να μπει στο 3d printed κουτί που θα γίνει mount επάνω στο drone.
.3D printed κουτί
[#img-kouti]
[caption="Figure 4: "]
image::kouti.png[kouti,300,200]
video::kouti_video.mp4[width=640, start=60, end=140, options=autoplay]
== Περιγραφή κώδικα
* 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
[#img-logic_analyser]
[caption="Figure 5: "]
image::logic_analyser.png[logic_analyser]
Αρχικά η Arduino βιβλιοθήκη για το LoRa που αναπτύξαμε ήταν αυτή που έκανε initialize (ορισμό baudrate) το σειριακό interface που θα χρησιμοποιούσε. Κατά την διάρκεια της ανάπτυξής της, οι δοκιμές γινόντουσαν σε ένα ESP-32 και όλα λειτουργούσαν κανονικά. Παρόλα αυτά, όταν έγινε χρήση της στο Arduino Mega, προέκυψε μια περίεργη συμπεριφορά της HardwareSerial.h βιβλιοθήκης του Arduino Mega με αποτέλεσμα να ορίζει λάθος baudrate στην σειριακή όταν αυτό γινόταν μέσα από τρίτη βιβλιοθήκη. Έτσι, το LoRa δεν μπορούσε να αναγνωρίσει τα AT commands που έστελνε το Arduino και επέστρεφε μηνύματα λάθους. Η λύση που εφαρμόσαμε ήταν η αρχικοποίηση της σειριακής εκτός της LoRa βιβλιοθήκης.