Αυτοματισμός και τηλεμετρία συσκευών με χρήση Raspberry Pi

Για αρκετά μεγάλο διάστημα είχα στα χέρια μου ένα Raspberry Pi 3 χωρίς να μπορέσω να διαθέσω τον απαραίτητο χρόνο για να εξοικιωθώ με τη συσκευή. Υπό φυσιολογικές συνθήκες δεν προλαβαίνω να διαθέσω περισσότερο από λίγες ώρες στην έρευνα και ανάπτυξη σε νέα περιβάλλοντα. Στα τέλη Ιουνίου 2020 προέκυψαν τρία ελεύθερα πρωινά που μπόρεσα να αφιερώσω στη συσκευή αυτή.

Έτσι σύντομα διαπίστωσα, ότι θα μπορούσα να μετατρέψω τον Raspberry Pi σε PLC αλλά έπρεπε να μάθω τουλάχιστον Python. Η σχέση μου με το Linux είναι ουδέτερη και το περιβάλλον σχετικά άγνωστο και χαοτικό, χωρίς πολλές φορές να βγάζει νόημα, όμως την ίδια μέρα έγραψα αρκετές γραμμές κώδικα μια και κάποιος που έχει γράψει σε διάφορες γλώσσες προγραμματισμού, εύκολα μπορεί να προσαρμοστεί στην Python (αφού αγνοησα το Linux γύρω μου).

Πρώτες προσπάθειες με τη γλώσσα Python σε Raspberry Pi

Η δεύτερη διαπίστωση ήταν οτι έχω μια λευκή κόλα και πρέπει εγώ να ζωγραφίσω τις γραμμές. Έτσι θεώρησα οτι για τα περισσότερα σενάρια που είχα στο μυαλό μου 10 ψηφιακές είσοδοι και 5 ψηφιακές έξοδοι ήταν αρκετές. Θα ήθελα και κάτι σε αναλογική είσοδο (τουλάχιστον 2) αλλά αυτό είναι το δεύτερο βήμα.

Η τρίτη διαπίστωση είναι οτι δεν θα μπορούσα να δουλέψω σε ένα νήμα ούτε να χρησιμοποιήσω την εντολή sleep (βρεφική αντιμετώπιση της χρονοκαθυστέρησης) μια και κάποια πράγματα πρέπει να τρέχουν ταυτόχρονα και με την εντολή sleep χάνεις ότι συμβαίνει κατά τη διάρκεια του sleep. Άρα η βασική ρουτίνα ενός αυτοματισμού πρέπει να κάνει κύκλους διαβάζοντας τις εισόδους, εκτελώντας το πρόγραμμα, γράφοντας τις εξόδους, τηρώντας χρονοκαθυστερήσεις ΧΩΡΙΣ sleep!!! Πρακτικά η χρονοκαθυστέρηση μπορεί να συμβεί μετρώντας διαφορές τρέχοντος χρόνου σε κάθε κύκλο σε σχέση με το χρόνο ενεργοποίησης ενός συμβάντος. Όταν η διαφορά χρόνου ξεπεράσει την τιμή στόχο, τότε προκύπτει μια αληθής τιμή που επιτρέπει την εκτέλλεση των συμβάντων μετά την πάροδο της χρονοκαθυστέρησης...

Πρώτες προσπάθειες με τη γλώσσα Python σε Raspberry Pi

Η τεταρτη διαπίστωση είναι οτι οι είσοδοι είναι δαιμονισμένα ταχύτατες και ανταποκρίνονται ακαριαία σε μεταβατικά φαινόμενα! Κατά το ξεκούμπωμα ενός διακόπτη υπάρχει χρόνος μερικών μS που η είσοδος αλλάζει καμιά δεκαριά φορές μέχρι να αποκολληθεί εντελώς η επαφή του διακόπτη ή να ξεφορτίσει η είσοδος (ποιός ξέρει). Άρα το διάβασμα μια ψηφιακής εισόδου δεν μπορεί να είναι αφιλτράριστο γιατί κατά τη διάρκεια του κύκλου μπορεί να αλλάξει αρκετές φορές μέχρι να καταλλήξει στην τελική κατάσταση. Από αυτο προέκυψε η απαίτηση για εφαρμογή χρονοκαθυστέρησης στο διάβασμα μιας εισόδου μέχρι να διαμορφωθεί η τελική κατάσταση (μια και σκοπός μου δεν είναι να μετρήσω συχνότητα).

Web Based περιβάλλον διαχείρισης αυτοματισμού

Μια άλλη χαρούμενη νότα στο όλο σύστημα είναι η ευκολία που προσφέρει η Python και οι βιβλιοθήκες της να πραγματοποιήσει κάποιος Web Requests και να σηκώσει αρκετά εύκολα Web Server. Αυτό σίγουρα θα με βοηθούσε να αναπτύξω ένα Web based εύχρηστο περιβάλλον ελέγχου και να προχωρήσω σε ενσωμάτωση του συστήματος στο SCADA WWLess. Επιπλέον μπόρεσα να δώσω μια όψη PLC στα Ι/Οs με application interface που απεικονίζεται μέσω του HDMI.

Περιβάλλον χρήστη στο HDMI του Raspberry Pi

Δοκιμή εκπόνησης συστήματος SCADA για το Raspberry Pi

Τελικά φτίαχνοντας όλα τα προαπαιτούμενα δοκίμασα αυτό που γνωρίζω πολυ καλά: Προχώρησα στην ανάπτυξη ενός συστηματος αυτομάτου ελέγχου για τον έλεγχο μονάδων αφαλάτωσης. Το σύστημα φαίνεται σταθερό και καλύπτει όλες τις σχεδιαστικές απαιτήσεις. Δεδομένου του χαμηλού κόστους του Raspberry Pi Zero W και των δυνατοτήτων του υλικού και του λογισμικού αυτό θα μπορούσε να οδηγήσει στην κατασκευή έξυπνων συσκευών με αυξημένες ικανότητες αυτοματισμού και τηλεμετρίας.