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.
354 lines
19 KiB
354 lines
19 KiB
5 years ago
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<meta name="generator" content="Asciidoctor 1.5.4">
|
||
|
<meta name="author" content="Άτομα Ομάδας: Καμαρόπουλος Κωνσταντίνος 46830 - Ζαχαρία Ναταλία 45224 - Βαλαγκούτη Ηρώ-Αθηνά 161082">
|
||
|
<title>Aiolos - IoT Project Documentation</title>
|
||
|
<link rel="stylesheet" href="https://asciidoclive.com/assets/asciidoctor.js/css/asciidoctor.css">
|
||
|
</head>
|
||
|
|
||
|
<body class="article">
|
||
|
<div id="header">
|
||
|
<h1>Aiolos - IoT Project Documentation</h1>
|
||
|
<div class="details">
|
||
|
<span id="author" class="author">Άτομα Ομάδας: Καμαρόπουλος Κωνσταντίνος 46830 - Ζαχαρία Ναταλία 45224 - Βαλαγκούτη Ηρώ-Αθηνά 161082</span><br>
|
||
|
</div>
|
||
|
<div id="toc" class="toc">
|
||
|
<div id="toctitle">Table of Contents</div>
|
||
|
<ul class="sectlevel1">
|
||
|
<li><a href="#__project">Περιγραφή project</a></li>
|
||
|
<li><a href="#__">Υλικό που χρησιμοποιήθηκε κατά την υλοποίησή του</a></li>
|
||
|
<li><a href="#___2">Συνδεσμολογία</a></li>
|
||
|
<li><a href="#___3">Περιγραφή κώδικα</a></li>
|
||
|
<li><a href="#___4">Προβλήματα και αντιμετώπισή τους</a></li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="content">
|
||
|
<div class="sect1">
|
||
|
<h2 id="__project">Περιγραφή project</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="paragraph">
|
||
|
<p>Στο project "Aiolos" βασικός στόχος είναι η λήψη μετρήσεων από την ατμόσφαιρα
|
||
|
με την βοήθεια αισθητήρων αέρα, ώστε να διαπιστωθεί εάν παρουσιάζονται
|
||
|
ορισμένες ουσίες αλλά και να παρατηρηθεί η ποιότητα του αέρα. Οι ασθητήρες
|
||
|
που χρησιμοποιούνται είναι 8 (οκτώ) και μετρούν μεταξύ άλλων, διαρροή
|
||
|
αερίου, συγκέντρωση αλκοόλης, μεθανόλης, υδρογόνου και καπνού. Οι αισθητήρες
|
||
|
βρίσκονται τοποθετημένοι πάνω σε ένα drone, λαμβάνοντας έτσι δεδομένα
|
||
|
κατά την διάρκεια της πτήσης του. Τα δεδομένα στέλνονται σε μία βάση
|
||
|
δεδομένων και είναι προσβάσιμα από ιστοσελίδα, στην οποία φαίνεται η
|
||
|
θέση του drone, οι μετρήσεις, καθώς και διάφορα στατιστικά.<br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στο προγραμματιστικό κομμάτι του project έγιναν χρήση των παρακάτω:<br></p>
|
||
|
</div>
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Drone: Wiring (C/C++ like programming language for Arduino programming)</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Base: Python 3</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>REST API: NodeJS (Σαν framework χρησιμοποιείται NestJS)</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Frontend: HTML/CSS/JS (Angular 8)<br></p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="__">Υλικό που χρησιμοποιήθηκε κατά την υλοποίησή του</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Αισθητήρες:<br></p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ2: Χρησιμοποιούνται για την ανίχνευση διαρροής αερίου, οικιακά αλλά και
|
||
|
βιομηχανικά, είναι κατάλληλοι για ανίχνευση LPG, ισο-βουτάνιου, προπανίου,
|
||
|
μεθανίου, αλκοόλ, υδρογόνου και καπνού.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.cableworks.gr/images/thumbnails/400/350/detailed/255/mq2_sensor.jpg"
|
||
|
alt="MQ2" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ3: Ευαίσθητος στην αλκοόλη και την αιθανόλη.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.waveshare.com/img/devkit/accBoard/MQ-3-Gas-Sensor/MQ-3-Gas-Sensor-2.jpg"
|
||
|
alt="MQ3" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ5: Αισθητήρας ιδανικός για ανίχνευση διαρροών φυσικού αερίου. Ο συγκεκριμένος
|
||
|
αισθήτηρας ανιχνεύει από 300 εως 5000ppm φυσικού αερίου.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.hellasdigital.gr/images/detailed/5/mq5.jpg" alt="MQ5" width="300"
|
||
|
height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ6: Ανιχνεύει συγκεντρώσεις γκαζιού από 200 μέχρι 10000ppm.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://i.ebayimg.com/images/g/nEIAAOSwN8FZrkJ2/s-l300.jpg" alt="MQ6" width="300"
|
||
|
height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ135: Αισθητήρας για βενζίνη, αλκοόλ και καπνό.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.cytron.io/image/catalog/products/SN-MQ135-MOD/SN-MQ135-MOD%20(4).jpg"
|
||
|
alt="MQ135" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ7: Χρησιμοποιείται για ανίχνευση μονοξειδίου του άνθρακα (CO) στον αέρα
|
||
|
καθώς και την συγκέντρωσή του.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://4.imimg.com/data4/HH/UT/MY-11936130/mq-7-gas-sensor-module-500x500.jpg"
|
||
|
alt="MQ7" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ8: Ανιχνεύει υδρογόνο και την συγκέντρωσή του στον αέρα.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://mytechtools.com.pk/wp-content/uploads/2019/05/Hydrogen-Gas-Sensor-Module-MQ-8-B.jpg"
|
||
|
alt="MQ8" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>MQ9: Ανιχνεύει διαρροές γκαζιού τόσο σε επιχειρήσεις όσο και σε οικιακό
|
||
|
περιβάλλον. Κατάλληλο και για ανίχνευση υγροποιημένου αερίου πετρελαίου
|
||
|
(LPG), μονοδειδίου του άνθρακα (CO) και μεθανίου CH4.</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.hellasdigital.gr/images/detailed/5/mq9.jpg" alt="MQ9" width="300"
|
||
|
height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Πλακέτες:<br></p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Arduino Mega</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://solarbotics.com/wp-content/uploads/50452-img_5101-2.jpg" alt="Arduino_Mega"
|
||
|
width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Raspberry Pi</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://b.scdn.gr/images/sku_main_images/019212/19212716/20190627125506_raspberry_pi_4_model_b_4gb.jpeg"
|
||
|
alt="RaspberryPi" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Λοιπά στοιχεία:<br></p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>REYLAX RYLR896: LoRa Transceiver Module</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://www.electorials.com/uploads/1/0/1/7/101767294/editor/screen-shot-2018-05-31-at-8-48-03-pm.png?1532661796"
|
||
|
alt="RYLR896" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>CRIUS NEO-6 GPS</p>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="https://img.dxcdn.com/productimages/sku_266784_2.jpg" alt="GPS" width="300"
|
||
|
height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="___2">Συνδεσμολογία</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div id="img-arduino" class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="arduino.png" alt="Arduino">
|
||
|
</div>
|
||
|
<div class="title">Figure 1: Arduino</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Υπάρχουν 8 αισθητήρες και λειτουργούν με 5 volt ο καθένας. Κάθε αισθητήρας
|
||
|
έχει 4 pins: vcc, gnd, digital και analog. Η σύνδεση γίνεται στο analog
|
||
|
για να μπορούμε να έχουμε τις ακριβείς τιμές από τις μετρήσεις. Το LoRa
|
||
|
λειτουργεί με 3,3 volt και έχει 6 pins. Οι resistors χρησιμοποιούνται
|
||
|
ώστε το LoRa να παίρνει το κατάλληλο ρεύμα.<br> Τα TX και RX είναι ο
|
||
|
τρόπος επικοινωνίας που χρησιμοποιούμε για να επικοινωνήσουμε με το LoRa
|
||
|
και το GPS. Επικοινωνούν σειριακά.</p>
|
||
|
</div>
|
||
|
<div id="img-raspberry" class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="raspberry.png" alt="Raspberry">
|
||
|
</div>
|
||
|
<div class="title">Figure 2: Raspberry</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Εδώ δεν χρειάζoνται resistors καθώς το LoRa παίρνει το απαραίτητο ρεύμα.</p>
|
||
|
</div>
|
||
|
<div id="img-plaketavol2" class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="plaketa.jpg" alt="Plaketa" width="300" height="200">
|
||
|
</div>
|
||
|
<div class="title">Figure 3: Πλακέτα</div>
|
||
|
</div>
|
||
|
<div class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="plaketavol2.jpg" alt="Plaketavol2" width="300" height="200">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Η πλακέτα δημιουργήθηκε επειδή το project χρειαζόταν να γίνει mount σε
|
||
|
drone. Λειτουγρεί σαν shield πάνω στο Arduino mega ώστε να είναι πιο
|
||
|
"μαζεμένο" το κύκλωμα για να μπορέσει να μπει στο 3d printed κουτί που
|
||
|
θα γίνει mount επάνω στο drone.</p>
|
||
|
</div>
|
||
|
<div id="img-kouti" class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="kouti.png" alt="kouti" width="300" height="200">
|
||
|
</div>
|
||
|
<div class="title">Figure 4: 3D printed κουτί</div>
|
||
|
</div>
|
||
|
<div class="videoblock">
|
||
|
<div class="content">
|
||
|
<video src="kouti_video.mp4#t=60,140" width="640" autoplay controls>
|
||
|
Your browser does not support the video tag.
|
||
|
</video>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="___3">Περιγραφή κώδικα</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Drone:<br> Στο κομμάτι αυτό του κώδικα ουσιαστικά γίνεται αχρικοποίηση
|
||
|
των ports του arduino και ετοιμάζεται το string με τις πληροφορίες
|
||
|
που λαμβάνονται από τους sensors και στέλνεται στο LoRa.</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Relay:<br> Το τμήμα αυτό του κώδικα πραγματεύεται την λήψη των δεδομένων
|
||
|
από το arduino και την επεξεργασία τους από το raspberry. Τα δεδομένα
|
||
|
γίνονται σε μορφή JSON και η διαδικασία είναι multithreaded, οπότε
|
||
|
μπορεί να επαναλαμβάνεται για πολλά δεδομένα χωρίς να χρειάζεται
|
||
|
να περιμένει απάντηση.</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Web:<br> Το κομμάτι αυτό αποτελείται από δύο μέρη, backend και frontend.<br> Backend: Στο service υπάρχει μία μέθοδος που παίρνει όλα τα logs
|
||
|
από την βάση δεδομένων (τη μορφή των οποίων έχουμε ορίσει εμείς)
|
||
|
και μία μέθοδος που τα αποθηκεύει στην βάση. Το service αυτό γίνεται
|
||
|
consume από τον controller ο οποίος λειτουργεί με βάση το ανάλογο
|
||
|
decorator.<br> Frontend: Η σελίδα αποτελείται από 3 components. Το
|
||
|
header, τον χάρτη και το γράφημα. Υπάχρει ένα service που τραβάει
|
||
|
δεδομένα από το backend και συναρτήσεις που χρησιμοποιούνται για
|
||
|
την εμφάνιση των δεδομένων, οι οποίες λειτουργούν έτσι ώστε να μην
|
||
|
υπάρχουν διπλότυπα δεδομένα.</p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="___4">Προβλήματα και αντιμετώπισή τους</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="ulist">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<p>Μπαταρία:<br> Κατά τη διάρκεια ανάπτυξης του project τροφοδοτούσαμε
|
||
|
το arduino με ένα powerbrick 5V⎓2A. Αρχικά, πριν την ενωσμάτωση του
|
||
|
LoRa module το οποίο απαιτούσε 3,3V, το κύκλωμα λειτουργούσε κανονικά.
|
||
|
Μετά την προσθήκη του, συνειδητοποιήσαμε πως οι αισθητήρες γονάτιζαν
|
||
|
την τάση τροφοδοσίας (2,8V αντί για 5V), καθώς η τάση εισόδου στον
|
||
|
διαιρέτη τάσης δεν ήταν αρκετή για να δώσει έξοδο 3,3V. Ως αποτέλεσμα
|
||
|
το LoRa module δεν μπορούσε να λειτουργήσει. Παρ'όλα αυτά, στην συνέχεια
|
||
|
αποφασίσαμε να τροφοδοτήσουμε το arduino μέσω του power delivery
|
||
|
συστήματος του drone, το οποίο ήταν ικανό να διατηρήσει την τάση
|
||
|
σταθερή για όλο το κύκλωμα.</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>GPS:<br> Δεν υπήρχαν τα schematics και γενικά πληροφορίες στο internet
|
||
|
για το συγκεκριμένο μοντέλο, οπότε δεν γνωρίζαμε πως να φτιάξουμε
|
||
|
την συνδεσμολογία και πως να το λειτουργήσουμε.</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Sensor pins:<br> Τα sensor pins ήταν γωνιακά, με αποτέλεσμα να μην
|
||
|
υπάρχει δυνατότητα να γίνει χρήση τους στο project. Η αποκόλλησή
|
||
|
τους δεν λειτούργησε, καθώς χάλασαν τα pads. Αγοράστηκαν καινούρια
|
||
|
sensors και κατασκευάστηκε πλακέτα με γωνιακά headers.</p>
|
||
|
</li>
|
||
|
<li>
|
||
|
<p>Hardware Serial library:<br></p>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div id="img-logic_analyser" class="imageblock">
|
||
|
<div class="content">
|
||
|
<img src="logic_analyser.png" alt="logic_analyser">
|
||
|
</div>
|
||
|
<div class="title">Figure 5: Η εικόνα πάρθηκε από logic analyser</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αρχικά η Arduino βιβλιοθήκη για το LoRa που αναπτύξαμε ήταν αυτή που έκανε
|
||
|
initialize (ορισμό baudrate) το σειριακό interface που θα χρησιμοποιούσε.
|
||
|
Κατά την διάρκεια της ανάπτυξής της, οι δοκιμές γινόντουσαν σε ένα ESP-32
|
||
|
και όλα λειτουργούσαν κανονικά. Παρόλα αυτά, όταν έγινε χρήση της στο
|
||
|
Arduino Mega, προέκυψε μια περίεργη συμπεριφορά της HardwareSerial.h
|
||
|
βιβλιοθήκης του Arduino Mega με αποτέλεσμα να ορίζει λάθος baudrate στην
|
||
|
σειριακή όταν αυτό γινόταν μέσα από τρίτη βιβλιοθήκη. Έτσι, το LoRa δεν
|
||
|
μπορούσε να αναγνωρίσει τα AT commands που έστελνε το Arduino και επέστρεφε
|
||
|
μηνύματα λάθους. Η λύση που εφαρμόσαμε ήταν η αρχικοποίηση της σειριακής
|
||
|
εκτός της LoRa βιβλιοθήκης.</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</body>
|
||
|
|
||
|
</html>
|