Smart Kids – Smart Home

Smart Kids – Smart Home

Smart—Home

Συνοπτική περιγραφή της εργασίας

Η εργασία που μελετήσαμε και δημιουργήσαμε μαζί με την ομάδα, στα πλαίσια του 5ου Πανελληνίου Διαγωνισμού Ρομποτικής Ανοικτού Κώδικα
με θέμα την πράσινη ανάπτυξη, είναι ένα οικολογικό σπίτι, το οποίο λειτουργεί με ενέργεια από τον ήλιο.
Το σπιτάκι κατασκευάστηκε από χονδρό χαρτόνι και διαθέτει ένα ηλιακό πάνελ 24V, ένα Solar battery charger και μία επαναφορτιζόμενη μπαταρία 12V.

Η λειτουργία του είναι απλή. Το ηλιακό πάνελ στην οροφή συλλέγει την ηλιακή ενέργεια και την μετατρέπει σε ηλεκτρική (συνεχές ρεύμα). Ένα Solar battery charger, σε σύνδεση με το πάνελ, φορτίζει τη μπαταρία για να παρέχει ηλεκτρική ενέργεια στο σπίτι, όταν δεν θα υπάρχει ηλιοφάνεια. Δύο σετ από φωτοαντιστάσεις που φωτίζονται από δύο δέσμες λέιζερ ελέγχονται ως προς την μεταβολή της αντίστασης τους από τον μικροκοντρόλερ Arduino UNO ο οποίος έχει προγραμματιστεί για να ελέγχει την είσοδο και την έξοδο του σπιτιού. Για εκπαιδευτικούς λόγους, τοποθετήσαμε στην πρόσοψη του οικίσκου ένα LCD Display (οθόνη) για να καταγράφει τα άτομα που εισέρχονται και εξέρχονται. Όταν δεν είναι κανείς στο σπίτι, τα φώτα θα είναι όλα σβηστά. Με την είσοδο ενός ή περισσοτέρων επισκεπτών, θα ανάβει το φως και θα παραμένει αναμμένο έως ότου εξέλθουν όλα τα άτομα. Η οθόνη (LCD) θα καταγράφει τον αριθμό των ατόμων που εισέρχονται και εξέρχονται. Μόλις εξέλθουν όλα τα άτομα από το σπίτι, τότε όλα τα φώτα θα σβήσουν.

Οι μαθητές διδάχθηκαν τις βασικές γνώσεις προγραμματισμού με την γλώσσα C++ και εξασκήθηκαν με πολλά απλά προγράμματα και στο τέλος έφτιαξαν το τελικό πρόγραμμα για την λειτουργία του σπιτιού.

Το όνομα των ομάδων είναι “Smart Kids”. Στο πρότζεκτ συμμετείχαν οι παρακάτω μαθητές:

  1. Άννα Παρθενίδη
  2. Κωνσταντίνα Λαγογιάννη
  3. Δήμητρα Αβραμίδου
  4. Αναστασία Αβραμίδου
  5. Γαβριήλ Ελευθεριάδης
  6. Βασίλης Δεδούσης
  7. Σπύρος Ντούμας
  8. Γιάννης Νταβιντέσκου
  9. Δημήτρης Τζιμπουράκης
  10. Γιάννης Λανάρας
  11. Γιώργος Πρατσινάκης
  12. Ερρίκος-Σωτήριος Καλαμαράς

Η διεύθυνση στο Github είναι:

https://github.com/Info3838/SensorLab38—Smart—Home/edit/main/README.md

Συντονιστής του έργου: Γιώργος Κατσίμπαλης. Ηλεκτρολόγος Μηχανικός.

Η εργασία αναπτύχθηκε σε επτά (7) φάσεις.

Οι φάσεις που θα ακολουθήσουν είναι οι παρακάτω:

Φάση 1η

Έγινε συζήτηση για την πράσινη οικονομία, την κλιματική αλλαγή και μέσα από αυτήν την συζήτηση, παρουσιάστηκαν διάφορες προτάσεις και ιδέες, για να καταλήξουμε τελικά στην πρόταση για ένα οικολογικό και πράσινο σπίτι.

Φάση 2η

Ξεκινήσαμε με την μελέτη και την σχεδίαση του σπιτιού σε χαρτόνι. Οι μαθητές δούλεψαν με χάρακα και μολύβι, μέτρησαν τις διαστάσεις, έκοψαν κόλλησαν και συναρμολόγησαν το σπιτάκι. Παράλληλα ξεκινήσαμε και το θεωρητικό μέρος, δηλαδή το προγραμματισμό με την γλώσσα C++.

Με τη βοήθεια του εργαστηρίου Sensorlab38, μελετήσαμε μία σειρά από απλά και βασικά προγράμματα με την γλώσσα προγραμματισμού C++, ώστε οι μαθητές να εξοικειωθούν με τον προγραμματισμό και να κατανοήσουν καλύτερα το πρόγραμμα για την λειτουργία του οικολογικού σπιτιού.

SensorLab38

Ενδεικτικά παραθέτουμε το πλέον απλό πρόγραμμα με την C++.

//Με το πρόγραμμα αυτό αναβοσβήνουμε δύο λαμπάκια (LED).

int led1 = 8;                  // Συνδέουμε το LED1 στο pin 8 του Arduino.
int led2 = 9;                  // Συνδέουμε το LED2 στο pin 9 του Arduino.

void setup() 
{                              // Μετά το άνοιγμα της αγκύλη ξεκινάνε οι αναγκαίες δηλώσεις. 
pinMode(led1, OUTPUT);         // Δηλώνουμε ότι το pin 8 του Arduino να είναι σε κατάσταση εξόδου. 
pinMode(led2, OUTPUT);         // Δηλώνουμε ότι το pin 9 του Arduino να είναι σε κατάσταση εξόδου. 
}                              // Κλείνουμε την αγγύλη.

void loop() 
{                              // Μετά το άνοιγμα της αγκύλης τοποθετούμε το κυρίως πρόγραμμα. 
digitalWrite(led1, HIGH);      // Με την εντολή digitalWrite το arduino δίνει 5 Volt στο pin 8 για να ανάψει το Led.
delay(1000);                   // Δίνουμε μια καθυστέριση για ένα δευτερόλεπτο (1000 msec). 
digιtalWrite(led1, LOW);       // Με την εντολή digitalWrite το arduino δίνει 0 Volt στο pin 8 για να σβύσει το Led.
delay(1000);                   // Δίνουμε μια καθυστέριση για ένα δευτερόλεπτο (1000 msec). 
                               
digitalWrite(led2, HIGH);      // Με την εντολή digitalWrite το arduino δίνει 5 Volt στο pin 8 για να ανάψει το Led.
delay(1000);                   // Δίνουμε μια καθυστέριση για ένα δευτερόλεπτο (1000 msec). 
digιtalWrite(led2, LOW);       // Με την εντολή digitalWrite το arduino δίνει 0 Volt στο pin 8 για να σβύσει το Led.
delay(1000);                   // Δίνουμε μια καθυστέριση για ένα δευτερόλεπτο (1000 msec). 
}                              // Κλείνουμε την αγκύλη. Solar-Home.

Μελετήσαμε στην συνέχεια γραμμή προς γραμμή το πρόγραμμα που μας περιγράφει όλες τις λειτουργίες του (Liquist Cristal Display – LCD) (16Χ2) για εκπαιδευτικούς λόγου.

#include <LiquidCrystal_PCF8574.h> // Η βιβλιοθήκη LiquidCrystal_PCF8574.h, μας επιτρέπει επικοινωνία με το LCD. 
#include <Wire.h>                  // Η βιβλιοθήκη Wire.h, μας επιτρέπει την επικοινωνίας του Arduino με τις άλλες μονάδες.

LiquidCrystal_PCF8574 lcd(0x27);   // Θέτουμε το LCD στην διεύθυνση (0χ27) ή (0Χ3F) της μνήμης του Arduino.
int t=800;                         // Ορίζουμε την μεταβλητή του χρόνου t για καθυστέρηση 800 msec.

void setup()
{                                  // Μετά το άνοιγμα της αγκύλη ξεκινάνε οι αναγκαίες δηλώσεις.
Wire.begin();                      // Δηλώνουμε ότι ξεκινάει η επικοινωνία του Arduino με το LCD. 
Wire.beginTransmission(0x27);      // Δηλώνουμε την διεύθυνση της μνήμης του LCD ότι είναι η (0Χ27) ή (0Χ3F) .
lcd.begin(16, 2);                  // Δηλώνουμε ότι το LCD που χρησιμοποιούμε, έχει 16 στήλες και 2 σειρές. }

void loop()
{                                 // Μετά το άνοιγμα της αγκύλη ξεκινάει το κυρίως πρόγραμμα μας. 
lcd.setBacklight(255);            // Δίνουμε εντολή να ανάψει το LCD. 
lcd.print("Hello Gays.");         // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec. 
lcd.clear();                      // Δίνουμε εντολή να καθαρίσει η οθόνη του LCD.
lcd.print("Let us start to ");    // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec.
lcd.setCursor(0, 1);              // Δίνουμε εντολή για να ορίσουμε τον κέρσορα στην στήλη 0 και στην γραμμή 1. 
lcd.print("program the LCD ");    // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec. 
lcd.clear();                      // Δίνουμε εντολή να καθαρίσει η οθόνη του LCD.
lcd.print("monitor with I2C");    // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec.
lcd.setCursor(0, 1);              // Δίνουμε εντολή για να ορίσουμε τον κέρσορα στην στήλη 0 και στην γραμμή 1 
lcd.print("communication ");      // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec. 
lcd.clear();                      // Δίνουμε εντολή να καθαρίσει η οθόνη του LCD.
lcd.print("Please attent ");      // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec.
lcd.setCursor(0, 1);              // Δίνουμε εντολή για να ορίσουμε τον κέρσορα στην στήλη 0 και στην γραμμή 1 
lcd.print("carefully. ");         // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec. 
lcd.clear();                      // Δίνουμε εντολή να καθαρίσει η οθόνη του LCD.
lcd.print("Thanks for watch.");   // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(t);                         // Δίνουμε καθυστέρηση 800 msec.
lcd.setCursor(0, 0);              // Δίνουμε εντολή για να ορίσουμε τον κέρσορα στην στήλη 0 και στην γραμμή 0. 
lcd.print("Digilab Education");   // Δίνουμε εντολή να τυπωθεί ό,τι περιέχεται μέσα στα εισαγωγικά. 
delay(5000);                      // Δίνουμε καθυστέρηση 5 sec. 
lcd.setBacklight(0);              // Δίνουμε εντολή για να σβήσει η οθόνη του LCD.
delay(t);                         // Δίνουμε καθυστέρηση 800 msec. 
lcd.clear();                      // Δίνουμε εντολή να καθαρίσει η οθόνη του LCD. 
lcd.setBacklight(255);            // Δίνουμε εντολή να ανάψει το LCD. 
lcd.blink();                      // Δίνουμε εντολή για να αναβοσβήνει ο κέρσορας. 
while(1);                         // Δίνουμε την εντολή (while) για να τερματίσει το πρόγραμμα. }

Φάση 3η

Στη Φάση αυτή προχωρήσαμε με την συναρμολόγηση και ολοκλήρωση της κατασκευής. Συνεχίζεται η διδασκαλία της γλώσσας προγραμματισμού C++

Φάση 4η

Συζήτηση και απόφαση για τα (Πάνελ, adapter, μπαταρία αισθητήρες κ.ά.) που θα απαιτηθούν για την κατασκευή.

Εκτίμηση κόστους υλικών κατασκευής για το Χάρτινο σπιτάκι.
1. Φωτοβολταϊκό Πάνελ 5W          9,90€ 
2. Solar Battery Charger         13.00€ 
3. Μπαταρία επαναφορτηζόμενη 12V  6,00€ 
4. Αrduino UNO                    11,90€ 
5. Breadboard                     3,00€ 
6. Leds 10mm                      0,60€ 
7. Laser Beem                     1,20€ 
8. Photoresistor LDR              1,60€ 
9. Jumper wires Male to Male      3.60€ 
10. Jumper Wires 15cm F/M         3.60€ 
11. LCD 16X2 I2C                  5,90€
12. Συνολικό Κόστος Κατασκευής   54.40€

Το κόστος των παραπάνω υλικών καλύφθηκε από το εργαστήριό μας.

Φάση 5η

Εγκατάσταση των υλικών στο σπίτι και δικτύωση του ηλεκτρονικού και ηλεκτρικού κυκλώματος.

Φάση 6η

Στη συνέχεια προχωράμε στην ολοκλήρωση του προγράμματος με την C++ για να θέσουμε σε λειτουργία το οικολογικό σπίτι.

Παραθέτουμε παρακάτω το ηλεκτρονικό κύκλωμα στην πλακέτα SensorLab38 και το πλήρες πρόγραμμα για το Solar_Home.

Tο τελικό πρόγραμμα λειτουργίας του Smart-Home.

/* Το πρόγραμμα για Smart_Home διδάχθηκε στις ομάδες εργασίας, στo εργαστήριο της εταιρείας InfolabTech σε μαθητές δημοτικού και γυμνασίου

στα πλαίσια του 5ου Πανελλήνιου Διαγωνισμού Ρομποτικής Ανοιχτών Τεχνολογιών στην Εκπαίδευση το ακαδημαϊkό έτος 2022 – 2023 και αναρτήθηκε στο GitHub.

Περιγραφή του προγράμματος για την λειτουργία του ηλεκτρονικού κυκλώματος.

// Στην αρχή του προγράμματος εισάγουμε τις απαραίτητες βιβλιοθήκες.

#include <LiquidCrystal_PCF8574.h>       // Η βιβλιοθήκη LiquidCrystal_PCF8574.h, μας επιτρέπει την επικοινωνία με το LCD. 
#include <Wire.h>                        // Η βιβλιοθήκη Wire.h, μας επιτρέπει την I2C επικοινωνία του Arduino με τις άλλες μονάδες.
LiquidCrystal_PCF8574 lcd(0x27);         // Θέτουμε το LCD στην διεύθυνση (0X27) ή (0Χ3F) της μνήμης του Arduino.

// Θέτουμε τις μεταβλητές του προγράμματος.

int V0  = A0;                            // Η μεταβλητή V0 διαβάζει και αποθηκεύει την τιμή από το pin (θέση Α0) του Arduino. 
int V1  = A1;                            // Η μεταβλητή V1 διαβάζει και αποθηκεύει την τιμή από το pin (θέση Α1) του Arduino. 
int Led_Home = 7;                        // Συνδέουμε το LED της εισόδου του σπιτιού, στο pin (θέση 7) του Arduino. 
int IN  = 1;                             // Δίνουμε την αρχική τιμή (1) στη μεταβλητή ΙΝ (για είδοδο στο σπίτι). 
int OUT = 1;                             // Δίνουμε την αρχική τιμή (1) στη μεταβλητή OUT(για έξοδο από το σπίτι).

void setup()
{                                        // Μετά το άνοιγμα της αγκύλης ξεκινάνε οι αναγκαίες δηλώσεις. 
Wire.begin();                            // Δηλώνουμε ότι ξεκινάει η επικοινωνία του Arduino με το LCD. 
Wire.beginTransmission(0x27);            // Δηλώνουμε την διεύθυνση της μνήμης του LCD ότι είναι η (0x27) ή (0Χ3F).
lcd.begin(16, 2);                        // Δηλώνουμε ότι το LCD που χρησιμοποιούμε, έχει 16 στήλες και 2 σειρές. 
pinMode(Led_Home, OUTPUT);               // Δηλώνουμε ότι το pin 7 που είναι συνδεδεμένο το LED είναι έξοδος. 
pinMode(V0, INPUT);                      // Δηλώνουμε το pin Α0 ως είσοδο. Δηλαδή το Arduino διαβάζει την τιμή που δείνει το Pin A0.
pinMode(V1, INPUT);                      // Δηλώνουμε το pin Α1 ως είσοδο. Δηλαδή το Arduino διαβάζει την τιμή που δείνει το Pin A1.
}                                        // Κλείνουμε την αγκύλη αφού ολοκληρώσαμε τις δηλώσεις.

void loop()
{                                        // Μετά το άνοιγμα της αγκύλης ξεκινάει το κυρίως πρόγραμμα μας.
V1 = analogRead(A1);                     // Η μεταβλητή V1, διαβάζει την τιμή εισόδου από το Pin A1 του Αrduino. 
if (V1<400)                              // Εάν η τιμή που διαβάζει η μεταβλητή από το Pin 1 είναι μικρότερη από 400. 
{                                        // Ανοίγουμε αγκύλη και γράφουμε δύο εντολές. 
lcd.print(IN++);                         // Δίνουμε εντολή να αυξηθεί η τιμή του (ΙΝ) κατά ένα και να εμφανίζεται στο LCD μας. 
delay(1000);                             // Δίνουμε εντολή να καθυστέρησει για ένα δευτερόλεπτο. 
}                                        // Και κλείνουμε την αγκύλη.
lcd.setBacklight(255);                   // Δίνουμε εντολή να ανάψει το LCD. 
lcd.setCursor(0, 1);                     // Θέτουμε τον κέρσορα του LCD στην στήλη 0 και στη γραμμή 1.
lcd.print("Person OUT -");               // Δίνουμε εντολή να τυπωθεί στο LCD ό,τι είναι μεσα στα εισαγωγικά.
V0 = analogRead(A0);                     // Η μεταβλητή V0, διαβάζει την τιμή εισόδου από το Pin A0 του Αrduino. 
if (V0<400)                              // Εάν η τιμή που μας διαβάζει η μεταβλητή από το pin Α0 είναι μικρότερη από το 400? 
{                                        // Ανοίγουμε την αγκύλη και γράφουμε τρεις εντολές. 
lcd.print(OUT++);                        // Αυξάνεται η τιμή του (ΟUT) κατά ένα. 
delay(1000);                             // Δίνουμε εντολή να καθυστέρησει για ένα δευτερόλεπτο. 
digitalWrite(Led_Home, HIGH);            // Ανάβει το LED. 
}                                        // Και κλείνουμε την αγκύλη.
lcd.setBacklight(255);                   // Δίνουμε εντολή για να ανάψει το LCD. 
lcd.setCursor(0, 0);                     // Θέτουμε τον κέρσορα του LCD στην στήλη 0 και στη γραμμή 1.
lcd.print("Person IN ");                 // Δίνουμε εντολή να τυπωθεί στο LCD ό,τι είναι μέσα στα εισαγωγικά.
if (IN>OUT)                              // Όταν τα άτομα που έχουν εισέλθει (ΙΝ), είναι περισσότερα από αυτά έχουν εξέλθει (OUT)? 
{                                        // Ανοίγουμε την αγκύλη. 
digitalWrite(Led_Home, HIGH);            // Τότε το LED παραμένει συνεχώς αναμένο. 
}                                        // Κλείνουμε την αγκύλη. 
else if (IN=OUT)                         // Εάν όσα άτομα έχουν εισέλθει στο σπίτι, άλλα τόσα αποχώρησαν? 
{                                        // Ανοίγουμε την αγκύλη. 
digitalWrite(Led_Home, LOW);             // Τότε τα φώτα όλα τα LED θα σβήσουν. 
}                                        // Κλείνουμε την αγκύλη. 
}                                        // Με το κλείσιμο της αγκύλης τερματίζεται και το πρόγραμμά μας.

Smart-Home Πατήστε το εικονίδιο για να δείτε το βίντεο.

IMG_3255

Φάση 7η

Ποιοτικός έλεγχος καλής λειτουργίας του πρωτοτύπου, ολοκλήρωση του πρότζεκτ, προετοιμασία για την παρουσίαση του έργου στον 5ο Πανελλήνιο Διαγωνισμό Ρομποτικής Ανοικτού Κώδικα.

Παραθέτουμε φωτογραφίες από τις εργασίες των ομάδων και βίντεο για την πλήρη λειτουργία του έργου. Η παρουσίαση της λειτουργίας του Sμαρτ – Home

Εικόνες από τις εργασίες των μαθητών στο εργαστήριο. Smart – Home

Φωτογραφίες

Φωτογραφεία

Η ομάδα των Δώδεκα (12) μαθητών δημοτικού, διδάχτηκε συνολικά τα παρακάτω γνωστικά πεδία.

1. Τις βασικές έννοιες του προγραμματισμού.
2. Την μελέτη και την σχεδίαση ρομποτικού μηχανισμού.
3. Εξασκήθηκε σε βασικές δεξιότητες συναρμολόγησης του Smart-Home.
4. Γνώρισε την χρήση και την λειτουργία από μία σειρά αισθητήρες.
5. Διδάχτηκε τις βασικές γνώσεις των ηλεκτρικών και των ηλεκτρονικών κυκλωμάτων.
6. Δόθηκε έμφαση στον τελικό στόχο της κατασκευής και αυτό βοήθησε την ομάδα να μείνει εστιασμένη 
στον στόχο της.   
7. Οι μικροί μαθητές εργάστηκαν ομαδικά, συνεργατικά και γνώρισαν την εμπειρία της συλλογικής προσπάθειας.
8. Γνώρισαν την αξία του καταμερισμού εργασίας με την δημιουργία υπο-ομάδων με συγκεκριμένα καθήκοντα.
9. Ξετυλίχτηκε η ατομική και συλλογική δημιουργική σκέψη και φάνηκαν δείγματα καινοτομίας με νέες προτάσεις 
βελτίωσης του ρομποτικού.
10.Παρατηρήθηκε ατομική αυτενέργεια όταν παρουσιάστηκαν διαφορετικές προσεγγίσεις από μαθητές 
κατά την πορεία της κατασκευής. 
11.Αναπτύχθηκε αυθόρμητη ευγενική άμιλλα ανάμεσα στα μέλη της ομάδας η οποία έδωσε ώθηση για περισσότερη γνώση.   
12.Ενθαρρύνθηκε ο πηγαίος ενθουσιασμός και η προσμονή για το τελικό αποτέλεσμα, πράγμα που βοήθησε τους μαθητές 
να εμπεδωθούν τα ενδιάμεσα στάδια της εργασίας (προγράμματα). 

Τέλος, όλη η ομάδα ατομικά και συλλογικά ένοιωσε την χαρά της δημιουργίας μίας εφαρμογής
την οποία η ίδια δημιούργησε. Μια αρχική ιδέα μελετήθηκε, σχεδιάστηκε, συναρμολογήθηκε,
προγραμματίστηκε και ολοκληρώθηκε. 
Προσπάθεια έγινε επίσης ώστε να ενθαρρυνθεί το κίνητρο της φιλομάθειας, της αυτενέργειας, 
της δημιουργικότητας και της καινοτόμου σκέψης, αξίες απαραίτητες για την ολόπλευρη ανάπτυξη 
της προσωπικότητας του μαθητή/μαθήτριας και για την κοινωνική και επαγγελματική τους 
καταξίωση στο μέλλον.