Arduino, συσκευές εισόδου και έλεγχος μέσω φωνής

Έλεγχος Arduino και συσκευές εισόδου

Σήμερα θέλω να αναφερθώ σε συσκευές εισόδου που μπορούμε να συνδέσουμε σε κάποια Development Board όπως το Arduino, και να τις χρησιμοποιήσουμε σε Projects μας.

Γιατί τις συσκευές στο σπίτι μας, -εκτός από την εφαρμογή στο κινητό μας- θέλουμε να τις ελέγχουμε και με άλλους τρόπους.

Επίσης είναι αφορμή να δείξω ότι η Android εφαρμογή μπορεί να λειτουργήσει συνδυαστικά/συμπληρωματικά με διακόπτες/κουμπιά, με διάφορα ασύρματα χειριστήρια (π.χ. IR), με NFC Tags, με φωνητικές εντολές, με αισθητήρες κτλ

Στο παρακάτω βίντεο δείχνω ενδεικτικά κάποιες από αυτές τις λειτουργίες που έχω υλοποιήσει:

Επίσης μου δίνεται η αφορμή να αναφέρω ότι όταν ενσωματώνουμε κάποιο Relay για έλεγχο της τροφοδοσίας κάποιας συσκευής από το Arduino, δεν είναι απαραίτητο να "καταργήσουμε" την διακόπτη της. Μπορούμε να χρησιμοποιήσουμε και τον ίδιο διακόπτη (ή και κάποιον άλλο), τον οποίο θα χρησιμοποιήσουμε και αυτόν μέσω του Arduino. Προσωπικά έχω ενσωματώσει ένα 4x4 Keypad στο δικό μου project, χωρίς φυσικά αυτό να σημαίνει ότι δεν μπορείτε να τους έχετε ξεχωριστά και "διάσπαρτους" στο σπίτι.

Κάποια ακόμα points: Το Arduino έχει αμέτρητες πολύ χρήσιμες βιβλιοθήκες για να μας διευκολύνουν στην υλοποίηση ενός Project. Το να χρησιμοποιήσεις μία έτοιμη βιβλιοθήκη σου αφαιρεί ένα μέρος του "ελέγχου" στο Project, αλλά σου γλιτώνει πολλές (πολλές πολλές) εργατοώρες. Σε ένα "πολύπλοκο" project, όπως αυτό του Smart Home, είναι αρκετά εύκολο να πει κανείς "τα 2kb της SRAM / τα 32k της Flash του Arduino δεν μου αρκούν", όταν σε αυτό έχεις ενσωματώσει πολλές βιβλιοθήκες για διάφορες λειτουργίες.

Arduino not enough Memory

Μία "λύση" είναι φυσικά το Arduino Mega, με 8kb SRAM και 256k Flash. Το να πετάς όμως σε ένα project περισσότερους πόρους δεν είναι η βέλτιστη λύση. Ή αλλιώς, το "πιο δυνατό" hardware πρέπει να είναι η "τελευταία" λύση, αφού έχεις δοκιμάσει να κάνεις optimization στον κώδικά σου. Πολλές φορές, επίσης, το optimization περιλαμβάνει απλά το να ανοίξεις μία βιβλιοθήκη με έναν text editor, και να αλλάξεις κάποιες παραμέτρους. Σε ένα ενδεικτικό παράδειγμα, αλλάξαμε κάποιες παραμέτρους στο IRremote.h, στην ουσία ενεργοποιώντας μόνο τα protocols που χρησιμοποιούμε στο project μας (SEND_RC5 και DECODE_NEC).

Arduino IR Library

Επίσης αλλάξαμε και το RAWBUF στο IRremoteInt.h (από 101 σε 71 -μιας και δεν κάνουμε decode κάποιας πολύ μεγάλης κυμματομορφής) και το sketch μας "έπεσε", από 81% στο Program Storage Space σε 66%. Αντίστοιχα και η SRAM "έπεσε" από 59% σε 56%. Και αυτό με λίγα δευτερόλεπτα "δουλειάς".

Arduino IR Library

Τέλος, φυσικά, όσον αφορά την βελτιστοποίηση της μνήμης και το επίσημο Documentation προσέφερει κάποια χρήσιμα tips τα οποία πρέπει να έχετε υπ' όψην κατά την υλοποίηση ενός project. Από εκεί και πέρα ο "μεγαλύτερος" περιορισμός που θα συναντήσετε, είναι η φαντασία σας. Τι άλλο να φτιάξουμε, λοιπόν;

Arduino Input Devices

aByte