-
Posts
6.819 -
Εγγραφή
-
Τελευταία Επίσκεψη
-
Ημέρες που κέρδισε
33
Content Type
Forums
Ειδήσεις
Reviews
Αγγελίες
Blogs
Gallery
Everything posted by Jaco
-
DIY project 1: PC remote control
Jaco απάντησε στο θέμα του Jaco topic στην ενότητα Από το Εργαστήρι
@eyuri, σ'ευχαριστώ πολύ, θα το λάβω υπόψη μου αυτό που λες, αν υπάρχει ένας απλός και οικονομικός τρόπος. -
Πως χαλάνε φορτιστές και καλώδια;
Jaco απάντησε στο θέμα του tragikos topic στην ενότητα Smartphones
Αν και τα καλύψατε όλα, το μόνο που μπορώ να σκεφτώ είναι πως τα νέα smartphones ρυθμίζουν το ρεύμα το με το οποίο φορτίζουν την μπαταρία τους, βάση μια αντίστασης στα D+/D- του USB. Ανάλογα λοιπόν τον κατασκευαστή η αντίσταση αυτή είναι διαφορετική ακόμα και ανά μοντέλο. Επομένως η διαφορά των 120Ω και 150Ω πχ μπορεί να κάνει την διαφορά και το κινητό να μην μπαίνει στην ταχεία φόρτιση οπότε να μην τραβάει ρεύμα. Ο λόγος για τον οποίο μπορεί να άλλαξε η αντίσταση αυτή μπορεί να είναι το καλώδιο, ίσως κάποιο τσάκισμα μια κακή επαφή, οτιδήποτε. Ο μόνος τρόπος είναι να το μετρήσεις με ένα πολύμετρο να δεις τι αντίσταση παρουσιάζει. Όσων αφορά τον φορτιστή, μπορεί να χαλάσει για οποιοδήποτε λόγο και εξαρτάται και από τον σχεδιασμό. Ένα ελλατωματικό πηνείο ή κάποιο άλλο υλικό, καμιά αυξομείωση της τάσης κτλ, δεν μπορείς να ξέρεις, είναι άπειροι οι λόγοι. Πάντως το να μην αφήνεις τον φορτιστή στην πρίζα όταν δεν φορτίζει το κινητό, απλά σου μειώνει τις πιθανότητες να χαλάσει για κάποιο λόγο που αφορά το πως επηρεάζεται από τους παράγοντες των προβλημάτων της τάσης του δικτύου. Δεν είναι όμως το ότι χαλάει επειδή μένει χωρίς λόγο στο ρεύμα και φθείρεται. Αυτό ίσχυει για τα παλιά τροφοδοτικά που είχαν μετ/στή, λόγο θερμότητας. -
DIY project 3: WiFi 3-Φασικός Μετρητής Ενέργειας.
Jaco απάντησε στο θέμα του Jaco topic στην ενότητα Από το Εργαστήρι
Σ ευχαριστω Στελιο! Λοιπον, με ωθεις στο να μπω σε καποιες λεπτομερειες του κωδικα. Ουσιαστικα η δειγματοληψια της τασης ειναι αργη και δεν μπορει να χρησιμοποιηθεί για real-time παρακολουθηση της τασης. Ο λογος ειναι οτι αναλώνεται ο επεξεργαστης στο να μετρα το ρευμα στις 3 φασεις, πραγμα το οποιο συμβαινει περιπου 53 φορες το δευτερολεπτο, ωστε να εχει ακριβεια στην μετρηση αυτη. Οι μετρησεις στους ADC ειναι διαδοχικες. Επομένως η ταση μετριεται καθε 3-4 περιπου δευτερολεπτα και ο κωδικας την θεωρει σταθερη για την υπολοιπη διαρκεια που μετρα το ρευμα και βαση αυτης υπολογιζει την ισχυ. Αρα δεν υπαρχει περιπτωση να πιασει spikes της τασης ή βυθισματα. Παντως θα μπορουσε να γινει σιγουρα ενα ξεχωριστο project που θα ηταν dedicated σε αυτο. Παντως μου εβαλες ιδεες, αυτο ειναι σιγουρο! -
DIY project 3: WiFi 3-Φασικός Μετρητής Ενέργειας.
Jaco απάντησε στο θέμα του Jaco topic στην ενότητα Από το Εργαστήρι
Σ' ευχαριστώ Γιάγκο! Λοιπόν θα μπορούσε να γίνει αυτό που λες και με την υπάρχουσα κατασκευή, αρκεί να τροφοδοτείται από κάποια μπαταρία. Η ανίχνευση της απώλειας της τάσης μπορεί να γίνει από τις μετρήσεις, και νομίζω πως πρέπει να περισσεύουν 2 pins από το arduino που αρκούν για ένα software serial port, το οποίο χρειάζεται για ένα RS232 gsm modem. Επίσης χρειάζεται και ο κώδικας που θα κάνει την δουλειά και ο χρόνος που χρειάζεται κάποιος για να το κάνει Πάντως όσον αφορά την κατανάλωση, πάντα ξέρεις πάνω-κάτω ποιες είναι αυτές που τραβάνε περισσότερο ρεύμα. Απλά ορισμένες φορές μπορεί να είναι και κάποιες που δεν υπολογίζεις ότι καταναλώνουν και κυρίως μακροπρόθεσμα. Έχοντας ένας ιστορικό και μπορώντας να δεις την κατανάλωσή σου, οποιαδήποτε στιγμή μπορείς να βγάλεις αρκετά συμπεράσματα, ανάλογα με την ώρα της ημέρας, την εποχή κλπ. Είναι ενδιαφέρον παιχνίδι, από το οποίο μπορείς να κάνεις και οικονομία. -
Πρόλογος Ήρθε λοιπόν η ώρα για το τρίτο DIY project. Δεν πέρασε πολύς καιρός από τα προηγούμενα δυο projects, που το πρώτο ήταν η κατασκευή ενός IR receiver για τον έλεγχο ενός υπολογιστή και το δεύτερο η κατασκευή ενός Ethernet DMX controller με υποστήριξη για Art-Net. Αυτή τη φορά θα κατασκευάσουμε ένα δικτυακό wi-fi 3-φασικό ενεργειακό μετρητή για οικιακή χρήση, με τον οποίο θα μπορεί κάποιος να μετρά τη συνολική οικιακή κατανάλωση ενέργειας, να βλέπει την ιστορικότητα και έτσι, θα μπορεί να ρυθμίσει καλύτερα τις καταναλώσεις του. Η δυσκολία αυτού του project είναι μεγαλύτερη από τα προηγούμενα και γίνεται ακόμα μεγαλύτερη αν θελήσει κάποιος να εγκαταστήσει τις εφαρμογές που έχω φτιάξει - στις οποίες θα αναφερθούμε στην πορεία - σε πλατφόρμες που δεν υποστηρίζονται από τα αρχεία που θα σας δώσω. Το καλό όμως από την άλλη είναι ότι αν κάποιος θέλει, με λίγο παραπάνω κόπο, μπορεί αν το κάνει σχεδόν σε οποιαδήποτε πλατφόρμα και λειτουργικό. Η μέτρηση της κατανάλωσης είναι πολύ σημαντική για μια κατοικία, ένα γραφείο ή ένα μαγαζί (για ευκολία θα αναφέρομαι σε όλα αυτά ως οικιακά), γιατί με τον τρόπο αυτό είναι δυνατή η εύρεση των φορτίων που καταναλώνουν περισσότερο, την χρονική στιγμή που το κάνουν, όπως επίσης και την ποσότητα και την ποιότητα των σύνθετων μη γραμμικών φορτίων. Έτσι είναι δυνατή η εξοικονόμηση ενέργειας, που συνεπάγεται και μείωση του λογαριασμού της ΔΕΗ. Φυσικά υπάρχουν φορτία (συσκευές δηλαδή) τα οποία δεν μπορούμε να απενεργοποιήσουμε καθόλου, αλλά υπάρχουν και φορτία τα οποία ενώ καταναλώνουν αρκετά θα μπορούσαμε να τα απενεργοποιούμε σε διάφορες χρονικές στιγμές μέσα στην ημέρα. Γενικά με την μέτρηση της κατανάλωσης, είτε στιγμιαία είτε κατά την διάρκεια της ημέρας, μπορούμε να μοντελοποιήσουμε το ενεργειακό προφίλ ανά ώρα, ημέρα, εποχή κλπ και ταυτόχρονα να μειώσουμε την κατανάλωση μειώνοντας κάποια φορτία. Το project αυτό, εμπλέκει αρκετά πράγματα μαζί, όπως τα ηλεκτρονικά, τα ηλεκτρολογικά, ο προγραμματισμός και τη γνώση κάποιων λειτουργικών συστημάτων (ανάλογα με το ποιο θα επιλέξετε να χρησιμοποιήσετε στην πορεία). Όσον αφορά τα ηλεκτρολογικά χρειάζεται απόλυτη προσοχή, γιατί η τάση του δικτύου μπορεί να σκοτώσει και στο project αυτό ίσως χρειαστεί να έρθετε σε "επαφή" με καλώδια που έχουν επικίνδυνη τάση. Επομένως, ΠΡΟΣΟΧΗ στην τάση του δικτύου και μην προχωρήσετε σε κανένα βήμα αν δεν γνωρίζεται ακριβώς τι κάνετε και πως θα το κάνετε. Αν δεν γνωρίζετε ή νιώθετε ανασφάλεια μην το επιχειρήσετε! Περί AC Πριν προχωρήσουμε στα ενδότερα του project, θα πρέπει να δούμε κάποια θεωρητικά θέματα όσον αφορά στα ηλεκτρολογικά, ώστε να γίνει κατανοητό τι χρειάζεται να κάνουμε, ποια είναι τα προβλήματα και πως αντιμετωπίζονται. Θα προσπαθήσω ωστόσο να κρατήσω την θεωρία σε απλά επίπεδα, καθώς δεν είναι απολύτως απαραίτητη για την υλοποίηση του project. Παρ' όλ' αυτά για να κατανοήσετε το πως ακριβώς λειτουργεί ο κώδικας, θα την χρειαστείτε σίγουρα. Η ονομαστική χαμηλή εναλλασσόμενη τάση AC του δικτύου της ΔΕΗ που έχουμε στα σπίτια μας είναι 230V/50Hz για την μονοφασική και 400V/50Hz για την τριφασική, με διακύμανση +/-10%. Τα 230V είναι η τάση που φτάνει στις πρίζες μας στην ηλεκτρολογική εγκατάσταση και τα 50Hz είναι ο ρυθμός με τον οποίο εναλλάσσεται η τάση γύρω από τα 0V. Αυτό φαίνεται και στην παρακάτω εικόνα. H τάση αυτή παρότι λέγεται χαμηλή, ως γνωστόν μπορεί να σκοτώσει, γι' αυτό και θέλει και προσοχή οποιοσδήποτε χειρισμός που έχει να κάνει με αυτήν. Αν μετρήσει κάποιος με ένα πολύμετρο σε μια πρίζα, το πιο πιθανό είναι ότι θα δει πως η τάση δεν θα είναι ακριβώς 230V, αλλά λίγο παραπάνω ή λίγο παρακάτω. Αυτό είναι η διακύμανση. Η τάση από μόνη της, δεν σημαίνει κατανάλωση. Για να υπάρχει κατανάλωση ισχύος χρειάζεται ένα φορτίο (μια συσκευή ουσιαστικά), το οποίο θα τραβήξει ρεύμα από το δίκτυο της τάσης. Αρχικά θα υποθέσουμε ότι έχουμε ένα απλό ωμικό φορτίο, όπως μια λάμπα πυρακτώσεως. Το απλό ωμικό φορτίο είναι αυτό το οποίο δεν περιέχει καμία χωρητικότητα ή επαγωγή, δηλαδή δεν είναι σύνθετο φορτίο. Το αντίστοιχο κύκλωμα είναι το παρακάτω: Κύκλωμα με ωμικό φορτίο Η τάση και το ρεύμα φαίνονται στην παρακάτω εικόνα Ρεύμα/Τάση Η κατανάλωση είναι αυτή που φαίνεται παρακάτω Ισχύς Στις εικόνες αυτές παρατηρούμε ότι το ρεύμα με την τάση είναι συμφασικά (δηλαδή μεταβάλλονται με τον ίδιο τρόπο, περνώντας ταυτόχρονα από τον άξονα των 0V) και ότι η κατανάλωση της ισχύος είναι πάντα θετική ακόμα και όταν το ρεύμα με την τάση είναι αρνητικά. Αυτό συμβαίνει γιατί η ισχύς, είναι το γινόμενο της τάσης επί το ρεύμα, οπότε- στην περίπτωση που εξετάζουμε - αποκτούν ταυτόχρονα και τα δυο αρνητικό πρόσημο, με αποτέλεσμα η ισχύς να παραμένει θετική. Εκτός από τα ωμικά φορτία υπάρχουν και τα σύνθετα φορτία τα οποία εκτός από ωμική παρουσιάζουν και πυκνωτική ή επαγωγική συμπεριφορά. Τέτοια φορτία είναι συνήθως τα ψυγεία, οποιοσδήποτε AC κινητήρας (πχ σεσουάρ, κλιματιστικά, απορροφητήρες) και διάφορες άλλες οικιακές συσκευές. Επομένως το αντίστοιχο κύκλωμα είναι το παρακάτω. Κύκλωμα με ωμικό και επαγωγικό φορτίο Όσον αφορά το ρεύμα, την τάση και την ισχύ στην περίπτωση των σύνθετων φορτίων παρατηρείται το παρακάτω φαινόμενο. Ρεύμα, τάση και ισχύς Στην εικόνα βλέπουμε πως το ρεύμα δεν είναι συμφασικό με την τάση και ότι έχουμε χρονικές περιόδους όπου η ισχύς είναι αρνητική. Αρνητική ισχύς σημαίνει ότι το φορτίο καταναλώνει μέρος της ενέργειας που τραβάει από το δίκτυο, αλλά επιστρέφει κάποιο μέρος της πίσω σε αυτό. Με άλλα λόγια, ένα μέρος από την συνολική ισχύ που απορροφά το φορτίο μας από το δίκτυο, δεν καταναλώνεται από το φορτίο, αλλά επιστρέφει στο δίκτυο. Η συνολική αυτή ισχύς ονομάζεται φαινόμενη ισχύς και είναι το άθροισμα της πραγματικής ισχύος (ενεργός) που καταναλώνει η συσκευή παράγοντας έργο και της ισχύος που δεν παράγει έργο (άεργος), η οποία επιστρέφει από τη συσκευή στο δίκτυο. Η φαινόμενη ισχύς μετριέται σε kVA (κιλοβολταμπέρ), η ενεργός σε kW (κιλοβάτ) και η άεργος σε kVAr (κιλοβολταμπέρ ρεακτίφ). Η ισχύς την οποία μετρά και χρεώνει το ρολόι της ΔΕΗ είναι η ενεργός, γι'αυτό και η ένδειξη στο ρολόι εκφράζεται σε kWh (κιλοβατώρες). Συνεπώς kWh είναι η ενέργεια που καταναλώνεται σε μια ώρα υπό σταθερή ισχύ 1 kW, με άλλα λόγια αν έχετε ένα φούρνο ο οποίος έχει ονομαστική κατανάλωση 1000W και τον αφήσετε μια ώρα ανοιχτό θα καταναλώσει 1 kWh. Αντίστοιχα αν έχετε μια λάμπα οικονομίας 10W τότε σε 100 ώρες (ή σε 4 μέρες και 4 ώρες), θα καταναλώσει 1 kWh (10W x 100h = 1kWh). Εκτός από τις 2 παραπάνω περιπτώσεις φορτίων όμως, υπάρχουν και τα σύνθετα μη γραμμικά φορτία. Μη γραμμικά φορτία είναι αυτά που το ρεύμα το οποίο τραβάνε από το δίκτυο, δεν έχει την μορφή του συνημιτόνου, αλλά μπορεί είναι απότομες αιχμές και μεταπτώσεις, οι οποίες με την σειρά τους δημιουργούν πολλές αρμονικές επάνω στο δίκτυο. Τέτοιες συσκευές για παράδειγμα είναι τα switching τροφοδοτικά που χρησιμοποιούνται στις περισσότερες πλέον DC συσκευές όπως τα τροφοδοτικά υπολογιστών, οθονών, laptop, κινητών, καμερών, εξωτερικών σκληρών δίσκων, modem-router κ.λ.π. Δηλαδή τις συσκευές αυτές έχουμε παντού μέσα στο σπίτι μας. Τα switching τροφοδοτικά έχουν στην είσοδό τους ανορθωτές που μεταβάλουν την εναλλασσόμενη τάση του δικτύου σε συνεχή και πυκνωτές στους οποίους αποθηκεύουν αυτή τη συνεχή τάση για να τροφοδοτηθούν οι επόμενες βαθμίδες ισχύος του τροφοδοτικού. Οι πυκνωτές αυτοί δεν απορροφούν συνεχώς ρεύμα από το δίκτυο, αλλά μόνο όταν η τάση του δικτύου γίνει υψηλότερη από αυτήν που έχει την συγκεκριμένη στιγμή ο πυκνωτής. Από τη στιγμή που τάση του δικτύου γίνει χαμηλότερη, ο πυκνωτής παύει να απορροφά ρεύμα από το δίκτυο και εξακολουθεί –εκφορτιζόμενος- να τροφοδοτεί εκείνος τις βαθμίδες του τροφοδοτικού, μέχρι να έρθει το επόμενο υψηλό της τάσης του δικτύου, για να μπορέσει μέσα σε ένα απότομο παλμό ρεύματος να απορροφήσει όση ενέργεια έχασε! Συνεπώς το ρεύμα που απορροφά ένα τροφοδοτικό από το δίκτυο, δεν μεταβάλλεται ομαλά, αλλά περιέχεται υψηλούς παλμούς/ αιχμές. Αυτή η περίπτωση είναι και η πιο δύσκολη να μετρηθεί, αλλά θα δούμε παρακάτω ότι με την συσκευή μας μπορεί γίνει εύκολα, απλά με μια γρήγορη δειγματοληψία. Επομένως για να μετρήσουμε την κατανάλωση στην περίπτωση αυτή θα πρέπει να μπορούμε να μετράμε πάντα το στιγμιαίο ρεύμα και την στιγμιαία τάση με μια γρήγορη δειγματοληψία. Επομένως, για την περίπτωση που έχουμε μόνο ωμικά φορτία η φαινόμενη ισχύς είναι πάντα ίση με την ενεργό/πραγματικά ισχύ, δηλαδή από το γενικό τύπο: S=P+Q*j S=P όπου S: φαινόμενη ισχύς, P: ενεργός ισχύς, Q: άεργος ισχύς και επειδή Q=0. Στην περίπτωση που έχουμε σύνθετα φορτία η φαινόμενη ισχύς είναι όντως το μιγαδικό διάνυσμα S=P+Q*j το οποίο φαίνεται και στο παρακάτω γράφημα. Απ' αυτό συμπεραίνουμε ότι: P = S*cosφ Q = S*sinφ O λόγος cosφ είναι γνωστός και ως συντελεστής ισχύος, δηλαδή είναι ο λόγος της ενεργού ισχύς προς την φαινόμενη και φανερώνει τον τύπο των φορτίων που υπάρχουν στην ηλεκτρολογική εγκατάσταση. Οπότε όταν ο συντελεστής ισχύος είναι 1, τότε υπάρχουν μόνο ωμικά φορτία, ενώ αν είναι μικρότερος από την μονάδα, τότε υπάρχουν και επαγωγικά ή χωρητικά φορτία. (Σημ: για τις εξομοιώσεις χρησιμοποίησα το partsim [) Όπως αναφέραμε σε μια οικιακή ηλεκτρολογική εγκατάσταση μπορεί να συναντήσουμε μονοφασική ή τριφασική τάση. Η διαφορά τους είναι πως σε αντίθεση με την μονοφασική εγκατάσταση, στην τριφασική έχουμε 3-φάσεις που η κάθε μια έχει διαφορά φάσης με την άλλη 120 μοίρες. Αυτό μπορούμε να το εξομοιώσουμε με το παρακάτω κύκλωμα Όπως παρατηρούμε οι 3 AC πηγές έχουν 6.66ms offset η μία από την άλλη δηλαδή το 1/3 των 50Hz, δηλαδή έχουν διαφορά φάσης 120ο η μία από την άλλη. Το αποτέλεσμα της εξόδου σε κάθε αντίσταση της κάθε φάσης είναι η παρακάτω. Επειδή τα μαθηματικά είναι αρκετά πιο περίπλοκα όσον αφορά στο τριφασικό, δεν έχει νόημα να μπούμε σε τέτοιες αναλύσεις, καθώς ο τρόπος υπολογισμού θα είναι κάπως διαφορετικός και θα τον δούμε στην συνέχεια. Υλικά Πριν μιλήσουμε για τις λεπτομέρειες των μετρήσεων και των υπολογισμών της κατανάλωσης για το τριφασικό, θα πρέπει να δούμε πρώτα τα εξαρτήματα που θα χρησιμοποιήσουμε και την κατασκευή, γιατί έτσι είναι ευκολότερο να κατανοηθεί η μεθοδολογία. Πριν όμως αναφέρουμε λεπτομέρειες για την κατασκευή ας δούμε τι θέλουμε να φτιάξουμε ακριβώς και ποιος είναι ο στόχος. Θέλουμε μια συσκευή η οποία να είναι ικανή να μπορεί να μετρήσει την ισχύ σε ένα 3-φασικό οικιακό δίκτυο, στην συνέχεια ανά τακτά χρονικά διαστήματα, να στέλνει ασύρματα τις μετρήσεις σε ένα server και τελικά, να τα παρέχει στο χρήστη σε μια κατανοητή μορφή, δίνοντας του τη δυνατότητα να βλέπει την ιστορικότητα αλλά και να κάνει παραμετροποιημένη αναζήτηση σε αυτά. Επομένως η λίστα με αυτά που θα χρειαστούν είναι η παρακάτω. Arduino UNO R3 ~ 3,2€ emonTx Arduino shield SMT ~ 15€ ESP8266 ~ 2.30€ 3x SCT-013-000, 100A current transformers ~ 14,5€ Jumber cable 2.54mm 1P-1P female-to-male ~ 1,44€ Τροφοδοτικό 220VAC / 9V AC γύρω στα 500mA ~5 με 10€ Τα παραπάνω υλικά έχουν κόστος περίπου 40-45€, το οποίο αν σας φαίνεται μεγάλο... δεν είναι. Ένας απλός 3-φασικός μετρητής ενέργειας ράγας χωρίς καμία συνδεσιμότητα ή άλλες νοστιμιές κάνει περίπου 50€ στο ebay, ενώ οι δικτυακοί ξεφεύγουν πολύ σε τιμή και κυμαίνονται από 200 ευρώ μέχρι 500€. Οπότε, εκτός από το μικρότερο κόστος και την ικανοποίηση να το φτιάχνει κάποιος μόνος του, έχει και τον έλεγχο στον κώδικα και στις λειτουργίες. Μέχρι στιγμής στο κόστος δεν έχουμε υπολογίσει τον server ο οποίος θα αποθηκεύει τις μετρήσεις σε μια βάση δεδομένων και στην συνέχεια θα τις παρουσιάζει στον χρήστη μέσω ενός web interface. Αυτός ο server μπορεί να είναι ένα raspberry pi ή ένας υπολογιστής με windows ή linux. Απαραίτητη προϋπόθεση είναι να βρίσκεται 24/7 σε λειτουργία, ώστε να συλλέγει συνεχώς τα δεδομένα και να τα αποστέλλει όταν ζητηθούν από τον χρήστη. Το κόστος ενός raspberry pi είναι περίπου 25€ για το model B+ 512 και 35€ για το Rpi 2 model B+ 1GB. Το δεύτερο φυσικά είναι καλύτερο, αλλά για την εφαρμογή είναι υπεραρκετό το πρώτο, οπότε μπορείτε να γλυτώσετε 10€. Το κόστος για το PC δεν το αναφέρω καν, μόνο αν κάποιος έχει ήδη ένα linux ή windows server, ο οποίος τρέχει 24/7 αξίζει να το χρησιμοποιήσει, αλλιώς με κλειστά μάτια το Raspberry Pi. Επίσης θα χρειαστεί ένας απλός μετρητής ενέργειας για να γίνει το calibration του μετρητή μας. Το κόστος του, αν δεν έχει κάποιος είναι περίπου 10-15€, αλλά λόγο του ότι τον χρειάζεστε μόνο για το calibration, μπορείτε να δανειστείτε από κάποιον άλλον. Ας δούμε τώρα τα υλικά, ένα-ένα και ας εξηγήσουμε την λειτουργία τους. Arduino UNO R3 To arduino όπως ξέρουμε ήδη από το πρώτο project είναι μια πλατφόρμα ανάπτυξης με τον επεξεργαστή ATmega328P της Atmel. Το UNO R3, σε αντίθεση με το nano που είχαμε δει, διαφέρει στο ότι έχει ένα αρκετά μεγαλύτερο PCB με pin-οσειρές για όλα τα pins του μικροελεγκτή. Κατά τα άλλα είναι ο ίδιος επεξεργαστής με τις ίδιες δυνατότητες και ο λόγος που επέλεξα αυτό το PCB είναι το επόμενο εξάρτημα. emonTx Arduino shield SMT Αυτό είναι πολύ απλό PCB που το μόνο που έχει επάνω είναι connectors και παθητικά υλικά (κυρίως αντιστάσεις). Η χρήση του είναι ότι σε αυτό συνδέονται τα CT (current transformers – μετασχηματιστές ρεύματος) και μια εξωτερική πηγή AC στα 10-12VAC, η οποία χρησιμοποιείται για reference. Είναι όντως ακριβό και μπορεί να το φτιάξει κανείς μόνος του, γιατί αποτελείται ουσιαστικά από διαιρέτες τάσης, την λειτουργία των οποίων θα δούμε αργότερα. Παρ' όλα αυτά προτίμησα να το αγοράσω αντί να το φτιάξω για 2 λόγους. Πρώτον επειδή το διαθέτει το forum Open Energy Monitor, το οποίο έχει κάνει την ανάπτυξη του κώδικα για το arduino και την διαθέτει ελεύθερα μαζί με οδηγίες για το πως να κατασκευάσει κάποιος ακόμα και τα PCBs μόνος του, οπότε τους αξίζει μια αμοιβή. Δεύτερον, επειδή είναι αισθητικά πιο όμορφο από το να είναι χύμα καλώδια, αντιστάσεις και διάτρητα PCB. Βασικά OK, το πρώτο είναι μόνο, το δεύτερο είναι για να χρυσώσω το χάπι. YHDC SCT-013-000 Αυτός είναι ένας μετασχηματιστής ρεύματος (CT), ο οποίος αποτελείται από έναν διαιρούμενο φερριτικό πυρήνα ο οποίος έχει την δυνατότητα να δημιουργεί επαγωγικά ένα εναλλασσόμενο ρεύμα έντασης ανάλογης με αυτήν που το διαρρέει. Η λειτουργία του είναι γραμμική και το ρεύμα που δημιουργεί είναι ανάλογο των τυλιγμάτων του δευτερεύοντος πηνίου του μετασχηματιστή. Ο κατασκευαστής για το συγκεκριμένο CT δίνει ότι είναι βαθμονομημένο ως 100:0.05, που σημαίνει ότι όταν το ρεύμα στον αγωγό θα είναι 100Α, τότε το ρεύμα στην έξοδό του θα είναι 0.05Α ή 50mA. Περισσότερα για τον συγκεκριμένο μετ/στη ρεύματος μπορείτε να διαβάσετε εδώ. ESP8266 H συσκευή αυτή είναι είναι ένα WiFi module με RS232-TTL interface. Δηλαδή έχει μια σειριακή θύρα στην ταχύτητα των 9600bps από την οποία προγραμματίζεται και δέχεται εντολές. Το module αυτό έχει μέσα ένα 32-bit επεξεργαστή στα 3.3V με ένα RF interface που είναι ικανό για ταχύτητες μέχρι και 72.2Mbps με sensitivity στα -71dBm. Οπότε υποστηρίζει 802.11b/g/n και παρέχει επίσης SDIO2.0, SPI, αισθητήρα θερμοκρασίας και η κατανάλωσή του στα χαρακτηριστικά 802.11b, CCK 1Mbps, POUT=+19.5dBm είναι 215mA και δεν ξεπερνά ποτέ τα 500mA σε κανένα mode λειτουργίας. Το module αυτό χρησιμοποιείται για να αποστέλλονται τα δεδομένα μέσω WiFi στον server χρησιμοποιώντας το πρωτόκολλο UDP και η απόσταση του από τον wireless router, με την ενσωματωμένη του κεραία, μπορεί να είναι και 370m σε ιδανικές συνθήκες περιβάλλοντος και χωρίς ενδιάμεσα εμπόδια. Με εξωτερική κεραία η απόσταση αυτή μπορεί να αυξηθεί ή να διαπεράσει περισσότερα εμπόδια. Το συγκεκριμένο module χρησιμοποιείται στο Open Energy Monitor (OEM), αλλά το πρόσθεσα εγώ στο PCB και στην συνέχεια στον κώδικα για να το υποστηρίζει. Βέβαια στο OEM χρησιμοποιούν το RFM12B το οποίο είναι ένας RF transmitter στα 433MHz, το οποίο νομίζω ότι δεν προσφέρει κάτι ουσιαστικό και είναι και πιο δύσχρηστο, ειδικά όταν υπάρχει ήδη μια Ethernet/WiFi υποδομή. Κατασκευή H κατασκευή είναι γενικά απλή μιας και τα κομμάτια είναι έτοιμα και δεν χρειάζεται να φτιάξετε κάποιο pcb ή να κάνετε πολλές κολλήσεις με διάτρητα pcb. Όμως θα χρειαστεί να κάνετε κάποιες κολλήσεις επάνω στο emonTx Arduino shield και συγκεκριμένα θα κάνουμε μια μόντα και θα χρησιμοποιήσουμε τα pads τα οποία προορίζονται για το RFM12B για να κολλήσουμε το ESP8266 και θα αλλάξουμε κάποιες αντιστάσεις. Στην επόμενη εικόνα ακολουθεί το pinout του ESP8266. Το chip αυτό είναι 3.3V και αν σε οποιοδήποτε pin δεχθεί 5V μπορεί να καεί, καθώς είναι πιστοποιημένο μέχρι τα 4.5V. Το VCC είναι η τάση τροφοδοσίας των 3V3, το reset και το CH_PD πρέπει να είναι συνδεδεμένο μέσω μιας αντίστασης 2ΚΩ στο VCC. To GND θα πρέπει να συνδεθεί στο GND του arduino, το TX του ESP μπορεί να συνδεθεί απ' ευθείας στο RX του arduino, μιας και το arduino μπορεί να διαβάσει σωστά TTL δεδομένα στα 3V3. Όμως το RX του ESP δεν πρέπει να συνδεθεί απ' ευθείας στο TX του arduino καθώς είναι 5V, οπότε χρειάζεται ένας διαιρέτης τάσης ώστε να ρίχνει την τάση. Στην επόμενη εικόνα βλέπουμε το σχηματικό διάγραμμα του emonTx shield. Στην δεξιά πλευρά βλέπουμε τις συνδέσεις του RFM12B, το οποίο συνδέεται στο arduino μέσω του SPI bus (SEL, SCK, MISO, MOSI). Όπως βλέπουμε το RFM ήδη τροφοδοτείται με 3V3, οπότε δεν χρειάζεται να κάνουμε κάποια αλλαγή. Επίσης επειδή και αυτό δεν είναι 5V tolerant, δηλαδή μπορεί να καεί αν δεχθεί 5V σε οποιοδήποτε pin, βλέπουμε ότι έχει κάποιους διαιρέτες τάσης στα pin του SPI του. Δυστυχώς από τις δοκιμές που έκανα οι τιμές αυτών των αντιστάσεων είναι πολύ μεγάλες και το ESP8266 δεν μπορεί να δουλέψει σωστά, οπότε πρέπει να αλλάξουμε 2 αντιστάσεις σε έναν διαιρέτη και να τις μειώσουμε, ώστε να αυξηθεί στο ρεύμα. Στον κώδικα έχω χρησιμοποιήσει για TX (του arduino) το σήμα SCK (pin D13) και για RX (του arduino) το σήμα IRQ (pin D2). Επομένως, θα πρέπει να αλλάξουν οι αντιστάσεις στον διαιρέτη του SCK δηλαδή οι αντιστάσεις R7 και R20, οι οποίες θα πρέπει να πάρουν τιμές 2ΚΩ και 1ΚΩ αντίστοιχα. Καλό είναι οι αντιστάσεις να είναι SMD. Στην επόμενη φωτογραφία φαίνονται οι αλλαγές που πρέπει να γίνουν και τα pins στα οποία θα συνδεθούν τα αντίστοιχα σήματα του ESP8266. Στην συνέχεια πρέπει να συνδέσουμε με ένα καλώδιο 1P-1P (αυτό που αναφέραμε στα υλικά μας), τα pads του emonTx shield που φαίνονται στην πάνω εικόνα με το ESP8266. Οπότε χρειαζόμαστε 4 καλώδια τα οποία πάνε στις 4 γωνίες του κονέκτορα του ESP που βρίσκονται τα σήματα VCC, GND, TX, RX. Ο connector είναι male pin-header, οπότε συνδέουμε τα 1P female pin στα 4 αυτά σήματα, οπότε μένει να τα συνδέσουμε πάνω στα pads, οπότε σας προτείνω να τα κολλήσετε με ένα κολλητήρι. Στην δική μου κατασκευή έχω βάλει male pin-headers, αλλά το έκανα αυτό γιατί πειραματιζόμουν κατά την διάρκεια της ανάπτυξης, οπότε το χρειαζόμουν, αλλά σας προτείνω εσείς να κολλήσετε απ' ευθείας τα male pins του καλωδίου στα pads του emonTx. Τέλος μένει να συνδέσουμε και τις αντιστάσεις των 2ΚΩ στο ESP8266 που συνδέουν το RST και το CH_PD στα 3V3. Ο καλύτερος τρόπος είναι να το κάνετε πάνω στο ίδιο το ESP για εξοικονόμηση χώρου και καλωδίων. Για να το κάνετε αυτό θα χρειαστείτε 2 smd αντιστάσεις και λίγο κόπο, αλλά στο τέλος το αποτέλεσμα θα πρέπει να είναι όπως το παρακάτω. Όπως φαίνεται εδώ, η αντίσταση ανάμεσα στο RST και το VCC (δεξιά) είναι απευθείας κολλημένη πάνω στα pins του connector, ενώ η άλλη αντίσταση είναι πρώτα κολλημένη στο CH_PD με μια κλήση προς τα έξω και μετά με ένα μικρό σύρμα στο VCC. Αφού τελειώσετε με τις κολλήσεις, τοποθετήστε τα δυο jumbers που είναι στην πλακέτα, στην δεξιά θέση όπως φαίνεται στην παρακάτω εικόνα. Στην φωτό φαίνεται και ότι έχω ταλαιπωρήσει πολύ το pcb του emonTx με τις δοκιμές και ότι έχω κολλήσει pin headers τα οποία όμως είναι άχρηστα, οπότε μην το κάνετε και εσείς. Τελειώνοντας θα πρέπει να συνδέσετε το emonTx shield στο arduino. Ευτυχώς αυτό είναι φτιαγμένο με τέτοιο τρόπο ώστε να συνδέεται χωρίς κάποια ιδιαίτερη προσπάθεια, οπότε απλά το τοποθετείτε επάνω στα pin headers του arduino UNO και το κουμπώνετε όπως φαίνεται στις δυο παρακάτω φωτογραφίες που δείχνουν και τις δυο πλευρές. Software & firmwares Αφού τελειώσαμε με την κατασκευή και την συνδεσμολογία και γενικά το hardware, είναι ώρα να ασχοληθούμε με το software. To software σε αυτό το project είναι αρκετό γιατί έχει και χωρίζεται στα παρακάτω. Κώδικας του arduino Κώδικας του server που δέχεται τα δεδομένα από το arduino Κώδικας του web server που απεικονίζει τα δεδομένα στον χρήστη Κώδικας του tester για να τεστάρετε τον server και το web interface Κώδικας του προγράμματος που δημιουργεί ψεύτικα cvs αρχεία για να κάνετε tests με την βάση δεδομένων. Arduino source code εδώεδώεδώ Energy meter server source code εδώ Σε αυτό το project θα δώσω όλο το source code και για τα πάντα, αλλά δεν θα μπω σε ανάλυση του κώδικα, καθώς δεν είναι ο σκοπός του άρθρου. Όμως ζητώ αν κάποιος κάνει αλλαγές και προσθέσει κάποιες λειτουργίες ή βελτιώσει κάποια πράγματα, να ποστάρει τις αλλαγές ώστε να είναι διαθέσιμες και στους υπόλοιπους. Είναι το πιο απλό και εύκολο πράγμα που μπορώ να ζητήσω. Για να κάνετε compile το firmware θα χρειαστείτε την ΕmonLib την οποία θα βρείτε και για να την εγκαταστήσετε και να κάνετε compile τον κώδικα, έχω περιγράψει ήδη την διαδικασία αυτή και . Υπόψη, ότι θα χρειαστείτε σίγουρα να κάνετε κάποιες αλλαγές στον κώδικα, οπότε μην τα κλείσετε. Παρακάτω στο άρθρο θα μιλήσουμε για το calibration του μετρητή, ώστε να έχει καλύτερη ακρίβεια στις μετρήσεις που κάνει και για να κάνετε σωστό calibration θα χρειαστεί να αλλάξετε κάποιες παραμέτρους μέσα στον κώδικα. Ο κώδικας του server είναι αρκετά απλός και το μόνο που κάνει είναι να ακούει σε μια UDP πόρτα για δεδομένα από κάποιο μετρητή. Μόλις λάβει σωστά δεδομένα με ένα συγκεκριμένο binary πρωτόκολλο που έχω φτιάξει (μπορείτε να το δείτε στον κώδικα), τότε αποθηκεύει τα δεδομένα αυτά μαζί με ένα timestamp σε μια sqlite βάση δεδομένων και απαντά στον μετρητή με ένα απλό OK. Ο κώδικας είναι cross-platform και μπορείτε να τον κάνετε compile σε οποιοδήποτε λειτουργικό. Ωστόσο για ευκολία στο τέλος της σελίδας εκτός από τον κώδικα θα βρείτε και τα executable για διάφορες πλατφόρμες όπως Raspberry Pi, Debian Linux x86_32, Windows x86_32. Επίσης στο τέλος της σελίδας εκτός από τον κώδικα και τα executables, θα βρείτε και έτοιμα projects για τον eclipse-cdt για την κάθε πλατφόρμα για ευκολία. Στην περίπτωση όμως του Raspberry, το project είναι μεν για τον eclipse-cdt, αλλά χρειάζεται και το chain-tool του Linaro και συγκεκριμένα το “arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian”. Αν θέλετε περισσότερες πληροφορίες για το πως μπορείτε να κάνετε cross-compilation για το Raspberry σε περιβάλλον Linux, τότε μπορείτε να ρίξετε μια ματιά . Παραμετροποίηση του μετρητή bray's terminal Στην παραπάνω εικόνα βλέπουμε το μήνυμα εκκίνησης της συσκευής, μετά από το οποίο φορτώνει το configuration από την EEPROM και παράλληλα τυπώνει και τα περιεχόμενά της. Υπολογίζει το checksum της EEPROM και το συγκρίνει με το checksum του configuration που είναι σωσμένο στην EEPROM και αν το βρει ίδιο τότε φορτώνει το configuration από την EEPROM, αλλιώς φορτώνει τα defaults. Στην συνέχεια τυπώνει το configuration (στην εικόνα είναι το default) και ξεκινά η διαδικασία σύνδεσης στο WiFi. Αν δεν είναι σωστό το configuration ή δεν βρίσκει το Access Point που έχει προγραμματισμένο, τότε θα προσπαθεί συνεχώς να συνδεθεί και ενδιάμεσα από κάθε προσπάθεια θα παίρνει μετρήσεις για την ισχύ. Κατά την διάρκεια αυτή θα πρέπει αν θέλετε να μπείτε σε configuration mode θα πρέπει να στείλετε την παρακάτω εντολή CONF=1 Όταν αποσταλεί αυτή η εντολή, η συσκευή μπορεί να μην ανταποκριθεί αμέσως καθώς εκείνη τη στιγμή μπορεί να είναι απασχολημένη, αλλά όταν επεξεργαστεί την εντολή θα παρουσιαστεί το παρακάτω μήνυμα. Όταν δείτε το μήνυμα “CONF mode enabled”, σημαίνει ότι η συσκευή έχει μπει σε configuration mode και μπορεί να δεχθεί και τις υπόλοιπες εντολές που περιγράψαμε πιο πάνω. Οπότε πλέον μπορείτε να ξεκινήσετε τον προγραμματισμό της συσκευής και καλό θα ήταν να ακολουθήσετε την μεθοδολογία που θα περιγράψω. Αν θέλετε να αλλάξετε μόνο μια παράμετρο, τότε στέλνετε την εντολή τροποποίησης της παραμέτρου, μετά την εντολή SAVE και κάνετε reset την συσκευή. Αν θέλετε να την προγραμματίσετε εξ' αρχής τότε η παρακάτω μέθοδος (στην εικόνα και το κείμενο παρακάτω) είναι η ενδεδειγμένη. Τροφοδοτείτε την συσκευή συνδέοντας το USB καλώδιο, ανοίγετε το terminal και πατάτε connect. Περιμένετε να δείξει τις πρώτες 1-2 γραμμές που σημαίνει ότι η συσκευή ξεκίνησε και στέλνετε την εντολή CONF=1 Στην συνέχεια όταν μπει σε configuration mode η συσκευή στέλνετε την εντολή AP_LIST? Η απάντηση αυτή καθυστερεί περίπου 10” και όταν έρθει είναι η λίστα με τα AP που βλέπει το WiFi module της συσκευής. Από αυτά μας ενδιαφέρει το SSID αυτής που θέλουμε να συνδεθεί η συσκευή. Στην συνέχεια στέλνετε την εντολή DEFAULTS Με την εντολή αυτή όλες οι παράμετροι παίρνουν τις default τιμές τους, οπότε μπορεί να ξεκινήσει ο προγραμματισμός ξεκινώντας με το SSID. Προγραμματίζουμε το SSID που βρήκαμε με την AP_LIST με την εντολή AP_SSID=linksys Προγραμματίζουμε το password για το SSID με την εντολή AP_PASSWD=MyPassword Προγραμματίζουμε την IP στην οποία θα αποστέλλονται τα UDP πακέτα με την εντολή SERVER_IP=192.168.1.10 Προγραμματίζουμε την πόρτα στην οποία θα αποστέλλονται τα UDP πακέτα με την εντολή SERVER_PORT=7710 Προγραμματίζουμε την περίοδο με την οποία θα αποστέλλονται τα UDP πακέτα στα 5 λεπτά με την εντολή SERVER_POLL=300 Προγραμματίζουμε το mode με το οποίο λειτουργεί το βαθυπερατό φίλτρο που θα υποστούν τα δεδομένα της δειγματοληψίας. LPF_MODE=0 Σώζουμε το configuration με την εντολή SAVE Και στην συνέχεια επιβεβαιώνετε τον προγραμματισμό με τις εντολές χρησιμοποιώντας το ερωτηματικό στο τέλος. Επέλεξα την παραμετροποίηση του μετρητή να την βάλω σε ξεχωριστή σελίδα, ώστε να ξεχωρίζει γιατί είναι πολύ χρήσιμη. Για να παραμετροποιήσετε τον μετρητή με το arduino θα πρέπει να τον έχετε συνδέσει με ένα usb καλώδιο στον υπολογιστή σας και να έχετε ένα σειριακό terminal όπως το . Αφού λοιπόν το κατεβάσετε το τρέξετε και έχετε συνδεδεμένο το usb, τότε στο πεδίο COM Port διαλέγετε την σειριακή θύρα που αντιστοιχεί στο arduino (πχ COM13), διαλέγετε ταχύτητα baud rate=9600, στο πεδίο του Transmit κάτω αριστερά κάνετε tick στο checkbox του CR=CR+LF και τέλος κάτω δεξιά κάνετε tick στο checkbox του +CR δίπλα από το κουμπί send, ώστε με κάθε εντολή που στέλνετε να αποστέλλονται και οι χαρακτήρες CR και LF (0x13, 0x10). Στην συνέχεια πατήστε το κουμπί Connect και το terminal θα συνδεθεί στην συσκευή και θα κάνει reset. Οι εντολές που υποστηρίζονται από τον μετρητή είναι οι παρακάτω.CONF=<conf mode><conf mode> 0: κανονικό mode λειτουργίας, 1: configuration mode της συσκευήςΕπιλογή ανάμεσα σε configuration mode και mode κανονικής λειτουργίας. Στο configuration mode μπορείτε να προγραμματίσετε όλες τις παραμέτρους του μετρητή σε αντίθεση με το κανονικό mode λειτουργίας, το οποίο υποστηρίζει μόνο αυτή την εντολή. AP_LIST?Εκτύπωση της λίστας των Access Points (AP) τα οποία είναι στην εμβέλεια του WiFi. Αυτή την εντολή την χρειάζεστε για να δείτε ποια APs είναι κοντά στην συσκευή και για να πάρετε το SSID του AP, το οποίο θα χρειαστείτε για να συνδεθείτε σε αυτό.AP_SSID?AP_SSID=<ssid name>Με την εντολή AP_SSID αν στο τέλος βάλετε ένα ερωτηματικό ο μετρητής σας επιστρέφει το ήδη υπάρχον SSID του AP στο οποίο έχει προγραμματιστεί να συνδέεται. Με το ίσον μπορείτε να του προγραμματίσετε ένα νέο SSID.AP_PASSWD?AP_PASSWD=<AP password>Με την εντολή AP_ PASSWD αν στο τέλος βάλετε ένα ερωτηματικό ο μετρητής σας επιστρέφει το ήδη υπάρχον password του AP στο οποίο έχει προγραμματιστεί να συνδέεται. Με το ίσον μπορείτε να του προγραμματίσετε ένα νέο password. SERVER_IP?SERVER_IP=<UDP server IP address>Με την εντολή SERVER_IP, αν στο τέλος βάλετε ένα ερωτηματικό ο μετρητής σας επιστρέφει την ήδη υπάρχουσα IP διεύθυνση στην οποία αποστέλλει τα δεδομένα των μετρήσεων του. Με το ίσον μπορείτε να του προγραμματίσετε μια νέα IP. SERVER_PORT?SERVER_PORT=<UDP server port>Με την εντολή SERVER_PORT, αν στο τέλος βάλετε ένα ερωτηματικό ο μετρητής σας επιστρέφει την ήδη υπάρχουσα UDP πόρτα στην οποία αποστέλλει τα δεδομένα των μετρήσεων του. Με το ίσον μπορείτε να του προγραμματίσετε μια νέα πόρτα. SERVER_POLL?SERVER_POLL=<UDP packet polling frequency in seconds>Με την εντολή SERVER_POLL αν στο τέλος βάλετε ένα ερωτηματικό ο μετρητής σας επιστρέφει τον ήδη υπάρχον περιοδικό χρόνο (εκφρασμένο σε δευτερόλεπτα), κατά τον οποίο ο μετρητής στέλνει δεδομένα στον server. Με το ίσον μπορείτε να του προγραμματίσετε μια νέα τιμή για τον χρόνο. Για παράδειγμα αν θέλετε ο μετρητής να στέλνει μια μέτρηση κάθε 10 λεπτά τότε η τιμή αυτή θα είναι 10'*60”=600. Προσοχή, από την τιμή αυτή εξαρτάται το πόσο γρήγορα θα γράφει η βάση δεδομένων καινούργια δεδομένα, δηλαδή αν ο χρόνος είναι 10” (δευτερόλεπτα) τότε σε 1 χρόνο η βάση δεδομένων θα έχει μέγεθος (356*24*60*60/10)*56 bytes=164.2MB. Ενώ αν ο χρόνος είναι 10' (λεπτά), τότε η βάση θα έχει μέγεθος (356*24*60/10)*56 bytes = 2,64ΜΒ. Υπόψη πως τα δεδομένα που αποστέλλονται από τον μετρητή στον χρόνο αυτό δεν είναι οι στιγμιαίες τιμές, αλλά ο μέσος όρος των τιμών που έχει μαζέψει ο μετρητής σε αυτό τον χρόνο. Θα το αναλύσουμε αυτό και στην επόμενη σελίδα. LPF_MODE?LPF_MODE=<Low pass filter mode>Με την εντολή αυτή διαλέγετε με ποιο τρόπο θα δουλεύει το βαθυπερατό φίλτρο το οποίο εφαρμόζεται πάνω στα δεδομένα της δειγματοληψίας. Συγκεκριμένα επειδή το arduino δειγματοληπτεί συνεχώς το ρεύμα στα CT, αλλά στέλνει μόνο στον χρόνο που έχει οριστεί από SAVEΜε την εντολή αυτή σώζεται το configuration στην EEPROM του arduino. Υπόψη θα πρέπει να την τρέχετε κάθε φορά που τελειώνετε με το configuration της συσκευής. DEBUG=<enable><enable> 0: disable WiFi module debug, 1: enable WiFi module debugΜε την εντολή αυτή ενεργοποιείται ή απενεργοποιείται το debug του ESP8266 WiFi module, το οποίο μπορούμε να χρησιμοποιήσουμε για να εντοπίσουμε προβλήματα συνδεσιμότητας του WiFi. DEFAULTSΜε την εντολή αυτή όλες οι παράμετροι του configuration γυρνάνε στις αρχικές τους τιμές, οι οποίες είναι κενές.Ας δούμε όμως και ένα παράδειγμα παραμετροποίησης. Με το που συνδεθούμε στην συσκευή με το σειριακό, αυτή κάνει reset και στο terminal αρχίζει να τυπώνει κάποια μηνύματα που δείχνουν την κατάσταση λειτουργίας της συσκευής, όπως φαίνεται και παρακάτω. Testing & calibration Τώρα είναι που αρχίζουν τα δύσκολα. Μην αποθαρρύνεστε φυσικά, απλά αυτό το βήμα είναι το σημαντικότερο απ' όλα, καθώς αυτό θα καθορίσει και την ακρίβεια του μετρητή κατά την διάρκεια λειτουργίας του. Για να προχωρήσετε σε αυτό το βήμα θα χρειαστείτε ένα μετρητή ενέργειας σαν αυτόν Ένας τέτοιος μετρητής κοστίζει περίπου 10€. Αν δεν έχετε τέτοιο μετρητή, αλλά έχει κάποιος γνωστός σας, τότε δανειστείτε τον, καθώς θα τον χρησιμοποιήσετε μόνο για το calibration. Φυσικά ένας μετρητής είναι πάντα χρήσιμος σε ένα σπίτι γιατί μπορείτε να μετρήσετε την κατανάλωση μιας ή περισσότερων συσκευών. Επίσης θα χρειαστείτε ένα μεγάλο μεταβλητό ωμικό φορτίο. Προσωπικά χρησιμοποίησα μια σόμπα αλογόνου με 3 σκάλες των 400W, δηλαδή 400-800-1200W. Για τους λόγους που θα πούμε παρακάτω, το καλιμπράρισμα είναι προτιμότερο να γίνεται με μεγάλα φορτία, δηλαδή από 800W και πάνω. Με τον μετρητή του εμπορίου θα καλιμπράρουμε τον δικό μας μετρητή σε 3 διαφορετικά φορτία και επίσης θα καλιμπράρουμε την δειγματοληψία της τάσης του δικτύου. Βεβαίως, αντί για μετρητή μπορούμε να χρησιμοποιήσουμε πολύμετρο, αλλά είναι πιο επικίνδυνο λόγο της υψηλής τάσης. Πάντως προσωπικά είχα καλύτερα αποτελέσματα με το πολύμετρο, απ' ότι με τον μετρητή και οι τελικές τιμές για το καλιμπράρισμα προέκυψαν με το πολύμετρο. Είναι πραγματικός πειρασμός το να μπω σε λεπτομέρειες για τον ακριβή τρόπο με τον οποίο λειτουργεί το hardware σε συνδυασμό με το software και την θεωρία πίσω από αυτά, αλλά θυμίζω στον εαυτό μου ότι εκτός από χρονοβόρο δεν είναι και σημαντικό για την ουσία του άρθρου. Οπότε θα δώσω μερικές παραπομπές από το site που έχει κατασκευάσει το emonTx shield εδώ, στο οποίο θα βρείτε αναλυτικά και με απλό τρόπο όλες τις λεπτομέρειες που χρειάζεστε. Επίσης η αντίστοιχη σελίδα για το calibration είναι αυτή. ΠΡΟΣΟΧΗ! Επειδή στο σημείο αυτό θα χρειαστεί να ασχοληθείτε με υψηλές και επικίνδυνες για την ζωή τάσεις, όποιος δεν έχει εμπειρία ή δεν γνωρίζει πως να κάνει αυτά που περιγράφονται εδώ, ΝΑ ΜΗΝ επιχειρήσει να κάνει τίποτα από αυτά. Επαναλαμβάνω ένα λάθος μπορεί να κοστίσει ακόμα και την ζωή σας. Αρχικά θα χρειαστεί να κάνετε μια μετατροπή, έτσι ώστε να μπορέσετε να μετρήσετε το ρεύμα με τους μετασχηματιστές ρεύματος (CT) στην φάση που συνδέεται στην σόμπα. Για να μην ξεγυμνώσετε και καταστρέψετε το καλώδιο της σόμπας, προτιμήστε να φτιάξετε εσείς ένα καλώδιο ή να μετατρέψετε μια μπαλαντέζα. Αυτό που χρειάζεται να κάνετε είναι να αφαιρέσετε το εξωτερικό μονωτικό περίβλημα του καλωδίου, αλλά πολύ προσεκτικά για μη φθαρεί ούτε στο ελάχιστο η μόνωση των αγωγών στο εσωτερικό του. Προσωπικά έφτιαξα ένα δικό μου καλώδιο από 3 καλώδια των 2.5mm, ένα για την φάση, ένα για τον ουδέτερο και ένα για την γείωση. Στην επόμενη εικόνα βλέπετε το καλώδιο αυτό. Για λόγους ασφαλείας μπορείτε να περάσετε ένα μονωτικό μακαρόνι σε κάθε αγωγό. Επίσης, χρησιμοποιείστε ένα θηλυκό βύσμα Schouko, αντί για ηλεκτρολογική κλέμμα που έχω χρησιμοποιήσει στην φωτογραφία. Στην συνέχεια συνδέστε το τροφοδοτικό 9VAC στην θέση του πάνω στο emonTx shield και τα mini-jack από τα CT στις θέσεις 1, 2 και 3. Το τροφοδοτικό των 9VAC θα πρέπει να είναι συνδεδεμένο στην ίδια φάση με το φορτίο, δηλαδή την σόμπα. Στην συνέχεια συνδέστε όλα τα CT στο ίδιο καλώδιο της φάσης, αλλά φροντίστε να έχουν μια μικρή απόσταση μεταξύ τους. Τα CT πρέπει να έχουν συγκεκριμένη φορά με την οποία θα αγκαλιάσουν το καλώδιο της φάσης, για να δείτε ποια είναι αυτή, ψάξτε για το σύμβολο του βέλους επάνω στο κλιπ (->) και βάλτε το με την φορά να δείχνει το φορτίο ή βάλτε τα δυο από τα CT τυχαία προς την μια φορά και το άλλο προς την άλλη και θα δείτε την σωστή φορά κατά την διάρκεια του καλιμπραρίσματος. Συνήθως το κλιπ που κουμπώνει δείχνει προς τα πάνω αν η πρίζα είναι στην αριστερή πλευρά και το φορτίο στα δεξιά. Αφού τελειώσετε με τις συνδέσεις, το αποτέλεσμα θα είναι περίπου όπως στην παρακάτω εικόνα. Υπόψη ότι το τροφοδοτικό πρέπει να βγάζει 9VAC στην έξοδο και όχι 9VDC! Η AC έξοδος χρειάζεται έτσι ώστε ο μετρητής να παρακολουθεί ζωντανά την τάση του δικτύου, επομένως ο μετ/της του τροφοδοτικού κατεβάζει και απομονώνει την τάση των 230V στα 9V και με ένα διαιρέτη τάσης στο emonTx shield, ο ADC του arduino δειγματοληπτεί την τάση του δικτύου. Αυτή η τάση χρησιμοποιείται συνεχώς για τους υπολογισμούς που κάνει ο κώδικας, ώστε να υπολογίσει την ισχύ, όποτε θα πρέπει να είναι όσο πιο ακριβής γίνεται. Αφού έχετε κάνει όλες τις συνδέσεις σωστά και με ασφάλεια, τροφοδοτήστε το arduino και συνδεθείτε στην COM θύρα. Αφού ξεκινήσει και ανεξάρτητα από το αν καταφέρει να συνδεθεί στο wifi θα στέλνει στο terminal συνεχώς τις τιμές από την τάση και τα CT τις οποίες δειγματοληπτεί, όπως φαίνεται στην παρακάτω εικόνα. Στην παραπάνω εικόνα βλέπουμε τις μετρήσεις χωρίς να έχουμε κάνει ακόμα κάποιο calibration. Στις μετρήσεις αυτές έχω ενεργοποιήσει μόνο την μια σκάλα από την σόμπα, οπότε η κατανάλωση θα αναμένεται να είναι περίπου 400W. Πράγματι δείχνει κάπου εκεί κοντά, αλλά καλό είναι να βελτιώσουμε και άλλο την ακρίβεια. Υπόψη πως παρότι τα CT είναι γραμμικά όσο μικρότερο είναι το ρεύμα το οποίο τα διαρρέει τόσο μικρότερη η ακρίβεια. Αυτό συμβαίνει γιατί το ρεύμα του CT μετατρέπεται σε τάση μέσω μια Burden αντίστασης (δείτε εδώ) και επειδή τα συγκεκριμένα είναι βαθμονομημένα για μέχρι και 100Α, τότε όσο λιγότερα τα Ampere τόσο μικρότερη η τάση, άρα και τόσο μεγαλύτερες οι διακυμάνσεις και λιγότερη η ακρίβεια στους ADC του arduino. Επομένως ενώ βλέπουμε ρεύμα κοντά στα 1.8Α από τα CT, το πραγματικό ρεύμα είναι λιγότερο, όπως φαίνεται και στον μετρητή. Επίσης από την εικόνα από το terminal παρατηρήστε ότι στο CT2 η τιμή της ισχύος είναι αρνητική, ενώ στα άλλα θετική. Αυτό όπως ίσως μαντέψατε οφείλεται στο ότι το CT2 έχει συνδεθεί με λάθος φορά, οπότε θα πρέπει να την αλλάξετε και να την βάλετε όπως και τα άλλα δυο. Αρχικά θα πρέπει να βελτιωθεί η ακρίβεια της μέτρησης της τάσης Vrms. Αυτό έχει να κάνει με πολλές παραμέτρους μια από τις οποίες είναι ο ίδιος ο μετασχηματιστής μέτρησης της τάσης. Αν αυτός είναι πολύ κακής ποιότητας, τότε οι μετρήσεις θα είναι πολύ λάθος, μέχρι που ίσως να μην βγάζουν και νόημα. Αν είναι μέτριο προς καλό, τότε η ακρίβεια θα είναι καλύτερη. Παρακάτω δείχνω την έξοδο από το δικό μου τροφοδοτικό. Όπως βλέπετε στην εικόνα το συνημίτονο δεν είναι τέλειο, αλλά παραμορφώνει στις κορυφές του, πράγμα το οποίο είναι γενικά φυσιολογικό και οφείλεται κυρίως στο δίκτυο της ΔΕΗ και λόγο αυτού δημιουργούνται και πολλές αρμονικές. Κατά τα άλλα όμως η έξοδος είναι πολύ καλή. Επίσης ίσως παρατηρήσετε ότι ο μετασχηματιστής που χρησιμοποιώ δεν είναι 9VAC, αλλά 12VAC. Αυτό μην σας επηρεάσει εσάς και χρησιμοποιήσετε άλλο μετασχηματιστή, γιατί η διαδικασία μετά είναι διαφορετική, οπότε μένουμε στα 9VAC. Για να βελτιώσετε την μέτρηση της τάσης Vrms, ανοίξτε τον κώδικα του ard_energy_meter και πηγαίνετε στο σημείο όπου βλέπετε τις γραμμές που φαίνονται παρακάτω. Στις συναρτήσεις ct1.voltage(), ct2.voltage() και ct3.voltage() βλέπετε τρεις τιμές. Η πρώτη είναι το κανάλι του ADC που έχει συνδεθεί το κάθε CT και μένει πάντα ως έχει, η δεύτερη παράμετρος είναι η παράμετρος που χρησιμοποιούμε για το calibration της τάσης και η τρίτη για το calibration της φάσης. Για να καλιμπράρουμε την τάση, θα πρέπει η τιμή που γράφει ο μετρητής ή το πολύμετρο το οποίο μετράμε την πραγματική τάση, να είναι όσο πιο κοντινή γίνεται ή ίδια με την τάση που τυπώνει το terminal, που είναι η τάση Vrms του δικού μας μετρητή. Η εξίσωση που μας δίνει την παράμετρο της τάσης που πρέπει να χρησιμοποιήσουμε είναι η [νέα τιμή] = [υπάρχουσα τιμή]*( [πραγματική μέτρηση] / [τιμή του terminal] ) Η εξίσωση αυτή μας επιστρέφει την τιμή που πρέπει να βάλουμε στον κώδικά μας. Για να βρίσκετε την τιμή αυτή μπορείτε να φτιάξετε ένα φύλλο στο openoffice και να το βάλετε να υπολογίζει αυτόματα την παραπάνω εξίσωση, όπως φαίνεται παρακάτω, διαφορετικά το κάνετε με ένα calculator. Επομένως όπως είναι ο κώδικας αν το terminal τυπώνει τάση 235,57, ενώ το πολύμετρο ή ο μετρητής αναγράφει 232,8 και η υπάρχουσα τιμή στην παράμετρο του κώδικα είναι 230, τότε η νέα τιμή είναι 230*(232,8/235,57)=227,29. Ουσιαστικά είναι μια απλή μέθοδος των τριών. Την τιμή τώρα αυτή θα πρέπει να την βάλετε στον κώδικα και στις τρεις εξισώσεις, να κάνετε compile, να τον γράψετε στο arduino και να το ξεκινήσετε. Αυτή τη φορά θα δείτε ότι τα αποτελέσματα της Vrms θα είναι πιο κοντά στην πραγματικότητα. Την διαδικασία αυτή θα πρέπει να την επαναλάβετε ξανά μερικές φορές με τις νέες τιμές ώστε η ακρίβεια μετά από 3-4 επαναλήψεις να έχει βελτιωθεί όσο περισσότερο γίνεται. Τώρα έχει σειρά να καλιμπράρετε τα CT. Πριν το κάνετε αυτό θα πρέπει πρώτα να αυξήσετε αρκετά το ρεύμα, οπότε θα πρέπει να ενεργοποιήσετε όλες τις σκάλες της σόμπας ή γενικά να ξεπεράσετε το 1KW το οποίο είναι πιο κοντά στις πραγματικές συνθήκες για ένα σπίτι. Κάνοντάς το αυτό, θα πρέπει να συγκρίνετε τις τιμές του ρεύματος που τυπώνει το terminal με αυτές του μετρητή. Αν υπάρχει διαφορά τότε θα πρέπει να αλλάξετε την default τιμή 60.606 του burden, οπότε αν η τιμή του ρεύματος που στέλνει το terminal είναι μεγαλύτερη τότε θα πρέπει να μειώσετε την τιμή αυτή. Όταν την μειώνετε ή την αυξάνετε οι αλλαγές να είναι της τάξης 0.2, καθώς μικρή διαφορά στην τιμή αυτή επηρεάζει σημαντικά το αποτέλεσμα. Τέλος μένει να καλιμπραριστεί η τιμή του cosφ, δηλαδή ο συντελεστής ισχύος. Στην περίπτωση ενός καθαρά ωμικού φορτίου θα πρέπει η φαινόμενη και η πραγματική ισχύς να είναι ίσες, οπότε το cosφ να είναι ίσο με 1. Αυτό δεν είναι απόλυτα ακριβές στην περίπτωση αυτή οπότε μπορεί να έχει τιμή κοντά στο 1, δηλαδή 0.97-0.99. Για να καλιμπράρετε την τιμή αυτή από τις functions του κώδικα ct1.current() κλπ αλλάζετε την τρίτη μεταβλητή. Υπόψη ότι αυτή η τιμή δεν είναι απαραίτητα ίδια και για τις 3 φάσεις, έτσι στην περίπτωσή μου για παράδειγμα είναι 1.25 για την πρώτη φάση, 1.35 για την δεύτερη και 1.45 για την τρίτη. Ο γενικός κανόνας είναι ότι η τιμή αυτή πρέπει να είναι ανάμεσα στα όρια 0.0-2.0. Αν για κάποιο λόγο την ξεπερνά για να πλησιάσει το cosφ την τιμή 1.0, τότε σημαίνει μάλλον ότι ο μετασχηματιστής των 9VAC δεν είναι καλός και χρειάζεστε κάποιο άλλο. Σε αυτό το link μπορείτε να δείτε δοκιμές από διάφορα τροφοδοτικά 9VAC τα οποία είναι κατάλληλα και αυτό είναι το τροφοδοτικό το οποίο προτείνει και πουλά το OpenEnergyMonitor. Αφού τελειώσετε με το calibration όλων των παραμέτρων, θα πρέπει να κάνετε ένα τελικό έλεγχο ότι όλα τα αποτελέσματα είναι τα αναμενόμενα, οπότε ίσως χρειαστεί να κάνετε τη διαδικασία αυτή άλλη μια φορά. Ειδικά αν έχετε πειράξει αρκετά την παράμετρο του cosφ θα πρέπει να βεβαιωθείτε ότι είναι σωστή η Vrms που μετρά ο arduino. Αν δεν είναι τότε θα χρειαστεί να επαναλάβετε όλη τη διαδικασία από την αρχή. Παρακάτω είναι 2 εικόνες με τα αποτελέσματα από 800W φορτίου και περίπου 3.15-3.20 ρεύμα. Η αλήθεια είναι ότι το calibration χρειάζεται αρκετή δουλειά και σε κάποιες περιπτώσεις για να επιτευχθεί καλύτερη ακρίβεια θα πρέπει να αλλάξετε και τις αντιστάσεις στους διαιρέτες του emonTx shield με καλύτερης ακρίβειας και άλλες τιμές ώστε η reference τάση να είναι ανάλογη της εξόδου του μετασχηματιστή AC-AC. Επίσης η ποιότητα του μετ/στη παίζει πολύ ουσιαστικό ρόλο, όπως και η ποιότητα του δικτύου της ΔΕΗ. Επομένως σας προτείνω να αγοράσετε τον μετ/στη που προτείνουν για το emonTx shield στο link που έδωσα παραπάνω, ώστε να μην χρειαστεί να κάνετε δραματικές αλλαγές στο hardware, όπως αλλαγή αντιστάσεων κλπ. Τέλος αφού τελειώσετε, θα πρέπει να συνδέσετε το κάθε CT στην σωστή φάση και αυτό θα πρέπει να γίνει ακριβώς μετά το ρολόι της ΔΕΗ. Εκεί θέλει μεγάλη προσοχή και αν και δεν χρειάζεται να ακουμπήσετε κάποιο γυμνό, καλό είναι να το κάνει κάποιος σχετικός με το αντικείμενο (πχ κάποιος ηλεκτρολόγος). Αφού τελειώσει το calibration του arduino, μένει να δούμε πως θα ταιριάξει με την υπόλοιπη πλατφόρμα. Bonus track: Ο χώρος που έγινε η ανάπτυξη και τα τεστ. Η μόνη ταλαιπωρία ήταν να κάθομαι με αυτή τη ζέστη δίπλα από την σόμπα και να έχω συνέχεια το νου μου μην ακουμπήσω κανένα λάθος καλώδιο και δω αστράκια (ή τον Χριστό φαντάρο όπως πολύ σωστά πρόσθεσε και ο Seafalco). Εγκατάσταση του Server Εφόσον τελειώσει η κατασκευή και το calibration της συσκευής, πρέπει να εγκατασταθούν τα προγράμματα έτσι ώστε να μπορείτε να δείτε την κατανάλωσή σας σε ένα web interface. Επομένως πρέπει να εγκατασταθούν ο server και το web interface και να δοκιμαστούν. Ο server και το web interface καλό είναι να βρίσκονται στον ίδιο υπολογιστή αν και δεν είναι και απαραίτητο, όμως θα θεωρήσω ότι βρίσκονται μαζί, μιας και είναι και το πιο λογικό. O server λοιπόν, θα πρέπει να μαζεύει τα δεδομένα από τον μετρητή, άρα ο μετρητής θα πρέπει να στέλνει τις πληροφορίες στον server. Αυτό γίνεται χρησιμοποιώντας το πρωτόκολλο του UDP και μια συγκεκριμένη πόρτα την οποία την καθορίζετε εσείς και την προγραμματίζετε στον μετρητή και στον server. Στην συνέχεια ο server καταχωρεί τις πληροφορίες σε μια βάση δεδομένων, στην οποία φυσικά θα πρέπει να έχει πρόσβαση και στην συνέχεια το web interface τραβάει τα δεδομένα από την βάση δεδομένων, στην οποία έχει και αυτό πρόσβαση. Το θέμα της πρόσβασης το επισημαίνω ειδικά για Linux συστήματα, που είναι απαραίτητο για την σωστή λειτουργία. Για το σενάριό μας ο μετρητής θα έχει την IP 192.168.1.7 (την οποία έστω ότι την έχει δώσει ο router μέσω DHP) και ο server την IP 192.168.1.5. Οπότε προγραμματίζουμε την IP του server στον μετρητή μέσω του USB (όπως αναφέραμε στην προηγούμενη σελίδα) στέλνοντάς του την εντολή AP_SERVER=192.168.1.7 Στην συνέχεια προγραμματίζουμε την UDP πόρτα από την οποία θα αποστέλλει τα δεδομένα ο μετρητής με την εντολή AP_SERVER_PORT=7710 Για UDP πόρτα μπορείτε να επιλέξετε όποια διεύθυνση θέλετε, αρκεί να μην χρησιμοποιείται ήδη από το σύστημα. Στο τέλος γράφετε την εντολή SAVE ώστε να αποθηκεύσει ο μετρητής τις ρυθμίσεις και να τις ανακτά κάθε φορά που ξεκινά. Τελειώνοντας με τον προγραμματισμό του μετρητή εγκαθιστούμε στον υπολογιστή που θα χρησιμοποιηθεί σαν server τα απαραίτητα προγράμματα. Πριν όμως περάσουμε στην εγκατάσταση θα πρέπει να κατεβάσετε αυτό το αρχείο το οποίο περιέχει όλα τα προγράμματα που θα χρειαστείτε, τον πηγαίο κώδικα και άλλα. Energy_meter_v1.0.zip H διάταξη των φακέλων στο zip αυτό, είναι η παρακάτω: executable source code Μέσα στον φάκελο executable θα βρείτε όλα τα precompiled αρχεία του κώδικα από τα προγράμματα που θα χρειαστείτε και θα εξηγήσουμε παρακάτω. Στον φάκελο source code θα βρείτε τους φακέλους με τον πηγαίο κώδικα για όλες τις εφαρμογές, οι οποίες είναι οι παρακάτω: ard_energy_meter database_cvs_create energy_meter_server energy_meter_tester energy_meter_web arduino IDETDM-GCC Εγκατάσταση στο raspberry εδώ Έπειτα με το puty, θα πρέπει να δώσετε δικαιώματα στο αρχείο energy_meter ώστε να μπορεί να εκτελείται. Για να το κάνετε αυτό θα πρέπει να βρίσκεστε ήδη μέσα στον φάκελο και γράψετε την εντολή: $ chmod +x energy_meter Οπότε το αποτέλεσμα θα πρέπει να είναι αυτό: Στην συνέχεια με το WinSCP δημιουργήστε ένα φάκελο που ονομάζεται power μέσα στο /var/www και αντιγράψτε εκεί μέσα όλα τα αρχεία του φακέλου energy_meter_web εκεί μέσα, όπως φαίνεται και στην παρακάτω εικόνα Τώρα στο putty θα πρέπει να αλλάξετε τα δικαιώματα του φακέλου ώστε να μπορεί η php να γράφει στην βάση δεδομένων και να προσθέσετε τον χρήστη pi στο group του www-data, οπότε γράφετε τις παρακάτω εντολές: $ sudo chown www-data:www-data -R /var/www/power/ $ sudo usermod -a -G www-data pi $ sudo chmod 774 -R /var/www/power/power.db Επίσης στο putty και ενώ είστε μέσα στο /home/rpi/energy_meter, κάντε edit το αρχείο config.txt με την εντολή $ nano config.txt και αλλάξτε τις παραμέτρους με τις σωστές ανά περίπτωση. Στο παράδειγμά μας δηλαδή θα είναι οι παρακάτω. Σώστε το αρχείο πατώντας Ctrl+O και enter και βγείτε από το nano με Ctrl+X. Όπως βλέπουμε στο db_fname δώσαμε την τοποθεσία του αρχείου της βάσης δεδομένων που βρίσκεται μέσα στον φάκελο του /var/www/power, στο udp_listen_ip δώσαμε την IP του ίδιου του Raspberry (προσοχή σε αυτό μην μπερδευτείτε!) και στο udp_listen_port την πόρτα 7710. Οπότε ο server ακούει στην IP 192.168.1.5 (δηλαδή την δική του IP) και στην πόρτα 7710 για εισερχόμενα UDP δεδομένα. Για να τρέξετε τον server γράψτε στο putty ενώ βρίσκεστε στον φάκελο /home/pi/energy_meter την εντολή $ ./energy_meter Οπότε θα δείτε το παρακάτω Αυτό σημαίνει ότι ο server τρέχει και μαζεύει δεδομένα! Για να τεστάρετε τώρα τον web server ανοίξτε τον browser σας σε ένα PC και δώστε την διεύθυνση http://192.168.1.5/power, οπότε θα εμφανιστεί η παρακάτω σελίδα. Το τελευταίο βήμα είναι τα τεστάρετε την λειτουργία του server με το web interface γι' αυτό από το PC σας ανοίξτε ένα command prompt μέσα στον φάκελο του executables/tester και γράψτε την παρακάτω εντολή energy_meter_tester.exe 192.168.1.5 7710 οπότε θα εμφανιστεί το παρακάτω Στην συνέχεια πατήστε μια φορά το enter, περιμένετε 10 δευτερόλεπτα και πατήστε το άλλη μία φορά. Έχοντας ανοιχτά τα δυο παράθυρα του cmd και του putty θα πρέπει δείτε τα παρακάτω Αυτό σημαίνει ότι ο tester έστειλε δυο πακέτα στον server και ο server τα έλαβε και αφού έλεγξε ότι είναι σωστά τα δεδομένα (μήκος, checksum κλπ), τα έσωσε στην βάση δεδομένων. Οπότε το επόμενο βήμα είναι να πάμε ξανά στον browser και να δούμε τι έχει γίνει. Ανοίξτε ξανά την διεύθυνση http://192.168.1.5/power ή κάντε refresh την σελίδα αν είναι ήδη ανοικτή και στην συνέχεια πηγαίνετε κάτω στο πεδίο της περιόδου κατανάλωσης και βάλτε την σημερινή ημερομηνία και πατήστε update, οπότε θα εμφανιστούν τα δυο δεδομένα που αποστείλατε. Έχοντας λίγα δεδομένα δεν έχει και πολύ ενδιαφέρον, οπότε αν θέλετε να παίξετε λίγο με το web interface μπορείτε να χρησιμοποιήσετε το αρχείο demo_dbase.db. Αφού το μετονομάσετε σε dbase.db, το βάλετε στην θέση του προηγούμενου και δώσετε πάλι τα ίδια δικαιώματα όπως πριν ανοίξτε ξανά το web interface και δείτε τους χειρισμούς. Οι χειρισμοί θα αναλυθούν στην επόμενη σελίδα. Επίσης μπορείτε να φτιάξετε δικά σας δεδομένα με το εργαλείο που λέγεται database_cvs_create.exe και βρίσκεται μέσα στο executables/tester. Επίσης θα βρείτε και τον κώδικα του εργαλείου στον φάκελο source code/database_cvs_create. Για να το χρησιμοποιήσετε θα πρέπει πρώτα τα πάτε σε αυτό το site και να γράψετε την ημερομηνία από την οποία θέλετε να ξεκινούν τα δεδομένα, οπότε θα σας επιστρέψει έναν αριθμό ο οποίος λέγεται timestamp. Timestamp στο unix είναι ο χρόνος που έχει περάσει από τις 1/1/1970 μέχρι τώρα με την μορφή των δευτερολέπτων, οπότε ο αριθμός 1443201874 είναι στο UTC 09/25/2015 - 5:24pm και στο GMT 09/25/2015 - 8:24pm καθώς η Ελλάδα αυτή τη στιγμή είναι 3 ώρες μπροστά. Αφού πάρετε το timestamp για την ημερομηνία που θέλετε, τότε τρέχετε το πρόγραμμα με την παρακάτω εντολή database_cvs_create.exe 1443201874 5000 10 Αυτοί οι αριθμοί σημαίνουν: 1443201874, το timestamp δηλαδή η ημερομηνία που θα ξεκινήσουν τα δεδομένα 5000, ο αριθμός των μετρήσεων που θα αποθηκευτούν στην βάση (μπορείτε να βάλετε όσα θέλετε) 10, το διάστημα σε δευτερόλεπτα ανάμεσα από κάθε μέτρηση Αφού πατήσετε enter τότε στον φάκελο θα εμφανιστεί ένα αρχείο που λέγεται demo_consumption_data.csv και το οποίο θα περιέχει ψεύτικες random μετρήσεις από ένα energy meter. Υπόψη ότι κάθε φορά που το τρέχετε οι μετρήσεις θα είναι διαφορετικές. Το αρχείο αυτό θα πρέπει στην συνέχεια να το κάνετε import στην βάση δεδομένων, χρησιμοποιώντας το sqliteman το οποίο μπορείτε να κατεβάσετε από εδώ. Στην συνέχεια ανοίξτε την βάση δεδομένων με το sqliteman και πατήστε από το μενού Database -> Import Table Data, διαλέξτε το tbl_values για τον πίνακα στον οποίο θα κάνετε Import τα δεδομένα, πατήστε το Search και διαλέξτε το αρχείο demo_consumption_data.csv που δημιουργήσατε, διαλέξτε το semicolon για separator και πατήσε ΟΚ. Έτσι θα γίνουν import τα δεδομένα στην βάση, οπότε όταν πατήσετε στην αριστερή στήλη στο Main -> Tables -> tbl_values θα δείτε χιλιάδες δεδομένα που είναι ψευδο-random μετρήσεις. Έτσι αντικαθιστώντας την νέα βάση δεδομένων στο Raspberry θα έχετε χιλιάδες δεδομένα για να πειραματιστείτε με το web interface. Όποιος θέλει μπορεί να ρίξει μια ματιά και στον κώδικα των εργαλείων αυτών και να τον αλλάξει. Ουσιαστικά τα εργαλεία αυτά τα έφτιαξα για να μπορέσω να κάνω δοκιμές μιας και ήταν αδύνατο να μαζέψω τόσες πολλές μετρήσεις σε τόσο μικρό χρονικό διάστημα. Τέλος θα χρειαστεί να τρέχετε τον UDP server σαν service έτσι ώστε να ξεκινά κάθε φορά που ανοίγετε το raspberry. Για να το κάνετε αυτό κάντε copy με το WinSCP το αρχείο energy_meterd από τον φάκελο executables/rpi service στον φάκελο /etc/init.d και στην συνέχεια γράψτε τις παρακάτω εντολές στο putty. $ cd /etc/init.d $ sudo apt-get update $ sudo apt-get install tmux $ sudo chmod +x energy_meterd $ sudo chmod 755 energy_meterd $ sudo update-rc.d energy_meterd defaults $ service energy_meterd start Με τον τρόπο αυτό κάνετε εγκατάσταση του server σαν service. Οπότε αν τρέξετε την εντολή: $ ps -A | grep energy_ θα πρέπει να δείτε το process του energy meter να τρέχει. Τέλος δοκιμάστε ότι τρέχει και στην επανεκκίνηση κάνοντας reboot και 10 περίπου δευτερόλεπτα μετά την ολοκλήρωση της επανεκκίνησης, τρέξτε πάλι την προηγούμενη εντολή. Θα πρέπει πάλι να δείτε μια απάντηση περίπου σαν αυτή 5142 pts/1 00:00:00 energy_meter Η διαδικασία αυτή ισχύει περίπου ίδια και για τις επόμενες πλατφόρμες, οπότε δεν θα αναφέρω ξανά όλα τα βήματα. Σκοπός του άρθρου είναι να χρησιμοποιηθεί ένα raspberry λόγο οικονομίας κατανάλωσης. Εγκατάσταση σε Linux Εδώ ισχύουν σχεδόν όλα όσα περιγράψαμε στην εγκατάσταση του raspberry. H κύρια διαφορά είναι ότι αν ο υπολογιστής είναι ισχυρός τότε αντί για τον lighttpd μπορείτε να χρησιμοποιήσετε τον apache ή αν έχετε ήδη εγκατεστημένο έναν άλλο web server, τότε θα πρέπει να εγκαταστήσετε και την υποστήριξη για PHP και sqlite. Αυτό ανάλογα με το λειτουργικό linux που έχετε διαφέρει σαν διαδικασία, οπότε θα πρέπει να ψάξετε πως θα το κάνετε αυτό στο internet. Το ίδιο ισχύει και για την εγκατάσταση του service. Λογικά θα μπορέσετε να χρησιμοποιήσετε το ίδιο αρχείο energy_meterd όπως και στο raspberry, αλλά μπορεί όμως το λειτουργικό σας να έχει άλλη διαδικασία για την εγκατάσταση των services οπότε πάλι θα πρέπει να το κοιτάξετε στο internet. Μέσα στον φάκελο των executable/ubuntu_x86_32 υπάρχει ένα pre-compiled αρχείο του server που μπορείτε να χρησιμοποιήσετε σε κάποια έκδοση ubuntu, kubuntu, xubuntu, lubuntu κλπ, αρκεί να είναι 32bit. Σε διαφορετική περίπτωση θα πρέπει να κάνετε compile τον κώδικα και να χρησιμοποιήσετε το executable ανάλογα με την πλατφόρμα σας. Εγκατάσταση σε Windows Η εγκατάσταση του server στα windows είναι λίγο πιο απλή διαδικασία και το μόνο που χρειάζεται να κάνετε είναι να εγκαταστήσετε έναν web server όπως o WampServer. Αφού κάνετε την εγκατάσταση, πηγαίνετε στον φάκελο C:\wamp\www και δημιουργήστε έναν φάκελο με το όνομα power και κάντε copy όλα τα αρχεία που βρίσκονται μέσα στον φάκελο source code\energy_meter_web. Ξεκινήστε το WampServer και στον browser σας (αν είστε στο ίδιο PC) γράψτε την διεύθυνση http://127.0.0.1/power και θα πρέπει να δείτε το web interface, το οποίο ακόμα φυσικά δεν είναι λειτουργικό. Στην συνέχεια δημιουργείστε ένα φάκελο κάπου στον σκληρό σας δίσκο, πχ C:\Energy Meter Server\ και κάντε εκεί μέσα copy το αρχείο energy_meter.exe και config.txt που βρίσκεται στον φάκελο executables\windows_x86_32. Αν θέλετε μπορείτε να κάνετε και drag&drop το exe μέσα στον φάκελο Startup του Start menu (τι; δεν έχετε start menu? Χαχα) των windows, ώστε να τρέχει αυτόματα κάθε φορά με την επανεκκίνηση. Έπειτα ανοίξτε το αρχείο config.txt και συμπληρώστε τις σωστές παραμέτρους. db_fname=C:\wamp\www\power\power.db upd_listen_ip=192.168.1.5 udp_listen_port=7710 Υπόψη πως στο udp_listen_ip θα πρέπει να βάλετε την IP του PC σας που κάνετε εγκατάσταση το πρόγραμμα, απλά έχουμε θεωρήσει ότι στο παράδειγμά μας είναι ο 192.168.1.5. Αφού τα κάνετε αυτά και ενώ τρέχει ο wampserver και o Energy Meter Server, τρέξτε το energy_meter_tester.exe με τις εξής παραμέτρους για δοκιμάσετε την σωστή λειτουγία energy_meter_tester.exe 192.168.1.15 7710 Στην επόμενη εικόνα φαίνεται η λειτουργία σε windows Εγκατάσταση σε άλλες πλατφόρμες. Όπως θα πρέπει να έχετε καταλάβει ήδη, το πρόγραμμα του server μπορεί να εγκατασταθεί σε οποιαδήποτε συσκευή υποστηρίζει linux. Επομένως μέσα στις συσκευές αυτές συμπεριλαμβάνονται και κάποιοι wifi routers, NAS και γενικά οποιαδήποτε συσκευή με linux. Απλά για να γίνει αυτό χρειάζεται το λειτουργικό σύστημα είτε να έχει προ-εγκατεστημένες κάποιες βιβλιοθήκες, είτε να μπορείτε να τις εγκαταστήσετε με κάποιο τρόπο εσείς. Επίσης προϋποθέτει η συσκευή αυτή να έχει προ-εγκατεστημένα τα build tools ώστε να μπορείτε να κάνετε compile τον κώδικα ή να εγκαταστήσετε σε ένα linux PC τα λεγόμενα cross-building tools που αφορούν την στοχευμένη πλατφόρμα, ώστε να κάνετε εσείς cross-compile τον κώδικα και στην συνέχεια να περάσετε στην συσκευή απ' ευθείας το executable. Όπως κάναμε και στο παράδειγμα του raspberry που χρησιμοποιήσαμε το pre-built binary το οποίο φτιάχτηκε με τα linaro cross-tools σε ένα κανονικό linux_x86_64. Σε περίπτωση που η συσκευή έχει προ-εγκατεστημένα τα εργαλεία για το compilation του κώδικα τότε κάντε copy τον φακελο source code/src σε ένα φάκελο στην συσκευή πχ /tmp και στην συνέχεια για να το εγκαταστήσετε γράψτε τις παρακάτω εντολές. $ make $ make install Με τις εντολές αυτές θα γίνει compile ο κώδικας και θα δημιουργηθεί ένα executable αρχείο για την αρχιτεκτονική της συσκευής σας και ο energy meter server θα εγκατασταθεί στον φάκελο ~/energy_meter_server. Από εκεί και πέρα θα πρέπει να κάνετε εσείς την εγκατάσταση του web server (αν δεν υπάρχει), του web interface και να δηλώσετε τον energy meter server ως service. Για να κάνετε απεγκατάσταση τρέξτε την εντολή $make remove ή απλά σβήστε τον φάκελο ~/energy_meter_server. Δυστυχώς το άρθρο αυτό δεν έχει σκοπό στο να δείξει με λεπτομέρεια πως γίνεται η εγκατάσταση όλων σε όλα τα συστήματα, μιας και απαιτεί πολύ χρόνο και είναι από μόνο του ένας ολόκληρος κόσμος. Επομένως η περιγραφή των εγκαταστάσεων τελειώνει εδώ και είναι ώρα να δούμε πως, αφού έχουμε τελειώσει με όλα τα προηγούμενα βήματα, μπορούμε να χρησιμοποιήσουμε το web interface για να βλέπουμε την κατανάλωση μας και να βγάζουμε συμπεράσματα από τα γραφήματα αυτά. Ο πρώτος φάκελος είναι ο πηγαίος κώδικας για το arduino, τον οποίο κάνετε compile και γράφετε στο arduino με το . O επόμενος είναι μια εφαρμογή για την δημιουργία δεδομένων για τεστάρισμα της βάσης δεδομένων και ακολουθεί ο κώδικας του server του tester (που τεστάρει τον server) και το web interface. Τα τελευταία θα χρειαστείτε απλά έναν gcc compiler για C++, που στο Linux θα βρείτε στα repos του, ενώ για windows μπορείτε να χρησιμοποιήσετε την MinGW έκδοση του . Για οικονομία χρόνου θα θεωρήσω πως γνωρίζετε πως να χρησιμοποιείτε το WinSCP και το putty για να συνδεθείτε στο raspberry pi και τις βασικές εντολές του linux. Συνδεθείτε λοιπόν στο Raspberry Pi με το WinSCP και το putty ταυτόχρονα. Αρχικά θα πρέπει να εγκαταστήσετε έναν web server με υποστήριξη για PHP και sqlite, αν δεν έχετε ήδη. Για να το κάνετε αυτό ακολουθείστε τις οδηγίες , μιας και τα λέει καλύτερα από εμένα. Μετά από αυτή τη διαδικασία θα έχετε ένα πλήρη λειτουργικό web server στο Raspberry σας.Με το WinSCP φτιάχνετε έναν φάκελο στο /home/pi ο οποίος ονομάζεται energy_meter, οπότε το path θα είναι /home/pi/energy_meter και στην συνέχεια αντιγράφετε τα περιεχόμενα του φακέλου executable/rpi από τα αρχεία που κατεβάσατε εκεί μέσα. Το αποτέλεσμα θα πρέπει να είναι αυτό που φαίνεται στην εικόνα. Λειτουργία web interface Φτάνοντας στο σημείο αυτό θα πρέπει να έχετε ένα πλήρως λειτουργικό μετρητή ενέργειας με το arduino και το emonTx shield, και ένα server ο οποίος δέχεται τις μετρήσεις από τον μετρητή, τις σώζει στην βάση δεδομένων και μπορείτε να συνδεθείτε στο web interface για να δείτε τις μετρήσεις. Το web interface επέλεξα (όπως συνηθίζω) να το κάνω πολύ απλό, χωρίς πολλές φανφάρες μενού κλπ, τα οποία θεωρώ άχρηστα και κουραστικά, ιδίως για τέτοιου είδους εφαρμογές. Καλό είναι ένα user interface να είναι απλό και να κάνει απλά την δουλειά του, χωρίς πολλά εφέ και μενού και να είναι λειτουργικό. Άλλοι ωστόσο μπορεί να έχουν άλλη άποψη. Επομένως είναι ώρα να δούμε πως λειτουργεί το web interface και τι δυνατότητες έχει. Αν υποθέσουμε ότι ο server είναι στην διεύθυνση 192.168.1.5, τότε συνδεόμαστε στην IP του με έναν οποιοδήποτε browser (πχ firefox). Για να συνδεθούμε γράφουμε τον σύνδεσμο http://192.168.1.5/power και ανοίγει η παρακάτω σελίδα, στην οποία έχω σημειώσει τα κρίσιμα πεδία. Από τα κουμπιά αυτά επιλέγετε την χρονική περίοδο που θέλετε να δείχνει ο άξονας του χρόνου x. Αυτή η περίοδος μπορεί να είναι μία ημέρα, μία εβδομάδα, ένας μήνας ή ένας χρόνος. Το πεδίου που ζωγραφίζονται οι καμπύλες που προκύπτουν από τα δεδομένα που είναι αποθηκευμένα μέσα στην βάση δεδομένων. Η μέτρηση την οποία θέλουμε να απεικονίσουμε, η οποία μπορεί να είναι είτε το ρεύμα Irms ανά φάση, είτε η πραγματική κατανάλωση σε W ανά φάση, είτε η φαινόμενη ισχύς ανά φάση ή τέλος ο συντελεστής ισχύος ανά φάση. Η αρχή της περιόδου της κατανάλωσης. Το κουμπί που κάνει update το γράφημα (2) όταν αλλάξει η ημερομηνία της αρχής της περιόδου (4). Κουμπί για τα options του γραφήματος, όπως αποθήκευση εικόνας. Έστω τώρα ότι έχουν δημιουργηθεί αρκετά δεδομένα από τον μετρητή ή έχετε δημιουργήσει μόνοι σας κάποια δεδομένα με το database_cvs_create. Στο παράδειγμα μας έχω δημιουργήσει αρκετά random δεδομένα την περίοδο από 24/2/2015 μέχρι 4/6/2015. Οπότε για να επιλεχτεί η ημερομηνία πατώντας στο πεδίο (4) ανοίγει ένα ημερολόγιο στο οποίο είναι εύκολη η επιλογή της αρχικής ημερομηνίας, όπως φαίνεται και στην παρακάτω εικόνα. Ύστερα επιλέγοντας “Ημέρα” από το (1), “Πραγματική W” από το (3) και πατώντας το κουμπί “Update” (4), απεικονίζονται τα δεδομένα που έρχονται από τον server, όπως φαίνεται και παρακάτω. Στο γράφημα βλέπουμε την στιγμιαία κατανάλωση ανά φάση και ανά χρονική περίοδο κατά την διάρκεια της ημέρας. Αν πάμε το ποντίκι σε οποιοδήποτε σημείο της καμπύλης Αν θέλουμε μπορούμε να ζουμάρουμε σε μια χρονική περίοδο μέσα στην ημέρα, πηγαίνουμε το ποντίκι στο σημείο που θέλουμε, κάνουμε κλικ πάνω στο γράφημα στο σημείο αυτό και με πατημένο το κουμπί του mouse κάνουμε drag μέχρι το σημείο της ζητούμενης χρονικής στιγμής που λήγει η περίοδος που θέλουμε να δούμε σε μεγέθυνση. Αυτό φαίνεται στην παρακάτω εικόνα. Όταν κάνετε zoom εμφανίζονται στην πάνω δεξιά γωνία του γραφήματος 2 νέοι χειρισμοί, που είναι το pan και το reset. Πατώντας το pan μπορείτε να σκρολάρετε δεξιά και αριστερά στο γράφημα, ενώ με το reset επανέρχεται η γραφική παράσταση στην αρχική της κατάσταση. Τα κουμπιά αυτά φαίνονται και στην παρακάτω εικόνα Όπως αναφέραμε στο web interface μπορείτε να δείτε την τιμή και την ώρα που εστάλει αυτή, πηγαίνοντας σε οποιοδήποτε σημείο της καμπύλης, οποιασδήποτε φάσης. Υπενθυμίζω εδώ πως η τιμή αυτή δεν είναι η στιγμιαία, αλλά ο μέσος όρος των τιμών από την προηγούμενη μέτρηση. Για να δείτε άλλες παραμέτρους του μετρητή πατήστε όποιο κουμπί θέλετε από το (3) και θα φορτωθούν οι τιμές από την βάση δεδομένων γι' αυτή την παράμετρο. Τέλος από το (1) μπορείτε να δείτε γραφικές παραστάσεις από όποια παράμετρο θέλετε μέχρι και ένα χρόνο μπροστά από την αρχική ημερομηνία που επιλέξετε στο (4). Παρακάτω βλέπουμε κάποιες άλλες γραφικές παραστάσεις από τα ίδια δεδομένα. Επίλογος Για τον επίλογο δεν έχω να πω και πολλά, αλλά θα πω τα σημαντικά. Καταρχήν ΠΡΟΣΟΧΗ!!! Κατά δεύτερον, πάλι ΠΡΟΣΟΧΗ. Όποιος θα ασχοληθεί με αυτό το project θα πρέπει να είναι πολύ προσεκτικός σε κάθε βήμα που έχει να κάνει με την τάση του δικτύου. Είναι λίγο δύσκολο αυτό το project, όχι όσον αφορά την υλοποίηση, αλλά την προσοχή με την τάση του δικτύου. Επομένως δεν κάνετε τίποτα, αν δεν είστε σίγουροι ή αν δεν έχετε γνώσεις. Μπορείτε να το κάνετε σε συνεργασία με κάποιον που ξέρει από ηλεκτρολογικά και θα σας καθοδηγεί. Κατά τα άλλα είναι ένα ενδιαφέρον project και στο τέλος θα μπορείτε να βλέπετε την κατανάλωση του σπιτιού σας με έναν σύγχρονο τρόπο. Ελπίζω να το υλοποιήσει κάποιος και όποιος το κάνει και κάνει κάποιες αλλαγές σε οποιοδήποτε κώδικα, καλό θα ήταν να τα ποστάρει και εδώ ώστε να επωφεληθούν και άλλοι. Τέλος, ευχαριστώ και δημόσια τον @Seafalco για το editing, για το κουράγιο του και τον χρόνο που διέθεσε να διορθώσει το κείμενο, ώστε να φτάσει σε αυτή την τελική μορφή. Η βοήθεια του στο editing, σε όλα τα projects ήταν σημαντική! Καλό κουράγιο με όσους ασχοληθούν!
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter
-
From the album: DIY 3: Energy meter