Υπό ανάπτυξη
Θα δημιουργίσουμε μια μονάδα με arduino και βασικά αισθητήρια
1) θερμοκρασίας
2) Υγρασίας
3) Ανίχνευση φωτεινότητας
4) Ανίχνευση κίνισης
5) είσοδο για μαγνητική επαφή πόρτας
6) είσοδο για μαγνητική επαφή παραθύρου
7) rele για έλεγχο φωτισμού του δωματίου
8) IR για έλεγχο του air-condition
Η πλακέτα του arduino θα επικοινωνεί μέσω LAN με πρωτόκολλο MQTT
H κατασκευή θα υλοποιηθεί στις τεχνικές οδηγίες και μετά θα παρουσιαστεί
Απαραίτητα υλικά
- Arduino Clone with 3.3V option. κύρια πλακέτα [10€]
- Arduino W5100 ethernet shield. πλακέτα δικτύου [6.5€]
- 7 x 10k Ohm αντιστάσεις
- 1x 150 Ω αντίσταση για τα 5 βολτ
- 1χ 470 Ω αντίσταση για τα 12 βολτ
- 1χ 33 Ω αντίσταση για αισθητήρα ρεύματος
- Prototype Shield πλακέτα στήριξης εξαρτημάτων [2.5€]
- DHΤ11 αισθητήρας θερμοκρασίας υγρασίας [2.6€]
- PIR presence sensor αισθητήρας κίνισης [3€]
- Photo resistor αισθητήρας φωτεινότητας [1€]
- Male-Female Dupont cables συνδετικά καλώδια [1.2€]
- 100-240v_5volt_25Watt τροφοδοτικό 5 βολτ [7€]
- relayX4 ρελέδες στα 5 βολτ [3.3€]
- mini usb μινι usb καλωδιο [1€]
- Led 5mm διαφόρων χρωμάτων
- magnetic switch μαγνητικές επαφές
- SCT013-000 Αισθητήριο ανίχνευσης ρεύματος
- 60W-12V-5A-Din-Rail-Switching-power-supply τροφοδοτικό [17€]
- Bornier2 5.08mm κλέμες ή συνδετήρες αισθητηρίων πάνω στην πλακέτα επέκτασης
- Πλακέτα με συγκεντρωμένα τα εξαρτήματα για αντικατάσταση του breadboard
-
10pcs 6 Pin 2.54 mm Stackable Long Legs Femal Header For Arduino Shield
- 10pcs 8 Pin 2.54 mm Stackable Long Legs Femal Header For Arduino Shield
Συνδεσμολογίες
Εδώ είναι η εικόνα με το pir sensor. Σύνδεση στην ακίδα 9 στην ψηφιακή είσοδο του arduino και όχι στην 4 όπως δείχνει η φωτογραφία.
/kgiannaras/images/software/pir sensore.zip
Στην παρακάτω εικόνα φαίνεται η σύνδεση του αισθητηρίου ρεύματος. Σύνδεση στην ακίδα Α2
/kgiannaras/images/software/carent sensore.zip
Στην επόμενη εικόνα έχουμε βάλει ένα led για να αναβοσβήνει όταν συνδέεται με τον broker mosquitto.
users.sch.gr/kgiannaras/images/software/led mqtt.zip
Στην επόμενη εικόνα έχουμε το ψηφιακό αισθητήριο DHT11. Ειναι διπλό αισθητήριο δηλαδή μπορεί να μετράει θερμοκρασία και υγρασία του δωματίου. Σύνδεση στην ακίδα 2
users.sch.gr/kgiannaras/images/software/dht sensore.zip
Αμέσως μετά έχουμε δύο μαγνητικές επαφές από τις οποίες θέλουμε να μαθαίνουμε εάν είναι ανοικτό το παράθυρο και το ρολό των παραθύρων. Συνδεσιμότητες στις ακίδες 8 και 10
users.sch.gr/kgiannaras/images/software/contacts Sketch.zip
Επόμενη εικόνα έχουμε τον πομπό Ir led συνδεδεμένος στην ακίδα 3 για να ελέγχουμε το κλιματιστικό
users.sch.gr/kgiannaras/images/software/ir led.zip
Αμέσως μετά μια φωτοαντίσταση για την μέτρηση της φωτεινότητας στο δωμάτιο. Η μετρούμενη αναλογική τάση που προκύπτει συνδέεται στην αναλογική είσοδο Α4
users.sch.gr/kgiannaras/images/software/foto resistance arduino.zip
Τέλος 4 ρελέδες είναι απαραίτητοι στις ακίδες 4, 5, 6, και 7 για να ελέγχουμε τα ρολά το φωτισμό του ταβανιού και τα φώτα νυκτός
users.sch.gr/kgiannaras/images/software/fritzing relay.zip
arduino ακολουθούμε αυτή την συνδεσμολογία
/* MQTT topic addressing
node = 52
device ID:
1 = 5212 = current sensor for lights
2 = 5222 = Light sensor
3 = 5231 = ultrasonic
4 = 5242 = pir
5 = 5252 = sound // δεν χρησιμοποιείται στο πρόγραμμα
6 = 5262 = Temperature_F
= 5263 = Humidity
7 = 5271 = flame // δεν χρησιμοποιείται στο πρόγραμμα
8 = 5281 = gas // δεν χρησιμοποιείται στο πρόγραμμα
9 = 5292 = contact ρολλών
5293 = contact παραθύρου
10 = 52** = ir
11 = **** = mqtt led
Pins του arduino
A4 = light sensor //αναλογική είσοδος
A2 = current sensor for lights //αναλογική είσοδος
2 = DHT11 sensor //ψηφιακή είσοδος αφορά τον αισθητήρα θερμοκρασίας-υγρασίας
# = water leak // Δεν χρησιμοποιείται
3 = IR sensor // ψηφιακή έξοδος οδηγεί το led υπερύθρων
# = sound
# = flame
# = gas
# = ultrasonic
4 = rele1 // ψηφιακή έξοδος οδηγεί το
5 = rele2 // ψηφιακή έξοδος οδηγεί το
6 = rele3 // ψηφιακή έξοδος οδηγεί το
7 = rele4 // ψηφιακή έξοδος οδηγεί το
8 = contact //ψηφιακή είσοδος μαγνητική επαφή στα ηλεκτρικά ρολά
9 = PIR sensor // ψηφιακή είσοδος αφορά τον αισθητήρα κίνισης
10 = contact //ψηφιακή είσοδος επαφή για έλεγχο παραθύρου
13 = ενδεικτικό led για mosquitto
Εντολές - μυνήματα που έρχονται από τον mosquitto με κωδικούς τους παρακάτω αριθμούς, όταν αυτοί ληφθούν από τον arduino μας αυτός θα εκτελεί τα παρακάτω:
client.subscribe("5232"); //5232 = topic για τα φώτα οροφής
client.subscribe("5233"); //5233 = topic για τα ρολά του παραθύρου
client.subscribe("5234"); //5234 = topic θα ενεργοποιεί το λαμπάκι νυκτός
client.subscribe("5235"); //5235 = topic ir led θα ενεργοποιεί το κλιματιστικό
Openhab
Ενημερώνουμε αρχείο με τα items
/* active groups */
Group:Contact:OR(OPEN, CLOSED) Shutters "Open shutters [%d)]" <contact>
//Δημιουργία δωματίου sf_childrens_room στο δεύτερο πάτωμα second_flore
Group sf_childrens_room "Παιδικό δωμάτιο" <child1> (second_flore)
//Δημιουργία μεταβλητής sf_childrens_room_temp για την ένδειξη της θερμοκρασίας η οποία θα ενημερώνετε μέσω mqtt πρωτοκόλλου
Number sf_childrens_room_temp "Θερμοκρασία δωματίου [%.1f °C]" <temperature> (sf_childrens_room) { mqtt="<[mymosquitto:5262:state:default]" }
//Δημιουργία μεταβλητής sf_childrens_room_humidity για την ένδειξη της υγρασίας η οποία θα ενημερώνετε μέσω mqtt πρωτοκόλλου
Number sf_childrens_room_humidity "Υγρασία δωματίου [%.1f %%]" <temperature> (sf_childrens_room) { mqtt="<[mymosquitto:5263:state:default]" }
//κατάσταση της μαγνητικής επαφής παραθύρου η οποία θα ενημερώνετε μέσω mqtt πρωτοκόλλου
Number sf_childrens_room_window "επαφή παραθύρου [%.1f]" (sf_childrens_room) { mqtt="<[mymosquitto:5292:state:default]" }
Contact child_window_contact "επαφή παιδικού παραθύρου [MAP(en.map):%s]" (sf_childrens_room)
Rollershutter sf_childrens_shutter "Ρολά παραθύρου" (sf_childrens_room,Shutters) { mqtt=">[mymosquitto:5233:command:UP:1],>[mymosquitto:5233:command:DOWN:0]" }
// Διακόπτης που ανάβει τα φώτα οροφής και στέλνει την εντολή στον arduino μέσω mqtt broker
Switch sf_childrens_room_light "Φώτα οροφής" (sf_childrens_room) { mqtt=">[mymosquitto:5232:command:ON:1],>[mymosquitto:5232:command:OFF:0]" }
//ενεργοποιεί τα φώτα νυκτός με mqtt στον arduino
Switch sf_childrens_room_night_light "Φώτα νυκτός" (sf_childrens_room) { mqtt=">[mymosquitto:5234:command:ON:1],>[mymosquitto:5234:command:OFF:0]" }
//μεταβλητή τύπου number δέχεται από arduino το επίπεδο της φωτεινότητας του δωματείου μέσω mqtt broker
Number sf_childrens_room_lumin_mqtt "Αισθητήρας φωτεινότητας [%.1f]" (sf_childrens_room) { mqtt="<[mymosquitto:5222:state:default]" }
//ένδειξη της κατάστασης φωτεισμού
Number sf_childrens_room_lumin_icon "Κατάσταση φωτισμού στο δωμάτιο" <light>
//Δέχεται την ανίχνευση κίνησης μέσω mqtt broker από arduino
Number sf_childrens_room_pir_mqtt "Αισθητήρας κίνισης [%.1f]" (sf_childrens_room) { mqtt="<[mymosquitto:5242:state:default]" }
//καταγράφει την ημερομηνία και ώρα ανίχνευσης κίνησης
DateTime sf_childrens_room_pir_time "Ημερομηνία ανίχνευσης κίνισης [%1$tA, %1$td/%1$tm, %1$tI:%1$tM %1$tp]"
//ενργοποιείται όταν ληφθεί κίνηση μέσα στο δωμάτιο
Switch sf_childrens_room_pir_alm_sta "Κατάσταση κίνισης εντός δωματίου" (sf_childrens_room)
//ενεργοποιεί την καταγραφή της κίνησης
Switch sf_childrens_room_pir_alm_enb "Ενεργοποίηση Καταγραφής κινίσεων" (sf_childrens_room)
//ενεργοποιεί το αυτόματο άναμμα φώτων όταν υπάρχει κίνηση
Switch sf_childrens_room_pir_switch "Αυτόματη ενεργοποίηση φωτισμού" (sf_childrens_room)
//γκρουπ για τις ρυθμίσεις του δωματίου
Group sf_childrens_room_setings "Ρυθμίσεις" <child1> (sf_childrens_room)
//επιτρέπει όταν σκοτεινιάζει στο δωμάτιο να ανάβουν τα φώτα νυκτός
Switch sf_ayto_night_light_switch "Αυτόματη ενεργοποίηση νυχτερινού φωτισμού" (sf_childrens_room)
//επιτρέπει αποστολή mail όταν είναι ο διακόπτης της ενεργοποίησης του συναγερμού ΟΝ εφόσον ανοίξει το ρολό του παραθύρου
Switch sf_reed_switch_alarm "email μαγνητικής επαφής παραθύρου" (sf_childrens_room)
//επιτρέπει αποστολή mail όταν είναι ο διακόπτης της ενεργοποίησης του συναγερμού ΟΝ και ο διακόπτης καταγραφής ΟΝ και εφόσον καταγραφεί κίνιση από το radar
Switch sf_radar_switch "email radar" (sf_childrens_room)
//επιτρέπει αυτόματο άνοιγμα ρολών το πρωί και αυτόματο κλείσιμο το βράδυ
Switch sf_rollershutter_switch "Αυτόματη ενεργοποίηση ρολών" (sf_childrens_room)
//ενεργοποιεί τηλεόραση αργότερα το aircondition
Switch SF_TV_ON_OFF "TV" (sf_childrens_room) { mqtt=">[mymosquitto:5235:command:ON:1],>[mymosquitto:5235:command:OFF:0]" }
//κατάσταση της μαγνητικής επαφής ρολών η οποία θα ενημερώνετε μέσω mqtt πρωτοκόλλου
Number sf_childrens_room_shutter "επαφή ρολών [%.1f]" (sf_childrens_room) { mqtt="<[mymosquitto:5293:state:default]" }
Contact sf_childs_room_shutter "επαφή ρολών παιδικού [MAP(en.map):%s]" (sf_childrens_room)
// Επιτρέπει αποτολή email για τα ρολλά όταν έχουμε συναγερμό
Switch sf_childrens_room_reed_switch_shutter "Αποστολή email μαγνητικής επαφής ρολών" (sf_childrens_room)
//Ένδειξη τιμής κατανάλωσης ρεύματος
Number sf_childrens_room_light_amber "Κατανάλωση ρεύματος (amber) [%.2f A]" <energy> (sf_childrens_room) { mqtt="<[mymosquitto:2873:state:default]" }
String test_voice "φωνητικη_εντολη" (sf_childrens_room)
Ενημερώνουμε το αρχείο με τα rules
//εμφανίζει την κατάσταση της επαφής των ρολών
rule "convert children shutter"
when
Item sf_childrens_room_shutter received update
then
if(sf_childrens_room_shutter.state < 15)
{
sf_childs_room_shutter.state = CLOSED
}
else
{
sf_childs_room_shutter.state = OPEN
}
end
//εμφανίζει την κατάσταση της επαφής του παραθύρου
rule "convert children window"
when
Item sf_childrens_room_window received update
then
if(sf_childrens_room_window.state < 15)
{
child_window_contact.state = CLOSED
}
else
{
child_window_contact.state = OPEN
}
end
//όταν ανοίξει το παράθυρο του δωματίου αποστέλει email
rule "mail window contact"
when
Item child_window_contact received update
then
if(sf_reed_switch_alarm.state, ON)
{
if(child_window_contact.state, open)
{
sendMail("Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από τους αυτοματισμούς αποστολέων ανεπιθύμητων μηνυμάτων. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να μπορέσετε να τη δείτε.", "rola anixta", "tora"
}
}
end
//ανάβει σβήνει την κατάσταση φωτισμού του δωματίου ανάλογα με την υπάρχουσα τιμή της φωτεινότητας που έχει το δωμάτιο και ανιχνεύεται από τον αισθητήρα φωτός του arduino
rule "childrens room lumin"
when
Item sf_childrens_room_lumin_mqtt received update
then
if(sf_childrens_room_lumin_mqtt.state < 300)
{
sendCommand(sf_childrens_room_lumin_icon, 0)
}
else
{
sendCommand(sf_childrens_room_lumin_icon, 1)
}
end
//ανοιγοκλείνει τα φώτα νυκτός αν υπάρχει σκοτάδι ή φως στο δωμάτιο και είναι στις ρυθμίσεις ενεργοποιημένος αυτός ο αυτοματισμός
rule "night lights otomation on-off"
when
Item sf_childrens_room_lumin_mqtt received update
then
if(sf_ayto_night_light_switch.state == ON)
{
if(sf_childrens_room_lumin_mqtt.state < 100)
{
sendCommand(sf_childrens_room_night_light, ON)
}
else
{
sendCommand(sf_childrens_room_night_light, OFF)
}
}
end
//ενεργοποιεί την κατάσταση κίνισης όταν ενημερωθεί απο τον αισθητήρα κίνησης του arduino
rule "pir threshold"
when
Item sf_childrens_room_pir_mqtt received update
then
if(sf_childrens_room_pir_alm_enb.state == ON)
{
sendCommand(sf_childrens_room_pir_alm_sta, ON)
}
end
//ενημερώνει την ημερομηνία ανίχνευσης κίνισης και αποστέλει email εάν έχει ενεργοποιηθεί και ο διακόπτης μέσα στις ρυθμίσεις
rule "pir responce"
when
Item sf_childrens_room_pir_alm_sta changed from OFF to ON
then
if(sf_enable_alarm.state == ON)
{
if(sf_radar_switch == ON)
{
sendMail("Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από τους αυτοματισμούς αποστολέων ανεπιθύμητων μηνυμάτων. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να μπορέσετε να τη δείτε.", "ανίχνευση κίνισης", "Τα αισθητήρια ανίχνευσαν κίνιση μέσα στο παιδικό δωμάτιο!!!")
postUpdate(sf_childrens_room_pir_time, new DateTimeType())
}
}
end
//Ανάβουν τα φώτα οροφής αυτόματα όταν κινιθεί κάποιος στο δωμάτιο εφόσον ενεργοποιηθεί και ο διακόπτης στις ρυθμίσεις
rule " pir lights otomation"
when
Item sf_childrens_room_pir_mqtt received update
then
if(sf_childrens_room_pir_switch.state == ON)
{
sendCommand(sf_childrens_room_light, ON)
}
end
//ανοίγει τα ρολά στις 9 κάθε πρωί εφόσον έχει ενεργοποιηθεί ο διακόπτης ενεργοποίηση ρολών στις ρυθμίσεις του δωματίου
rule "auto roller shutter on"
when
Time cron "0 00 09 * * ?"
then
sendCommand(sf_childrens_shutter, UP)
end
//κλείνει τα ρολά στις 6 κάθε απόγευμα εφόσον έχει ενεργοποιηθεί ο διακόπτης ενεργοποίηση ρολών στις ρυθμίσεις του δωματίου
rule "auto roller shutter off"
when
Time cron "0 30 20 * * ?"
then
sendCommand(sf_childrens_shutter, DOWN)
end
*