commit cc61d91e2847c6f4b94734c7540014493ede8d41 Author: Konstantinos Kamaropoulos Date: Tue Mar 3 15:28:34 2020 +0200 feat:Add documentation diff --git a/Aiolos_Documentation.html b/Aiolos_Documentation.html new file mode 100644 index 0000000..d059d3d --- /dev/null +++ b/Aiolos_Documentation.html @@ -0,0 +1,354 @@ + + + + + + + + + + Aiolos - IoT Project Documentation + + + + + +
+
+

Περιγραφή 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 βιβλιοθήκης.

+
+
+
+
+ + + \ No newline at end of file diff --git a/Aiolos_Documentation.txt b/Aiolos_Documentation.txt new file mode 100644 index 0000000..ffbb14d --- /dev/null +++ b/Aiolos_Documentation.txt @@ -0,0 +1,131 @@ += 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 βιβλιοθήκης. + + diff --git a/arduino.png b/arduino.png new file mode 100644 index 0000000..6364dc7 Binary files /dev/null and b/arduino.png differ diff --git a/kouti.png b/kouti.png new file mode 100644 index 0000000..91adfaa Binary files /dev/null and b/kouti.png differ diff --git a/kouti_video.mp4 b/kouti_video.mp4 new file mode 100644 index 0000000..9a6eb63 Binary files /dev/null and b/kouti_video.mp4 differ diff --git a/logic_analyser.png b/logic_analyser.png new file mode 100644 index 0000000..4b7fc92 Binary files /dev/null and b/logic_analyser.png differ diff --git a/plaketa.jpg b/plaketa.jpg new file mode 100644 index 0000000..7218627 Binary files /dev/null and b/plaketa.jpg differ diff --git a/plaketavol2.jpg b/plaketavol2.jpg new file mode 100644 index 0000000..65df077 Binary files /dev/null and b/plaketavol2.jpg differ diff --git a/raspberry.png b/raspberry.png new file mode 100644 index 0000000..0bef2b1 Binary files /dev/null and b/raspberry.png differ