/*
Inteligentny DOM by PP190897
*/
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
#include <Keypad.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 49
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// WprowadĽ adres MAC i IP używany przez ARDUINO
// MAC musi być inny niż urz±dzenia w sieci lokalnej
// Adres IP używany w sieci lokalnej
byte mac[] = { 0x10, 0xFE, 0xED, 0x04, 0x10, 0xE5 };
byte gateway[] = { 192, 168, 0, 1 }; // <------- Adres IP routera, z którym Ethernet shield jest połączony
byte subnet[] = { 255, 255, 255, 0 }; // <------- Maska podsieci
IPAddress ip(192,168,0,199);// <------- Adres przypisany Ethernet shieldowi
// Inicjalizacja biblioteki Ethernet server
// port 80 jest domyślny dla HTTP
EthernetServer server(80);
#define RELAY_CH1 31
#define RELAY_CH2 32
#define RELAY_CH3 33
#define RELAY_CH4 34
#define RELAY_CH5 35
String readString;
int calibrationTime = 15;
int button1 = 36; //kuchnia
int button2 = 37; //pokój1
int button3 = 38; //pokój2
int button4 = 39; //salon
int button5 = 40; //drzwi
int button6 = 41; //dzwonek
int button7 = 42; //brama
int button8 = A11; //PC
int button9 = 44; //rolety
int PinA13 = A13; //stan servo
int PinA14 = A14; //stan servo
int PinA15 = A15; //stan servo
int Pin31 = 31; //salon
int Pin32 = 32; //pokój1
int Pin33 = 33; //pokój2
int Pin34 = 34; //kuchnia
int Pin35 = 35; //PC
int PinA12 = A12; //dzwonek
int Pin49 = 49; //temperatura
int PinA6 = A6; //hasło1
int PinA7 = A7; //hasło2
int PinA2 = A2; //hasło3
int PinA9 = A9; //hasło4
int PinA10 = A10; //hasło5
int PIR1 = 46;
int PIR2 = 47;
Servo SERVO1; //kuchnia1
Servo SERVO2; //kuchnia2
Servo SERVO3; //salon
Servo SERVO4; //drzwi
Servo SERVO5; //brama
Servo SERVO6; //kamera
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
{
'1','2','3','A' }
,
{
'4','5','6','B' }
,
{
'7','8','9','C' }
,
{
'*','0','#','D' }
};
byte rowPins[ROWS] = {
30, 29, 28, 27};
byte colPins[COLS] = {
26, 25, 24, 23};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char alarmstatus = 'N';
char alarm1 = 'N';
char alarm2 = 'N';
double tempin;
double tempout;
void setup() {
sensors.begin();
sensors.setWaitForConversion(false);
sensors.setResolution(12);
sensors.requestTemperatures();
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(500);
}
SERVO1.attach(3); //definiujemy numer pinu dla danego servo
SERVO2.attach(5);
SERVO3.attach(6);
SERVO4.attach(A8);
SERVO5.attach(8);
SERVO6.attach(9);
SERVO1.write(110);
SERVO2.write(125);
SERVO3.write(110);
SERVO4.write(15);
SERVO5.write(90);
SERVO6.write(130);
pinMode(PinA13, OUTPUT);
pinMode(PinA14, OUTPUT);
pinMode(PinA15, OUTPUT);
pinMode(Pin31, OUTPUT); //piny wyjściowe
pinMode(Pin32, OUTPUT);
pinMode(Pin33, OUTPUT);
pinMode(Pin34, OUTPUT);
pinMode(Pin35, OUTPUT);
pinMode(PinA6, OUTPUT);
pinMode(PinA7, OUTPUT);
pinMode(PinA2, OUTPUT);
pinMode(PinA9, OUTPUT);
pinMode(PinA10, OUTPUT);
pinMode(PinA12, OUTPUT);
pinMode(Pin49, INPUT); //TEMP IN/OUT
pinMode(PIR1, INPUT); //PIR1
pinMode(PIR2, INPUT); //PIR2
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
pinMode(button5, INPUT);
pinMode(button6, INPUT);
pinMode(button7, INPUT);
pinMode(button8, INPUT);
pinMode(button9, INPUT);
digitalWrite(button1, LOW);
digitalWrite(button2, LOW);
digitalWrite(button3, LOW);
digitalWrite(button4, LOW);
digitalWrite(button5, LOW);
digitalWrite(button6, LOW);
digitalWrite(button7, LOW);
digitalWrite(button8, LOW);
digitalWrite(button9, LOW);
digitalWrite(PinA6, LOW);
digitalWrite(PinA7, LOW);
digitalWrite(PinA2, LOW);
digitalWrite(PinA9, LOW);
digitalWrite(PinA10, LOW);
digitalWrite(PinA12, LOW);
digitalWrite(PinA13, LOW);
digitalWrite(PinA14, LOW);
digitalWrite(PinA15, LOW);
digitalWrite(PIR1, LOW);
digitalWrite(PIR2, LOW);
pinMode(RELAY_CH1, OUTPUT);
digitalWrite(RELAY_CH1, LOW);
pinMode(RELAY_CH2, OUTPUT);
digitalWrite(RELAY_CH2, LOW);
pinMode(RELAY_CH3, OUTPUT);
digitalWrite(RELAY_CH3, LOW);
pinMode(RELAY_CH4, OUTPUT);
digitalWrite(RELAY_CH4, LOW);
pinMode(RELAY_CH5, OUTPUT);
digitalWrite(RELAY_CH5, LOW);
// Otwarcie komunikacji szeregowej
Serial.begin(9600);
// startowanie połączenia z internetem i serwerem
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
boolean stan=0;
void loop() {
//nasłuchiwanie klientów przychodzących
EthernetClient client = server.available();
if (client) {
char* params;
sensors.requestTemperatures();
tempin = sensors.getTempCByIndex(0);
sensors.requestTemperatures();
tempout = sensors.getTempCByIndex(1);
Serial.println("nowy klient");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100)
{
readString += c;
}
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<?xml version=\"1.0\" encoding=\"utf-8\">");
client.println("<!DOCTYPE html PUBLIC>");
client.println("<html xmlns=\"http://www.w3.org/1999/xhtml\"> ");
client.println("<HEAD>");
client.println("<meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=\"utf-8\" />");
client.println("<title>INTELIGENTNY DOM</title>");
client.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.fbsbx.com/hphotos-xfp1/v/t59.2708-21/11151302_448339528672583_612728063_n.css/projekt.css?oh=f734d0f7a81c6fffeed969635a8c37ce&oe=552AAD08&dl=1\">");
client.println("</HEAD>");
client.println("<body xml:lang=\"pl\">");
client.println("<div id=\"TLO\">");
client.println("<div id=\"STRONA\">");
client.println("<div id=\"NAGLOWEK\"></div>");
client.println("<div id=\"TRESC\">");
client.println("<center>");
client.println("<h2>TEMPERATURA</h2>");
client.println("<BR/>");
client.println("<button id=\"PRZYCISK\">IN<BR/>");
client.println(tempin);
client.println("</button> ");
client.println("<button id=\"PRZYCISK\">OUT<BR/>");
client.println(tempout);
client.println("</button> ");
client.println("<h2><BR/>ALARM");
client.println("<BR/>STATUS:");
client.println(alarmstatus);
client.println("</h2>");
client.println("<button id=\"PRZYCISK\">KORYTARZ:");
client.println(alarm1);
client.println("</button> ");
client.println("<button id=\"PRZYCISK\">STEROWNIA:");
client.println(alarm2);
client.println("</button> ");
client.println("<br/><br/><a href=\"http://192.168.0.199\"><button id=\"PRZYCISK\">ODŚWIEŻ</button> </a> ");
client.println("</center></div> ");
client.println("<div id=\"TRESC1\"> ");
client.println("<table id=\"TABELA\">");
client.println("<tr>");
if (digitalRead(RELAY_CH1))
{
client.print("<td> <p id=\"POMIESZCZENIE\">SALON</p><p id=\"ON\">ON</p> </td>");
}
else
{
client.print("<td> <p id=\"POMIESZCZENIE\">SALON</p><p id=\"OFF\">OFF</p></td>");
}
if (digitalRead(RELAY_CH2))
{
client.print("<td> <p id=\"POMIESZCZENIE\">POKÓJ 1</p><p id=\"ON\">ON</p></td>");
}
else
{
client.print("<td> <p id=\"POMIESZCZENIE\">POKÓJ 1</p><p id=\"OFF\">OFF</p></td>");
}
if (digitalRead(RELAY_CH3))
{
client.print("<td><p id=\"POMIESZCZENIE\">POKÓJ 2</p><p id=\"ON\">ON</p></td>");
}
else
{
client.print("<td><p id=\"POMIESZCZENIE\">POKÓJ 2</p><p id=\"OFF\">OFF</p></td>");
}
if (digitalRead(RELAY_CH4))
{
client.print("<td><p id=\"POMIESZCZENIE\">KUCHNIA</p><p id=\"ON\">ON</p></td>");
}
else
{
client.print("<td><p id=\"POMIESZCZENIE\">KUCHNIA</p><p id=\"OFF\">OFF</p></td>");
}
if (digitalRead(RELAY_CH5))
{
client.print("<td><p id=\"POMIESZCZENIE\">PC</p><p id=\"ON\">ON</p></td>");
}
else
{
client.print("<td><p id=\"POMIESZCZENIE\">PC</p><p id=\"OFF\">OFF</p></td>");
}
client.println("</tr>");
client.println("</table>");
client.println("</center>");
client.println("</div>");
client.println("<div id=\"TRESC2\"> ");
client.println("<br/><a href=\"/?relay1on\"\"><button id=\"PRZYCISK\">SALON ON</button> </a> ");
client.println("<a href=\"/?relay1off\"\"> <button id=\"PRZYCISK\">SALON OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?relay2on\"\"> <button id=\"PRZYCISK\">POKOJ 1 ON</button> </a> ");
client.println("<a href=\"/?relay2off\"\"> <button id=\"PRZYCISK\">POKOJ 1 OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?relay3on\"\"> <button id=\"PRZYCISK\">POKOJ 2 ON</button> </a> ");
client.println("<a href=\"/?relay3off\"\"> <button id=\"PRZYCISK\">POKOJ 2 OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?relay4on\"\"> <button id=\"PRZYCISK\">KUCHNIA ON</button> </a> ");
client.println("<a href=\"/?relay4off\"\"> <button id=\"PRZYCISK\">KUCHNIA OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?relay5on\"\"> <button id=\"PRZYCISK\">PC ON</button> </a> ");
client.println("<a href=\"/?relay5off\"\"><button id=\"PRZYCISK\">PC OFF</button> </a> ");
client.println("</div>");
client.println("<div id=\"TRESC3\"> ");
client.println("<br/><a href=\"/?servo1on\"\"> <button id=\"PRZYCISK\">ROLETA1 ON</button> </a> ");
client.println("<a href=\"/?servo1off\"\"><button id=\"PRZYCISK\">ROLETA1 OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?servo2on\"\"> <button id=\"PRZYCISK\">ROLETA2 ON</button> </a> ");
client.println("<a href=\"/?servo2off\"\"><button id=\"PRZYCISK\">ROLETA2 OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?servo3on\"\"> <button id=\"PRZYCISK\">ROLETA3 ON</button> </a> ");
client.println("<a href=\"/?servo3off\"\"><button id=\"PRZYCISK\">ROLETA3 OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?servo4on\"\"> <button id=\"PRZYCISK\">DRZWI ON</button> </a> ");
client.println("<a href=\"/?servo4off\"\"><button id=\"PRZYCISK\">DRZWI OFF</button> </a> <br />");
client.println("<br />");
client.println("<a href=\"/?servo5on\"\"> <button id=\"PRZYCISK\">BRAMA ON</button> </a> ");
client.println("<a href=\"/?servo5off\"\"><button id=\"PRZYCISK\">BRAMA OFF</button> </a> <br />");
client.println("<br />");
client.println("</div>");
client.println("<div id=\"TRESC4\"> ");
client.println("<br/><button id=\"PRZYCISK\">KAMERA</font> </button><br /><br />");
client.println("<a href=\"/?servo6on1\"\"> <button id=\"PRZYCISK1\"><--</button> </a> ");
client.println("<a href=\"/?servo6on\"\"> <button id=\"PRZYCISK1\"><----</button> </a> ");
client.println("<a href=\"/?servo6off\"\"><button id=\"PRZYCISK1\">----></button> </a> ");
client.println("<a href=\"/?servo6off1\"\"><button id=\"PRZYCISK1\">--></button> </a> <br />");
client.println("</div>");
if(readString.indexOf("?relay1on") >0)
{
digitalWrite(RELAY_CH1, HIGH);
}
if(readString.indexOf("?relay1off") >0)
{
digitalWrite(RELAY_CH1, LOW);
}
if(readString.indexOf("?relay2on") >0)
{
digitalWrite(RELAY_CH2, HIGH);
}
if(readString.indexOf("?relay2off") >0)
{
digitalWrite(RELAY_CH2, LOW);
}
if(readString.indexOf("?relay3on") >0)
{
digitalWrite(RELAY_CH3, HIGH);
}
if(readString.indexOf("?relay3off") >0)
{
digitalWrite(RELAY_CH3, LOW);
}
if(readString.indexOf("?relay4on") >0)
{
digitalWrite(RELAY_CH4, HIGH);
}
if(readString.indexOf("?relay4off") >0)
{
digitalWrite(RELAY_CH4, LOW);
}
if(readString.indexOf("?relay5on") >0)
{
digitalWrite(RELAY_CH5, HIGH);
}
if(readString.indexOf("?relay5off") >0)
{
digitalWrite(RELAY_CH5, LOW);
}
if(readString.indexOf("?servo1on") >0)
{
SERVO1.write(35);
digitalWrite(PinA13, HIGH);
}
if(readString.indexOf("?servo1off") >0)
{
SERVO1.write(110);
digitalWrite(PinA13, LOW);
}
if(readString.indexOf("?servo2on") >0)
{
SERVO2.write(45);
}
if(readString.indexOf("?servo2off") >0)
{
SERVO2.write(125);
}
if(readString.indexOf("?servo3on") >0)
{
SERVO3.write(35);
}
if(readString.indexOf("?servo3off") >0)
{
SERVO3.write(110);
}
if(readString.indexOf("?servo4on") >0)
{
SERVO4.write(110);
digitalWrite(PinA14, LOW);
}
if(readString.indexOf("?servo4off") >0)
{
SERVO4.write(15);
digitalWrite(PinA14, HIGH);
}
if(readString.indexOf("?servo5on") >0)
{
SERVO5.write(90);
digitalWrite(PinA15, LOW);
}
if(readString.indexOf("?servo5off") >0)
{
SERVO5.write(180);
digitalWrite(PinA15, HIGH);
}
if(readString.indexOf("?servo6on1") >0)
{
SERVO6.write(80);
}
if(readString.indexOf("?servo6on") >0)
{
SERVO6.write(40);
}
if(readString.indexOf("?servo6off") >0)
{
SERVO6.write(170);
}
if(readString.indexOf("?servo6off1") >0)
{
SERVO6.write(130);
}
// TEMP IN
if (strcmp(params, "tempin") == 0)
{
sensors.requestTemperatures();
tempin = sensors.getTempCByIndex(0)*100;
client.print(tempin);
}
// TEMP OUT
if (strcmp(params, "tempout") == 0)
{
sensors.requestTemperatures();
tempout = sensors.getTempCByIndex(1)*100;
client.print(tempout);
}
client.println("<div id=\"STOPKA\"> ");
client.println("INTELIGENTNY DOM<br/>Arduino – na kazdą kieszeń<br>Patryk & Leszek");
client.println("</div> ");
client.println("</div> ");
client.println("</div> ");
readString="";
client.println("</body>");
client.println("</html>");
break;
}// if ( c == \n )
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(2);
client.stop();
Serial.println("client disonnected");
} //kończy Client
if (digitalRead(button1) == HIGH) {
delay(20);
stan=!stan;
digitalWrite(34, stan);
while(digitalRead(button1)== HIGH);
delay(20);
}
if (digitalRead(button2) == HIGH) {
delay(20);
stan=!stan;
digitalWrite(32, stan);
while(digitalRead(button2)== HIGH);
delay(20);
}
if (digitalRead(button3) == HIGH) {
delay(30);
stan=!stan;
digitalWrite(33, stan);
while(digitalRead(button3)== HIGH);
delay(20);
}
if (digitalRead(button4) == HIGH) {
delay(20);
stan=!stan;
digitalWrite(31, stan);
while(digitalRead(button4)== HIGH);
delay(20);
}
if (digitalRead(button8) == HIGH) {
delay(20);
digitalWrite(35, HIGH);
delay(100);
digitalWrite(35, LOW);
while(digitalRead(button3)== HIGH);
delay(20);
}
if (digitalRead(button6) == HIGH) {
delay(20);
digitalWrite(PinA12, HIGH);
tone(PinA12, 261);
delay(2000);
digitalWrite(PinA12, LOW);
noTone(PinA12);
while(digitalRead(button6)== HIGH);
delay(20);
}
if (digitalRead(button7) == HIGH) {
delay(20);
stan=!stan;
if (digitalRead(PinA15) == LOW) {
SERVO5.write(90);
}
else {
SERVO5.write(180);
}
digitalWrite(PinA15, stan);
while(digitalRead(button7)== HIGH);
delay(20);
}
if (digitalRead(button5) == HIGH) {
delay(20);
stan=!stan;
if (digitalRead(PinA14) == LOW) {
SERVO4.write(110);
}
else {
SERVO4.write(15);
}
digitalWrite(PinA14, stan);
while(digitalRead(button5)== HIGH);
delay(20);
}
if (digitalRead(button9) == HIGH) {
delay(20);
stan=!stan;
if (digitalRead(PinA13) == LOW) {
SERVO1.write(110);
SERVO2.write(125);
SERVO3.write(110);
}
else {
SERVO1.write(35);
SERVO2.write(45);
SERVO3.write(35);
}
digitalWrite(PinA13, stan);
while(digitalRead(button9)== HIGH);
delay(20);
}
char key = keypad.getKey();
if (key == '2')
{
delay(10);
digitalWrite(PinA6, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
digitalWrite(Pin31, HIGH);
}
if (key == '5')
{
delay(10);
digitalWrite(PinA7, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
digitalWrite(Pin32, HIGH);
}
if (key == '8')
{
delay(10);
digitalWrite(PinA2, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
digitalWrite(Pin33, HIGH);
}
if (key == '0')
{
delay(10);
digitalWrite(PinA9, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
digitalWrite(Pin34, HIGH);
}
if (key == '#')
{
delay(10);
digitalWrite(PinA10, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
SERVO4.write(15);
}
if (key == '*')
{
delay(10);
alarmstatus = 'N';
alarm1 = 'N';
alarm2 = 'N';
digitalWrite(PinA6, LOW);
digitalWrite(PinA7, LOW);
digitalWrite(PinA2, LOW);
digitalWrite(PinA9, LOW);
digitalWrite(PinA10, LOW);
digitalWrite(PIR1, LOW);
digitalWrite(PIR2, LOW);
digitalWrite(Pin31, LOW);
digitalWrite(Pin32, LOW);
digitalWrite(Pin33, LOW);
digitalWrite(Pin34, LOW);
noTone(PinA12);
digitalWrite(PinA12, LOW);
SERVO6.write(130);
}
if (key == '1')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if (key == '3')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if (key == '4')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if (key == '6')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if (key == '7')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if (key == '9')
{
delay(10);
digitalWrite(PinA12, HIGH);
tone(PinA12, 500);
delay(30);
noTone(PinA12);
digitalWrite(PinA12, LOW);
}
if ((digitalRead(PinA6) == HIGH) && (digitalRead(PinA7) == HIGH) && (digitalRead(PinA2) == HIGH) && (digitalRead(PinA9) == HIGH) && (digitalRead(PinA10) == HIGH)){
alarmstatus = 'T';
digitalWrite(Pin31, LOW);
digitalWrite(Pin32, LOW);
digitalWrite(Pin33, LOW);
digitalWrite(Pin34, LOW);
delay(100);
digitalWrite(Pin31, LOW);
digitalWrite(Pin32, LOW);
digitalWrite(Pin33, LOW);
digitalWrite(Pin34, LOW);
if (digitalRead(PIR1) == HIGH){
alarm1 = 'T';
digitalWrite(Pin31, HIGH);
digitalWrite(Pin32, HIGH);
digitalWrite(Pin33, HIGH);
digitalWrite(Pin34, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 350);
SERVO6.write(60);
}
if (digitalRead(PIR2) == HIGH){
alarm2 = 'T';
digitalWrite(Pin31, HIGH);
digitalWrite(Pin32, HIGH);
digitalWrite(Pin33, HIGH);
digitalWrite(Pin34, HIGH);
digitalWrite(PinA12, HIGH);
tone(PinA12, 350);
SERVO6.write(20);
}
}
} // kończy Loop
Pomysł na 5. Czepiłbym się tylko jakości wykonania. Przewody można było puścić pod posadzką :-)
Niestety wiem, że jakość wykonania słaba, jednak tu głównie chodziło o funkcjonalność. W projekcie V2 na pewno to poprawie. Proszę komentować. Przyjmę każdą poradę jak i krytykę :)
Jak ktoś ocenia nisko to niech napisze za co, żebym wiedział co poprawić.
Fajne:) Zrób kolejne wersje w co raz większej skali, a jak skończysz technikum, to już nie pozostanie nic innego, jak tylko zamienić to w biznes:)
Kawał dobrej roboty!
Nie zapomnij się pochwalić, gdy makieta będzie drewniana!
Dzięki. Jeśli wszystko wyjdzie to na pewno się pochwalę ;)
Witaj. Projekt fajny i ciekawy. Czekam na finalną wersję. Było by 5 ale jedna rażąca wada w artykule nazwa projektu. Niby nic ale “Inteligentny” dom ? niestety inteligencji w tym nie ma jest to po prostu automatyka domowa. Tego chwytu używają sprzedawcy, żeby zachwalać swój projekt. Inteligentny dom to taki który sam się uczy i dostosowuje do indywidualnie do każdego użytkownika i jest wstanie reagować poprawnie na nowe zdarzenia.
Zgadzam się z tobą w 100%, ale z drugiej strony jak to nazwać? Zaprogramowany dom? Mało ciekawy tytuł.
Sorki, zapomniałem się zalogować.
“Automatyka domowa v1”
A dla mnie bomba! Jeszcze zamiast kabli przydałoby się dołożyć łączność bezprzewodową.
Gratulacje.
PB
A ja jestem przeciwny stosowania łączności bezprzewodowej w takich instalacjach. Z trzech powodów:
“C” mi się zacięło i walnąłem takiego paskudnego ortografa w swoim imieniu, że aż wstyd :(
Jak dla mnie, to w końcu coś z sensowniejszą realizacją w tym temacie – założenia spełnione w całości, a nie jak w większości tego typu projektów jest wyszczególniona, jak ja to mówię, “lista życzeń” lub “lista marzeń”, a następnie opisana funkcja załącz/wyłącz przekaźnik i reszty doczekać się nie można, bo autorzy znikają
Spodobało mi się w tej makiecie to, że każde pomieszczenie podświetla się w innym kolorze – ot, niby takie pierdółko, ale do makiety idealne :)
A teraz (drobne) uwagi:
– otwieranie drzwi może być tylko w formie makiety – w realnym świecie nie ma to zastosowania (a szkoda)
– jeśli opisujesz w kodzie piny to rób to tak jak w przypadku czujników ruchu, bo oznaczenia zmiennych w formie
“int button1 = 36; //kuchnia
int button2 = 37; //pokój1
int button3 = 38; //pokój2”
jest bardzo nieczytelne w dalszych częściach kodu (aby zrozumieć co dana funkcja robi trzeba co chwilę spoglądać, który pin za co odpowiada) przez co kod staje się nieczytelny
“if (digitalRead(PIR1) == HIGH){”
chyba przyznasz, że to jest bardziej czytelne w dalszej części kodu, bo od razu widać, że np warunek sprawdza stan czujki itd :)
Projekt udany i życzę powodzenia :)
Dzięki wielkie. Tak to jest jak pisze się kod w kilku etapach to później różnie wychodzi – przyszłe projekty będą czytelniejsze. Drzwi to naprawdę prowizorka, ale rolę spełniają. Nie miałem pomysłu jak to zrobić inaczej. Teraz mam już pewien pomysł ;)
Nieprzydatność otwierania drzwi nie jest taka całkowita – oczywiście nie chodzi o fizyczne otwarcie drzwi, ale sterowanie zamkiem elektrycznym, czy jakąś zasuwą – ma sens.
Do autora – jak z wersją 2 ?
Po co dawac dwa przyciski on/off w przegladarce skoro program odczytuje stan ;p? Ogolnie projekt fajny ale widze tutaj wiele do poprawienia.
W sumie racja z tymi przyciskami. Nie przyszło mi to do głowy. Człowiek cały czas się uczy ;)
Świetny projekt, jakość wykonania trochę kuleje, ale jak sam napisałeś jest to dopiero pierwsza wersja. Czekam więc na kolejną :)
Kolejna wersja będzie na pewno, pytanie czy wyrobię się przez wakacje. Trzymaj kciuki :)
Trzymam :)
Trzymam :)
Projekt wykonany fajnie – fajna markiza jak na początek. Mam jedną uwagę co do bezpieczeństwa, zrób chociaż logowanie do strony www , bo tak ktokolwiek by się podłączył do sieci Wi-Fi mógłby sterować np. ogrzewaniem na 80 stopni Celcjusza …
Reszta nawet fajne :)
Jeszcze czegos takiego nie robiłem to może byc wyzwanie ale oczywiście spróbuje
Widać że bawi Cię to co zrobiłeś i to w tym wszystkim najważniejsze. Zawsze się tu znajdzie jakiś krytyk który sam nic nie wstawi bo go skrytykują ;) Projekt na 5 mimo że tylko teoretycznie do praktycznego zastosowania. Czekam na Twoje kolejne prace , początek bardzo dobry :) I pamiętaj! nie tłumacz się ;)
Projekt fajny nie powiem, jeszcze tylko nad bardziej “profesjonalnym” wykonaniem trzeba popracować. To taka wersja beta w połowie drogi trochę :)
Jak na przyszłego informatyka, to bardzo profesjonalnie i rzetelnie przedstawiłeś swoją pracę :)
Gdzie moge kupić taki klon Arduino?
Od jakiego języka polecasz zacząć nauke programowania, a jakiego ty używasz?
PS. To co zrobiłeś jest świetne!
Klon Arduino polecam od tego użytkownika http://allegro.pl/klon-arduino-mega2560-r3-atmel-atmega2560-avr-usb-i4876828577.html Zdarzyła mi się reklamacja, ale to bardziej z mojej winy, jednak bez problemu wymienili mi na nowe. To co napisałem jest w języku Arduino, stwierdzam że jest on bardzo prosty. Dodam, iż jestem dość leniwy i bardzo nie lubię czytać książek, dlatego nie przeczytałem żadnej. Za to przejrzałem mnóstwo forów, przeanalizowałem dziesiątki jak nie setki kodów i tak samo przyszło. Jak widać jakiś efekt z takiej nauki też jest. Polecam obejrzeć odcinki Elektroprzewodnika na youtubie(niektóre są dość nudne ale w większości mówi ciekawie) oraz Elektro Maras. Życzę ci miłej zabawy.
PS. Czasami warto ustanowić sobie jakiś większy cel(nawet ponad swoje możliwości) i małymi kroczkami do niego dążyć.
Siema! Też zaczynam zabawę z portami GPOI i Raspberry pi i szukam jakiś książek o programowaniu wejść/wyjść itp i chciałem się dowiedzieć z czego się uczyłeś? :D
Super, jak będziesz robił V2 to koniecznie poukrywaj przewody i moze podostawiaj jakieś mebelki :)
A może ludziki..? :)
P.S. Inteligentny domek dla lalek, sterowanie komputerowe. Już widzę, jak rodzice zamykają przez internet domek, żeby się dziecko nie bawiło po nocy ;)
Świetny projekt. mi się marzy takie coś na działce. Loguje się na telefonie do aplikacji i mogę włączyć np ogrzewanie.
Nie ma co marzyć, trzeba przejść do realizacji ;) Projekt nie byłby trudny w realizacji. Widziałem kilka fajnych projektów z wykorzystaniem starego telefonu. Wtedy wysyłasz sms-a gdziekolwiek jesteś i ogrzewanie się załączy.
Witaj. Jak na ucznia technikum to zdecydowanie dzieło sztuki. Widzę spryt i wysiłek w Twojej pracy. Jeśli chcesz – pogadajmy prywatnie. Mogę zaproponować Ci rozszerzenie możliwości finansowych byś mógł kontynuować to co zacząłeś, w zamian za pomoc w moim projekcie.
anonymouslord1(at)gmail.com
To może w następnym kroku opcja sterowania poprzez smartfon/tablet :D
Chyba chodzi Ci o aplikację na smartfon/tablet, bo sterować można tak samo przez stronę WWW. Spróbuje.
Fajna opcja. Musze przemyśleć to w swoim domu.
ciężkie jest zycie informatyka :( jakbym wiedział, ze to zrobiłeś i upubliczniłes, to bym nie klikał tutaj, takto odpadł mi…. cały zapał i entuzjazm do robienia tego projektu od zera dla siebie :(
mając gotowca i znając go niestety mógłby posłużyć za ściągę…
błagam nie uświadamiajcie mnie tylko, że ktoś już zrobił klona iRoomba na atmega, bo to mój następny pomysł na liście…
Pozdrawiam – informatyk.
Do końca wakacji na pewno nie będzie wersji V2.
I jak tam prace nad wersją 2?
Niestety na razie ambicje przerosły możliwości czasowe, ale w szkole będzie do zrobienia projekt tak jak w zeszłym roku, dlatego coś się może ruszy.
Tworzę stronę na zajęcia związaną z projektami opartymi o arduino. Na razie jeszcze nic na niej nie ma ale stopniowo będę ją dopracowywał, dlatego już zapraszam do zaglądania.
ardupro.drupalgardens.com
Co to ma byc? MOZE ZAGALOPAWALES SIE kolego?
Popraw błędy językowe na stonce, bo strasznie rażą…
Jakieś kontakt z tobą ? bo ma parę pytań ?
Witam.
Jestem od niedawna w majsterkowo.pl
Pracuje nad czymś podobnym do własnego domu.
Prosił bym Cie “pp190897” o kontakt mpolak123@wp.pl mam kilka pytań na które nie znajduje odpowiedzi a myślę że Ty mógłbys mi pomóc.
Pozdrawiam
MPolak
Co polecacie bardziej do makiety inteligentnego domu raspberry czy arduino, chcę zbudować coś w podobie do tego co wykonał autor posta i nie wiem co wybrac.