Gieneq Sierpień 5, 2020 Udostępnij Sierpień 5, 2020 @Kurczak92 a sprawdzałeś jak działa kontaktron w układach jak w kursie elektroniki 2? Gdy dasz go w układzie z zasilaniem i jakimś np. LED, chwilowo bez mikrokontrolera. Możesz też sprawdzić czy magnes nie ściąga listków za słabo, może jakiś inny będzie współgrał lepiej, bo takie zjawisko raczej nie jest poprawne.
bujo2001 Wrzesień 10, 2020 Udostępnij Wrzesień 10, 2020 (edytowany) Witam Co prawda nie dokończyłem jeszcze całego odcinka, jednak chciałbym przedstawić moją małą modyfikację co do zadania domowego dla systemu alarmowego przy otwieraniu okien. Jedynym, a jednak dość istotnym dodatkiem jest pojedynczy mikroswitch, który pozwala na wygodne zresetowanie systemu po upewnieniu się, że okna są zamknięte, a w środku nie przybyło nam żadnych gości. Stwierdziłem, że przy takim resetowaniu miłym dodatkiem są dwa szybkie bipnięcia buzzera, co daje nam znać że możemy odejść od układu spokojni, że dalej jesteśmy pod jego ochroną. Co prawda można by użyć do tego celu przycisku RESET na mikrokontrolerze, jednak własny przycisk ma pewną przewagę - możemy go umieścić gdzie tylko sobie życzymy, co pozwala nam zresetować układ wygodnie z naszego biurka/łóżka bez potrzeby żadnego ruchu. Leniuchowanie nigdy nie było tak proste! Załączam mój kod, jednak komentarze są po angielsku, ponieważ przyzwyczajam się na to, co czeka mnie na studiach. Wyprowadzenia na Arduino dokładnie tak, jak są opisane w #define // This programme uses reed switch, RGB LED and a buzzer in simple alarm system /* * System works as follows: * 1. When the window is closed (reed switch is connected), LED glows GREEN and the system is silent * 2. Once the window is opened, reed switch disconects: * - LED turns RED * - Buzzer starts making noise * Even when the window is immediately closed, once opened alarm goes off * 3. Microswitch is used to reset the system: * - When the door is closed, button is pushed * - LED turns GREEN again * - Buzzer makes two short beeps to let us know that the system is succesfully reset * - Additional short delay to prevent disruptions * * That way it's a simple alarm system that can be expanded with more reed switches. */ #define firstRed 10 // Defines these pins for our convenience #define firstGreen 11 #define firstBlue 12 #define firstReed 2 #define buzzerPin 9 #define button 3 void setup() { pinMode(firstRed, OUTPUT); // RGB pins as outputs pinMode(firstGreen, OUTPUT); pinMode(firstBlue, OUTPUT); digitalWrite(firstRed, LOW); // Makes sure the LED is initially turned off digitalWrite(firstGreen, LOW); digitalWrite(firstBlue, LOW); pinMode(firstReed, INPUT_PULLUP); // Reed switch as an input pinMode(buzzerPin, OUTPUT); // Buzzer as an output digitalWrite(buzzerPin, LOW); noTone(buzzerPin); pinMode(button, INPUT_PULLUP); } void loop() { tone(buzzerPin, 4000, 100); // Buzzer beeps two times (initially to let you know the system is on, then that the system is reset) delay(150); tone(buzzerPin, 4000, 100); delay(1000); // Additional delay to prevent disruptions digitalWrite(firstRed, LOW); // Settings to reset the system - LED glows GREEN, buzzer is silent digitalWrite(firstGreen, HIGH); noTone(buzzerPin); while(digitalRead(firstReed) == LOW) {} // Waits for the window to be opened digitalWrite(firstRed, HIGH); // LED glows RED digitalWrite(firstGreen, LOW); while(digitalRead(button) == HIGH) { // Loop that goes on till the button is pressed tone(buzzerPin, 4250); delay(150); tone(buzzerPin, 3750); delay(150); } // Button has been pressed, main loop starts over again } Postaram się dołączyć również filmik jak tylko zedytuję wpis na telefonie. PS - Podczas pracy nad tym układem naszły mnie dwa szybkie pytania: - Czy jest różnica w tym, który pin używamy jako wyprowadzenie dla buzzera bez generatora przy używaniu funkcji tone()? W kursie podłączyliśmy go do pinu Analog, jednak wygląda na to że działa równie dobrze zarówno na pinach Digital i PWM - Jaka jest różnica pomiędzy microswitchami 4.3mm a 5mm? Oczywiście, poza tymi oczywistymi. Jedyne logiczne wytłumaczenia jakie przychodzą mi do głowy to albo żeby móc puścić przez nie "większy" prąd, albo dla naszej wygody, gdy musimy umieścić je w otworach o odpowiedniej grubości. Skoro używamy ich do ustawienia logicznego 0/1, przy pracowaniu z większym prądem tak czy siak będziemy musieli użyć tranzystorów, dlatego obstawiam tą drugą opcję. Miłego dnia, może za chwilę wyląduje kolejny wpis, tym razem o czujniku ruchu lub przerywaniach Edit - nie mogę zamieścić tutaj pliku mp4, więc dołączam zdjęcie układu. Myślę że każdy poradzi sobie z jego odtworzeniem, swoją drogą polecam wykorzystać naklejki forbota na drewnianej podstawce, etektywny sposób na upewnienie się co do odpowiedniego rezystora Edytowano Wrzesień 10, 2020 przez bujo2001 Dodatkowa zawartość 1
Treker (Damian Szymański) Wrzesień 11, 2020 Udostępnij Wrzesień 11, 2020 @bujo2001 ciekawa modyfikacja, powodzenia w dalszych eksperymentach Dnia 10.09.2020 o 10:16, bujo2001 napisał: Czy jest różnica w tym, który pin używamy jako wyprowadzenie dla buzzera bez generatora przy używaniu funkcji tone()? W kursie podłączyliśmy go do pinu Analog, jednak wygląda na to że działa równie dobrze zarówno na pinach Digital i PWM W tym przypadku nie ma to większego znaczenia. Wybór pinu, który może pełnić rolę wejścia analogowego nie był kluczowy. Dnia 10.09.2020 o 10:16, bujo2001 napisał: - Jaka jest różnica pomiędzy microswitchami 4.3mm a 5mm? Oczywiście, poza tymi oczywistymi. Jedyne logiczne wytłumaczenia jakie przychodzą mi do głowy to albo żeby móc puścić przez nie "większy" prąd, albo dla naszej wygody, gdy musimy umieścić je w otworach o odpowiedniej grubości. Skoro używamy ich do ustawienia logicznego 0/1, przy pracowaniu z większym prądem tak czy siak będziemy musieli użyć tranzystorów, dlatego obstawiam tą drugą opcję. To tylko rozmiar elementu, który czasami jest też powiązany z innym rozstawem wyprowadzeń. W tym przypadku nie wpływa to bezpośrednio na żadne inne właściwości układu. 1
bujo2001 Październik 24, 2020 Udostępnij Październik 24, 2020 @Antosik Będzie ciężko to odtworzyć, bo sporo czasu minęło odkąd to składałem, ale generalnie jeżeli złożysz układ tak samo jak jest to opisane w kursie, to jedyną nową zmianą jest przycisk, który wsm podłączasz standardowo do jednego z portów cyfrowych i do masy. Wszystko inne to już tylko kwestia kodowania, a to jest zamieszczone w poście
Treker (Damian Szymański) Październik 26, 2020 Udostępnij Październik 26, 2020 @Antosik dzięki za konstruktywne informacje zwrotne - mamy to już na uwadze. Odświeżając kolejne kursy dodajemy już wszędzie schematy ideowe. Gdy zabierzemy się za odświeżanie tego kursu to na pewno również je dodamy.
Kakol155 Styczeń 15, 2021 Udostępnij Styczeń 15, 2021 Dnia 8.12.2019 o 21:18, Gieneq napisał: @Kakol155 miło czytać pozytywny komentarz, zachęca to do dalszej pracy, może właśnie nad 3 częścią kursu. A miałbyś propozycje tematów? Tak do końca nie wiem jaki temat konkretny ale bym zaproponował sterowanie światłem, sterowanie pompą, zrobienie własnego power banka, czujnik temperatury, czujnik zanieczyszczeń jeszcze bym zaproponował jakieś ciekawostki i ciekawe projekty z solarem. 1
pawelKO Styczeń 23, 2021 Udostępnij Styczeń 23, 2021 Cześć, dzięki za kurs. Wyjaśnienie przerwań bardzo literackie i wyjaśniło dogłębnie. Miałem trudności z realizacją lekcji wynikające z podpięcia kabelka do pinu 0 i w tym stanie ładowanie programu do płytki. (Jak się okazało - nie ja pierwszy, ale każdy szczeniak swoje mydło musi zjeść). Zaburzyło to działanie i środowiska IDE ( kompilowanie pustego programu (dwie puste funkcje setup i loop) generowało błąd, a także płytki - komputer nie rozpoznawał co podłączam do USB. Wykonałem kilka chaotycznych ruchów. Przestawianie deklaracji typu obsługiwanej płytki w ustawieniach IDE, powodowało reset IDE (chyba). Nie wiem co naprostowało ustawienia płytki, raczej nie przekaz słowny, za którymś razem uruchomiła się prawidłowo. Pytanie w związku z tym - czy jest jakiś sposób, by płytkę do ustawień fabrycznych zresetować?
Treker (Damian Szymański) Styczeń 24, 2021 Udostępnij Styczeń 24, 2021 @pawelKO miło słyszeć, że kurs (i sposób tłumaczenia) CI się spodobał 14 godzin temu, pawelKO napisał: Pytanie w związku z tym - czy jest jakiś sposób, by płytkę do ustawień fabrycznych zresetować? Nie ma raczej takiej metody. Jeśli napotykasz problemy z komunikacją i wgrywaniem programu to zawsze warto spróbować wcisnąć przycisk RESET tuż przed próbą wgrania programu. Sytuacja, w której Arduino całkiem nie jest widoczne na PC to już podejrzana sprawa - zacząłbym wtedy standardowo np. od reinstalacji sterowników danego urządzenia. 1
Raccoon Luty 28, 2021 Udostępnij Luty 28, 2021 Rozwiązanie zadania 4.1, czy ktoś zna lepszy sposób na nie wyłączanie alarmu po ponownym zetknięciu kontaktronu niż while(true)? #define LED_R 10 #define LED_G 11 #define LED_B 12 #define CONTACTOR 2 #define BUZZER A5 void setup() { pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); pinMode(CONTACTOR, INPUT_PULLUP); digitalWrite(LED_G, HIGH); } void loop() { if (digitalRead(CONTACTOR) == HIGH) { digitalWrite(LED_R, HIGH); digitalWrite(LED_G, LOW); while (true) { tone(BUZZER, 3700); delay(500); tone(BUZZER, 4300); delay(500); } } } 1
Gieneq Marzec 1, 2021 Udostępnij Marzec 1, 2021 @Raccoon możesz zastosować zmienną która reprezentuje stan układu, w dalszych częściach kursu będziesz miał temat maszyny stanów, to na pewno się do tego przyda. 1
StefanekP Październik 2, 2021 Udostępnij Październik 2, 2021 Mam problem z wykonaniem ćwiczeń z czujnikiem PIR-nie wiem, który pin czujnika to plus zasilania, który to masa, a który-wyjście.
farmaceuta Październik 2, 2021 Udostępnij Październik 2, 2021 3 minuty temu, StefanekP napisał: Mam problem z wykonaniem ćwiczeń z czujnikiem PIR-nie wiem, który pin czujnika to plus zasilania, który to masa, a który-wyjście. A jaki masz ten czujnik(model)? W necie napewno znajdziesz opis wyprowadzen...
StefanekP Październik 2, 2021 Udostępnij Październik 2, 2021 35 minut temu, farmaceuta napisał: A jaki masz ten czujnik(model)? W necie napewno znajdziesz opis wyprowadzen... Teraz zauważyłem , że wyprowadzenia są podpisane na czujniku , tylko że po stronie przykrytej soczewką. 1
Macej98 Maj 8, 2022 Udostępnij Maj 8, 2022 Napisałem taki kod, przerwanie nie działa natychmiastowo. Zanim włączy się czerwona dioda, część programu z 'else' i tak musi najpierw dojść do końca aby została przerwana. Dlaczego tak się dzieje? Gdzie popełniłem błąd? #define R 9 #define G 10 #define B 11 #define K 2 volatile int zmiana=0; void setup() { pinMode(R, OUTPUT); pinMode(G, OUTPUT); pinMode(B, OUTPUT); pinMode(K, INPUT_PULLUP); digitalWrite(R, HIGH); // LOW to swieci bo jest to dioda ze wspolna anodą digitalWrite(G, HIGH); digitalWrite(B, HIGH); attachInterrupt(digitalPinToInterrupt(K), alarm, RISING); } void loop() { if(zmiana==1){ digitalWrite(R, LOW); digitalWrite(G, HIGH); delay(5000); zmiana=0; }else{ digitalWrite(R, HIGH); digitalWrite(G, LOW); delay(1000); digitalWrite(G, HIGH); delay(1000); } } void alarm() { zmiana=1; }
Treker (Damian Szymański) Maj 9, 2022 Udostępnij Maj 9, 2022 @Macej98 witam na forum Przerwanie wykonuje się natychmiastowo - wartość zmiennej ustawiania jest na 1. Jednak efekt tej zmiany zauważysz dopiero, gdy zakończy się poprzedni cykl "migania". Program jest wykonywany, zostaje przerwany, zmienna jest ustawiania na 1, a następnie program wraca do miejsca, w którym został przerwany. Jeśli było to gdzieś wewnątrz "else" to po obsłudze przerwania program tam wróci, aby dokończyć wcześniejsze działanie. 1 1
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »