Opisane w poniższym wpisie elementy możesz zakupić na aliexpres. Poniższe linki to linki afiliacyjne. Skorzystanie z nich Ciebie nic dodatkowo nie kosztuje a ja otrzymam niewielką prowizję która wspomoże rozwój tego bloga. Dzięki!
Przekaźnik: http://ali.pub/2hk8br
Klon Arduino mega: http://ali.pub/2hk94c
Ethernet shield: http://ali.pub/2hk97n
W poprzednim wpisie opisałem mój pomysł na stosunkowo wygodne podłączenie do arduino przekaźników oraz przełączników. Tym razem pokażę jak takie połączenie można wykorzystać w praktyce. Jak pewnie zauważyliście na zdjęciach, dołączyłem do mojego arduino ethernet shield dzięki któremu będzie możliwe sterowanie urządzeniami za pośrednictwem sieci ethernet.
Przykład który pokażę pozwala na załączenie lub wyłączenie przekaźnika za pomocą przycisku dzwonkowego, lub za pomocą pakietu TCP o odpowiedniej treści.
Jeśli będziemy potrafili załączyć przekaźnik pakietem TCP, będziemy mogli sterować nim z poziomu dowolnego urządzenia - z komputera, telefonu, tabletu...
Przypuśćmy że chcemy sterować przekaźnikiem załączającym oświetlenie LED w salonie.
Program sterujący dla przejrzystości podzieliłem na 3 pliki:
1. _01_homeController.ino
W poprzednim wpisie opisałem mój pomysł na stosunkowo wygodne podłączenie do arduino przekaźników oraz przełączników. Tym razem pokażę jak takie połączenie można wykorzystać w praktyce. Jak pewnie zauważyliście na zdjęciach, dołączyłem do mojego arduino ethernet shield dzięki któremu będzie możliwe sterowanie urządzeniami za pośrednictwem sieci ethernet.
Przykład który pokażę pozwala na załączenie lub wyłączenie przekaźnika za pomocą przycisku dzwonkowego, lub za pomocą pakietu TCP o odpowiedniej treści.
Jeśli będziemy potrafili załączyć przekaźnik pakietem TCP, będziemy mogli sterować nim z poziomu dowolnego urządzenia - z komputera, telefonu, tabletu...
Przypuśćmy że chcemy sterować przekaźnikiem załączającym oświetlenie LED w salonie.
Program sterujący dla przejrzystości podzieliłem na 3 pliki:
1. _01_homeController.ino
Jest to główny plik zawierający funkcję inicjującą oraz pętlę główną
2. _02_salon_led.ino
W tym pliku zawarta jest obsługa przycisku oraz przekaźnika
3. _03_network.ino
W tym pliku zawarta jest obsługa połączenia sieciowego
Wydaje mi się że kod jest dość przejrzysty i czytelny. Nie będę zatem opisywał go linia po linii.
Zwróćcie uwagę na nazewnictwo plików które zastosowałem. Arduino IDE sortuje zakładki w projekcie w sposób alfabetyczny. Na początku nazwałem pliki
salon_led.ino
network.ino
zakładka z plikiem network.ino ustawiła się przed zakładką salon_led.ino
otrzymywałem wtedy błąd "SALON_LED_REMOTE_COMMAND was not declared in this scope" w linii 55'tej pliku network.ino.
Nie pomaga tutaj żadne include'owanie plików. Jedyne co pomogło to przeorganizowanie zakładek. Dziwne... Ale tak jest :).
Podłączony układ wygląda następująco:
Działanie całego układu najlepiej zobrazuje poniższy film:
Komunikację sieciową z Arduino trochę ławiej byłoby zrobić za pomocą pakietów UDP, chciałem jednak żeby ten wpis był wstępem do sterowania urządzeniami poprzez OpenHab a niestety natrafiłem na problemy z połączeniem OpenHab i Arduino za pośrednictwem UDP.
2. _02_salon_led.ino
W tym pliku zawarta jest obsługa przycisku oraz przekaźnika
3. _03_network.ino
W tym pliku zawarta jest obsługa połączenia sieciowego
Wydaje mi się że kod jest dość przejrzysty i czytelny. Nie będę zatem opisywał go linia po linii.
Zwróćcie uwagę na nazewnictwo plików które zastosowałem. Arduino IDE sortuje zakładki w projekcie w sposób alfabetyczny. Na początku nazwałem pliki
salon_led.ino
network.ino
zakładka z plikiem network.ino ustawiła się przed zakładką salon_led.ino
otrzymywałem wtedy błąd "SALON_LED_REMOTE_COMMAND was not declared in this scope" w linii 55'tej pliku network.ino.
Nie pomaga tutaj żadne include'owanie plików. Jedyne co pomogło to przeorganizowanie zakładek. Dziwne... Ale tak jest :).
Podłączony układ wygląda następująco:
Działanie całego układu najlepiej zobrazuje poniższy film:
Komunikację sieciową z Arduino trochę ławiej byłoby zrobić za pomocą pakietów UDP, chciałem jednak żeby ten wpis był wstępem do sterowania urządzeniami poprzez OpenHab a niestety natrafiłem na problemy z połączeniem OpenHab i Arduino za pośrednictwem UDP.
Swietny blog.
OdpowiedzUsuńLeci do zakladek ;)
Jak połączył Pan te 3 pliki ?
OdpowiedzUsuńW arduino IDE jako nowe zakładki
UsuńWitam, wygrzebałem projekt z googla. Czy mogę dostać cały kod? Ewentualnie jak połączyć te 3 pliki?
OdpowiedzUsuńJestem kompletnie zielony w arduino, a to było pierwsze co mi przyszło do głowy (inteligentnt dom).
Dodajecie zakładkę w programie arduino IDE, nazywacie ją _02_salon_led i wklejacie zawartość drugiego programu. Przy weryfikacji i ładowaniu zakładki zostaną sklejone ze sobą w jeden większy program. To samo tyczy się zakładki nr 3 i programu nr 3.
OdpowiedzUsuńAutorze, działa Ci kod z drugiej Zakładki ? U mnie przekaźnik sobie mrugał bo wykonywał funkcję toggle następnie czekał 0,5s i znów wykonywał toggle. Rozwiązanie uzyskane dzięki pomocy grupy Arduino na FB:
OdpowiedzUsuńString SALON_LED_REMOTE_COMMAND("salonled#");
const int SALON_LED_BUTTON_PIN = 8; // zmieniłem bo prototypy testuje na UNO
const int SALON_LED_RELAY_PIN = 9; // zmieniłem bo prototypy testuje na UNO
const int SALON_LED_AFTER_CHANGE_DELAY = 500;
int salonLedButtonState;
int salonLedState = LOW;
void initializeSalonLed() {
pinMode(SALON_LED_BUTTON_PIN, INPUT_PULLUP);
pinMode(SALON_LED_RELAY_PIN, OUTPUT);
setSalonLedState(LOW);
}
void checkSalonLed() {
salonLedButtonState = digitalRead(SALON_LED_BUTTON_PIN);
if (salonLedButtonState == LOW) {
toogleSalonLed();
delay(SALON_LED_AFTER_CHANGE_DELAY);
}
}
void setSalonLedState(int state) {
digitalWrite(SALON_LED_RELAY_PIN, state);
salonLedState = state;
}
void toogleSalonLed() {
if (salonLedState == HIGH) {
setSalonLedState(LOW);
} else {
setSalonLedState(HIGH);
}
}
Witam
OdpowiedzUsuńRatunku koledzy podajcie jaki kod trzeba wgrać żeby uzyskać sterowanie przekaźnikiem podaję plus załączył podaję ponownie plus wyłączył jak w tym filmie https://www.youtube.com/watch?v=_2Bcd2FYU3M
Zapomniałem dopisać typ Arduino Mega 2560
OdpowiedzUsuńzrobić prostą funkcję toggle (przełącz stan) i tyle. przejrzyj przykłady na necie bo to nie jest skomplikowane.
OdpowiedzUsuńWitaj
OdpowiedzUsuńNo dzięki za ""radę i pomoc baaardzo mi pomogłeś"" jedyne co działa z tych wszystkich skryptów to wyjścia analog mogę sobie pykać przekaźnikiem zał/wył w automacie jak kierunkowskazy w samochodzie do tego mogę zrobić sobie przerzutnik albo kupić przerywacz od jakiegoś samochodu
Chyba cały net przejrzałem próbowałem nawet twoje wgrać Błąd kopiowania Błąd kompilacji
THX pozdro
Szkoda że nie można edytować znalazłem skrypt w samym programie ale może tu uzyskam pomoc jak połączyć skrypty żeby wpisać następne wyjścia .Mam taki i działa i mogę zmieniać porty ale jak dołożyć następne porty?
OdpowiedzUsuńTen działa
http://www.arduino.cc/en/Tutorial/Debounce
*/
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 47; // the number of the pushbutton pin
const int ledPin = 49; // the number of the LED pin
// Variables will change:
int ledState = HIGH; // the current state of the output pin
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
// set initial LED state
digitalWrite(ledPin, ledState);
}
void loop() {
// read the state of the switch into a local variable:
int reading = digitalRead(buttonPin);
// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited
// long enough since the last press to ignore any noise:
// If the switch changed, due to noise or pressing:
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (reading != buttonState) {
buttonState = reading;
// only toggle the LED if the new button state is HIGH
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
// set the LED:
digitalWrite(ledPin, ledState);
// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;
}
Jeżeli skopiuję to do tego samego pliku zmieniając porty czyli mam jak by dwa wisy błąd kopiowania Błąd kompilacj Co robię źle?
Czy mógłby mi ktoś podać kod bez obsługi przycisku, ponieważ korzystam z arduino NG i kod się nie mieści.
OdpowiedzUsuńHej, w jaki sposób z serwera wysyłana jest paczka danych, którą odbiera arduino? Stworzyłem serwer php i nie wiem jak wysłać daną do arduino. Pozdrawiam :)
OdpowiedzUsuńA jest możliwość rozbudowy tego projektu do możliwości prostego okienka logowania się i podawania hasła oraz czy jest możliwość podejrzenia stanu oświetlenia czy jest załączone czy zgaszone? Chciałbym coś takiego podłączyć do oświetlenia korytarzowego. Przekaźnik symulowałby działanie włącznika krzyżowego, żeby równolegle można zmieniać jego stan przez sieć i na miejscu.
OdpowiedzUsuńPozdrawiam fajny projekt
Rafał
Co trzeba zrobić żeby to działało z Domoticzem ?
OdpowiedzUsuńTen komentarz został usunięty przez autora.
OdpowiedzUsuńJak widać system Arduino zbiera co raz to większą rzeszę zadowolonych odbiorców. Faktycznie można stworzyć przy jego pomocy wiele ciekawych i użytecznych rozwiązań. Ja mimo wszystko pisanie oprogramowania wolę zlecić profesjonalistom z https://craftware.pl którzy wiedzą jak się robi oprogramowanie. Ja niestety takiego daru nie nabyłem :)
OdpowiedzUsuń