Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'alarm'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 2 wyniki

  1. 1. Cel i przeznaczenie Celem projektu było zbudowanie kompaktowego urządzenia do ciągłego pomiaru odległości między czujnikiem a rolką papieru w drukarce/urządzeniu poligraficznym. Gdy odległość przekroczy wartość graniczną zapisaną w parametrze $Limit, system uruchamia sygnalizację optyczną (migającą diodę LED) oraz przekazuje komunikaty na wyświetlaczu LCD. Zadaniem układu jest wczesne informowanie obsługi o zbliżającym się wyczerpaniu papieru, co pozwala zaplanować wymianę rolki bez przestojów. Urządzenie może pracować w środowisku produkcyjnym – obudowa zabezpiecza elektronikę przed uszkodzeniami mechanicznymi i kurzem. Uwaga dot. platformy sterującej: w fazie prototypu testy prowadzono na Arduino Uno, natomiast wersja docelowa została zrealizowana na Arduino Nano (ATmega328) z nakładką terminalową (shield) dla wygodniejszego okablowania i kompaktowej zabudowy. 2. Zasada działania Ultradźwiękowy czujnik HC‑SR04 generuje krótkie impulsy dźwiękowe i mierzy czas powrotu fali odbitej od powierzchni rolki. Na podstawie zmierzonego czasu obliczana jest odległość. Wynik pomiaru jest cyklicznie przesyłany do mikrokontrolera (Arduino Nano), który: porównuje aktualną odległość z wartością $Limit ustawianą potencjometrem (rezystorem nastawnym) na panelu, steruje diodą LED – przy przekroczeniu limitu uruchamia miganie, prezentuje użytkownikowi kluczowe dane na wyświetlaczu LCD 2×16 poprzez interfejs I²C (konwerter LCM1602). Typowe komunikaty na LCD: bieżąca odległość od rolki, aktualna wartość parametru $Limit, komunikat alarmowy: „Poza limit ($Limit), nowa rolka” po przekroczeniu progu. Aby zapewnić stabilność wskazań, w programie zastosowano proste uśrednianie kilku kolejnych pomiarów (filtrację), co ogranicza wpływ pojedynczych zakłóceń akustycznych. Miganie diody jest wyraźne i dobrze widoczne z typowej odległości stanowiska operatora. 3. Elementy i wykonanie mechaniczne Konstrukcja mieści się w obudowie G205CMF (poliwęglan, 115×65×55 mm, IP65). Obudowa posiada otwory wyłącznie w miejscach niezbędnych do prawidłowej pracy czujnika i wyprowadzeń przewodów, co minimalizuje wnikanie zanieczyszczeń. Zastosowano: Arduino Nano (ATmega328) z nakładką terminalową (shield) – łatwe przyłącza przewodów, czujnik HC‑SR04, wyświetlacz LCD 2×16 + konwerter I²C LCM1602, potencjometr helipot POT2218M‑10K (wieloobrotowy, charakterystyka liniowa) do regulacji $Limit, zespół sygnalizacji optycznej: dioda LED DLA/6SRD (zestaw 6 diod w korpusie 20 mm; wykorzystywane są 3 diody ze względu na minimalizację przewodów), przewody sygnałowe 2×15 m do połączenia zespołu diod ze sterownikiem, magnesy neodymowe w module głównym i diodzie – umożliwiają szybki, bez narzędziowy montaż i repozycjonowanie. 4. Zasilanie i interfejs serwisowy Urządzenie może być zasilane z gniazda USB typu B albo z baterii 9 V umieszczonej w dedykowanym koszyku. Port USB pełni również funkcję wejścia serwisowego do wgrywania i aktualizacji oprogramowania. Do obsługi wyświetlacza zastosowano bibliotekę LiquidCrystal_I2C (załączona do projektu). 5. Montaż i uruchomienie Montaż mechaniczny: zamocować obudowę i moduł diody LED za pomocą magnesów w miejscu zapewniającym stabilny pomiar – czujnik powinien „widzieć” gładką część rolki pod możliwie prostopadłym kątem. Okablowanie: podłączyć przewody sygnałowe zespołu diod, upewnić się, że nie są narażone na przetarcia. Zasilanie: podłączyć USB B lub włożyć baterię 9 V. Kalibracja $Limit: na pełnej rolce ustawić potencjometrem próg tak, aby sygnalizacja nie była aktywna. Następnie stopniowo zmniejszać papier na rolce (lub odsunąć rolkę), aż uzyska się oczekiwany punkt zadziałania i skorygować ustawienie. Weryfikacja: sprawdzić poprawność komunikatów na LCD oraz działanie migania po przekroczeniu limitu. 6. Eksploatacja i konserwacja Okresowo czyścić okienko czujnika z kurzu i pyłu miękką ściereczką. Sprawdzać mocowanie magnesów i stan przewodów, zwłaszcza w pobliżu ruchomych elementów maszyny. W razie zmiany średnicy nowych rolek lub innej konfiguracji stanowiska ponownie skalibrować $Limit. Nie kierować strumienia sprężonego powietrza bezpośrednio w czujnik – może to zakłócać pomiary. 7. Ograniczenia i zalecenia Czujniki ultradźwiękowe najlepiej współpracują z twardymi, gładkimi i prostopadłymi powierzchniami. W przypadku bardzo małych odległości lub powierzchni pochylonych pomiar może być mniej stabilny – w takich sytuacjach zaleca się ponowną kalibrację i ewentualną korektę położenia czujnika. Rekomendowany dystans roboczy to zakres, w którym wskazania są powtarzalne przy typowych warunkach hałasu akustycznego linii. 8. Testy odbiorcze Po montażu wykonano testy: test poprawności pomiaru (seria odczytów w kilku znanych dystansach), test progu $Limit (sprawdzenie, czy miganie i komunikat uruchamiają się przy przekroczeniu ustawionego dystansu), test czytelności LCD i reakcji potencjometru, test ciągłości przewodów zespołu diod na pełnej długości 2×15 m. 9. Załączniki Zał. 1: schemat połączeń elementów – schemat.pdf Zał. 2: kod programu wgrany do procesora – project.cpp Zał.2 Kod programu do Arduino: #include <Wire.h> #include <LiquidCrystal_I2C.h> #define TRIG_PIN 8 #define ECHO_PIN 7 #define LED_PIN_1 13 // Definiujemy pin dla pierwszej diody LED #define LED_PIN_2 2 // Definiujemy pin dla drugiej diody LED #define LED_PIN_3 3 // Definiujemy pin dla trzeciej diody LED #define POT_PIN A7 // Definiujemy pin dla potencjometru LiquidCrystal_I2C lcd(0x27, 16, 2); // Ustawiamy adres LCD unsigned long lastDisplayTime = 0; // Przechowywanie czasu ostatniego wyświetlenia bool displayState = true; // Stan wyświetlania informacji float Limit = 60.0; // Ustawienie domyślnego limitu na 60 cm void setup() { Serial.begin(9600); // Inicjalizacja komunikacji szeregowej pinMode(TRIG_PIN, OUTPUT); // Trig ustawiamy jako wyjście pinMode(ECHO_PIN, INPUT); // Echo ustawiamy jako wejście pinMode(LED_PIN_1, OUTPUT); // Ustawiamy pin pierwszej diody LED jako wyjście pinMode(LED_PIN_2, OUTPUT); // Ustawiamy pin drugiej diody LED jako wyjście pinMode(LED_PIN_3, OUTPUT); // Ustawiamy pin trzeciej diody LED jako wyjście digitalWrite(TRIG_PIN, LOW); digitalWrite(LED_PIN_1, LOW); // Upewniamy się, że diody LED są na początku wyłączone digitalWrite(LED_PIN_2, LOW); digitalWrite(LED_PIN_3, LOW); lcd.init(); // Inicjalizacja LCD lcd.backlight(); // Włączenie podświetlenia LCD } void loop() { long Time; float Distance; // Odczyt z potencjometru i przekształcenie na wartość limitu int potValue = analogRead(POT_PIN); // Odczyt wartości z potencjometru (0-1023) Limit = map(potValue, 0, 1023, 30, 94); // Mapowanie wartości z zakresu 0-1023 na zakres 30-94 digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); Time = pulseIn(ECHO_PIN, HIGH); // Pomiar czasu trwania impulsu zwrotnego z pinu Echo // Oblicz odległość w centymetrach Distance = (Time * 0.0343) / 2; // Wydrukuj wynik w centymetrach na konsoli szeregowej Serial.print("Odległość: "); Serial.print(Distance); Serial.print(" cm, Limit: "); Serial.print(Limit); Serial.println(" cm"); // Dodaj nową linię po wydruku // Sprawdzenie odległości i wyświetlanie odpowiedniego komunikatu lcd.clear(); // Czyszczenie wyświetlacza if (Distance > Limit) { // Zmiana warunku na użycie zmiennej Limit lcd.setCursor(0, 0); lcd.print("Poza limit "); lcd.print(Limit); lcd.setCursor(0, 1); lcd.print("Nowa rolka !!!"); // Mryganie diodami LED co pół sekundy static unsigned long lastBlinkTime = 0; // Przechowywanie czasu ostatniego mrygnięcia static bool ledState = LOW; // Stan diod LED unsigned long currentMillis = millis(); // Zapisanie bieżącego czasu if (currentMillis - lastBlinkTime >= 500) { // Mryganie co 500 ms lastBlinkTime = currentMillis; // Zaktualizuj czas ostatniego mrygnięcia ledState = !ledState; // Zmień stan diod LED digitalWrite(LED_PIN_1, ledState); // Ustaw nowy stan pierwszej diody LED digitalWrite(LED_PIN_2, ledState); // Ustaw nowy stan drugiej diody LED digitalWrite(LED_PIN_3, ledState); // Ustaw nowy stan trzeciej diody LED } } else { digitalWrite(LED_PIN_1, LOW); // Zgaśnąć wszystkie diody LED, gdy odległość jest mniejsza lub równa Limit digitalWrite(LED_PIN_2, LOW); digitalWrite(LED_PIN_3, LOW); // Wyświetlanie informacji na LCD co 2 sekundy unsigned long currentMillis = millis(); if (currentMillis - lastDisplayTime >= 2000) { // Co 2000 ms lastDisplayTime = currentMillis; // Zaktualizuj czas ostatniego wyświetlenia displayState = !displayState; // Zmień stan wyświetlania } if (displayState) { lcd.setCursor(0, 0); lcd.print("Zmierzono:"); lcd.setCursor(0, 1); lcd.print(Distance); lcd.print(" cm "); // Dodaj spacje na końcu, aby wyczyścić wcześniejsze znaki } else { lcd.setCursor(0, 0); lcd.print("Limit:"); lcd.setCursor(0, 1); lcd.print(Limit); // Wyświetlanie aktualnego limitu lcd.print(" cm "); // Dodaj spacje na końcu, aby wyczyścić wcześniejsze znaki } } delay(2000); // Krótkie opóźnienie przed następnym pomiarem } schemat.pdf
  2. Wstęp Od poprzednich właścicieli mieszkania dowiedziałem się, że w piwnicy zdarzają się kradzieże. W związku z tym postanowiłem zbudować fotopułapkę na złodzieja: urządzenie, które po wykryciu ruchu robi zdjęcia i wysyła je na serwer. Serwer natomiast powiadamia mnie mailowo (z załączonymi zdjęciami) o wykryciu ruchu. Finał tej historii był taki, że... nie zdążyłem. Jakiś miesiąc przed ukończeniem projektu było seryjne włamanie, którego także padłem ofiarą Wracając do meritum: Hardware - ESP32-CAM - Arduino Pro Mini (klon) - moduł czujnika ruchu PIR HC-SR501 - moduł czytnika RFID MRFC522 - akumulator żelowy 6 V 4,5 Ah - obudowa Kradex Z2AW - przetwornica mini step-down 360 - Raspberry Pi 4 (serwer) Zasilanie W piwnicy nie ma gniazdka, więc założyłem, że zasilanie będzie akumulatorowe. Nie chciałem kombinować z wpinaniem się w oprawę oświetleniową i ryzykować oskarżenie o kradzież prądu. Gdybym nawet miał dostęp do prądu, to i tak dobrze byłoby zastosować akumulator buforowy. No może uprościłoby to projekt o tyle, że ESP, które jest nadrzędnym modułem urządzenia, mogłoby pracować w sposób ciągły, bez usypiania. Napięcie akumulatora obniżane jest do 3,3 V przez małą, tanią, chińską przetworniczkę step-down i... w zasadzie tyle. Komunikacja Miałem to wielkie szczęście, że w piwnicy łapie mi zasięg domowego WiFi. Dzięki temu odpadło kombinowanie z LoRa czy GSM. ESP "gada" z serwerem z wykorzystaniem socketów TCP. Schemat działania ESP jest w trybie deepsleep z którego budzi się co 2 godziny w celu zaraportowania napięcia akumulatora, albo od przerwania wywołanego sygnałem z czujnika ruchu. Jeśli wybudzenie wywołał czujnik ruchu, ESP w pętli robi zdjęcia i wysyła je do serwera w mieszkaniu. Wszelki zapis na karcie SD odpadał już w założeniach, bo złodziej może urządzenie zniszczyć albo po prostu zabrać ze sobą. Zdjęcia przesłane na serwer są już bezpieczne. Wyjście z pętli następuje w dwóch przypadkach: gdy czujnik PIR przestanie wykrywać ruch, albo gdy obecność zostanie zautentyfikowana przez przyłożenie tagu RFID do czytnika. Serwer ma następujące zadania: stanowi sprzętowy watchdog układu - kontroluje, czy ESP skomunikuje się przynajmniej raz na 4 godziny oraz oczywiście wysyła powiadomienia mailowe o detekcji. Powiadomienia mailowe są dwa - pierwsze zawsze po wykonaniu dwóch zdjęć (chyba że wcześniej nastąpi autentykacja), kolejne to już transfer wszystkich zdjęć jakie urządzenie zdążyło wykonać i przesłać do wyjścia z pętli. Jeśli uwierzytelnię się przez zeskanowanie breloka RFID, to drugi mail ze zdjęciami nie jest wysyłany - obrazki usuwane są z serwera. Jaką rolę ma w tym Arduino, skoro wszystko ogarnia ESP? Prostą, zabrakło mi pinów w ESP, żeby podłączyć wszystkie peryferia czytnik RFID komunikuje się po SPI, więc zabiera ich sporo. Arduino jest interfejsem, który odczytuje i przechowuje UID odczytanego tagu, a na żądanie (otrzymane z ESP przez Serial), podaje tę wartość. Dodatkowo mierzy napięcie baterii (również w odpowiedzi na komendę Serial) oraz daje akustyczny sygnał buzzerem, gdy odczyta tag. Nie bawiłem się nawet w usypianie Arduino. Jest ono podłączone do masy przez tranzystor i ESP załącza je sobie przy starcie i wyłącza gdy nie jest już potrzebne. Ciekawym problemem, który pojawił się pod koniec realizacji projektu było fałszywie pozytywne wzbudzanie czujnika ruchu, gdy ESP wybudzało się "z timera". W Internecie były dziesiątki wątków sygnalizujących ten problem z modułem HC-SR501. Dwa największe tropy to było zasilanie (spory pobór prądu przy starcie ESP, gdy łączy się z WiFi) oraz sam sygnał WiFi. To drugie było łatwiejsze do zdebugowania i okazało się od razu celnym strzałem. Pomogło stworzenie ekranu z folii aluminiowej wokół tylnej części modułu PIR. W montażu wspomagałem się drobnymi elementami, które sam projektowałem i drukowałem w 3D - panel przedni, tylna pokrywa PIR, uchwyt montażowy baterii, ramka montażowa czytnika RFID. Żeby było trochę druciarstwa to w niektórych miejscach wspomógł mnie hot-glue i... sznurek. Oprogramowanie ESP32-CAM - Micropython Raspberry Pi (serwer) - Python Arduino - C++ (Arduino) Jeśli ktoś jest zainteresowany, mogę upublicznić repozytorium na Githubie. Jeszcze tego nie zrobiłem, bo musiałbym wyczyścić kod z danych osobistych, a najlepiej przenieść te zmienne do oddzielnego pliku. Zdjęcia front wnętrze bonus - jednooki Project Manager Wydawało mi się że mam gdzieś zdjęcie z zamkniętą obudową, ale nie znalazłem. W sumie wygląda to prawie jak oryginalna obudowa, bo oprócz wystających z panelu frontowego obiektywu kamery i czujnika ruchu, na zewnątrz nie ma żadnych elementów. fot. Kradex
×
×
  • Utwórz nowe...