Skocz do zawartości

int

Użytkownicy
  • Zawartość

    8
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

int zajął 1. miejsce w rankingu.
Data osiągnięcia: 29 czerwca.

Treści użytkownika int zdobyły tego dnia najwięcej polubień!

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Sosnowiec
  • Programuję w
    C/C++
  • Zawód
    Trucker
  • Moje zainteresowania:
    Elektronika, programowanie, itp.

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

int's Achievements

2/10

2/10 (2/10)

17

Reputacja

  1. @ethanak Dzięki wielkie, już mam kilka pomysłów jak to zamontować.
  2. @ethanak W zasadzie racja. Na zewnątrz też mam tylko jedno działające na takiej właśnie zasadzie. Poszukam jeszcze takich ultramałych serw.
  3. @Zakrzewiaczek @ethanak W tym rzecz, że chciałem zachować podstawową funkcjonalność włącznika. Z przekaźnikiem rzeczywiście byłoby prościej, ale straciłbym sam włącznik. Teraz myślę nad instalacją wewnątrz pary miniaturowych siłowników, które potrafiłyby ustawić włącznik w odpowiedniej pozycji nie odbierając moźliwości sterowania manualnego.
  4. @ethanak Na to nie wpadłem, pogrzebię w internetach, może coś trafię.
  5. Cześć! Wymyśliłem sobie, że kinkiety zamontowane po bokach lustra będą włączały się gdy ktoś się do niego zbliży. Wykorzystałem ATTiny, sensor ultradźwiękowy i moduł przekaźnika dla 230V. Budowa: Płytka sterująca i sensor siedzą w obudowie pod półką lustra. Z tyłu przymocowałem zasilacz, moduł przekaźnika i (na górze lustra) fotorezystor. Z obudowy zerka dodatkowo trójkolorowa dioda informująca o stanie układu. Działanie: W stanie spoczynku świeci czerwona dioda, a mikrokontroler, sensor i przekaźnik nie są zasilane. Gdy włączę w pomieszczeniu górne, niezbyt mocne światło fotorezystor zmienia stan wyjścia komparatora, a ten włącza zasilanie pozostałych układów. Dioda zmienia kolor na zielony, a przekaźnik na razie nie włącza światła. Mikrokontroler zaczyna mierzyć dystans z częstotliwością 5Hz i gdy obiekt znajduje się w odpowiednim zakresie lub poza nim odpowiednio włącza lub wyłącza przekaźnik. Przy włączonym dioda zmienia kolor na niebieski. Zgaszenie górnego światła wyłącza wszystko. Powstały dwa problemy: Gdy do lustra zbliży się osoba ubrana w grubą tkaninę, np. sweter dźwięk nie jest odbijany, a rozpraszany i pojawia się masa błędów odczytu. Częściowo poradziłem sobie z tym tematem zliczając poprawne odczyty i włączając światło po 5 poprawnych odczytach w zakresie i wyłączając po 5 poprawnych poza zakresem. Gdy stanę na wprost lustra dźwięk odbija się ode mnie i wraca do sensora dając właściwy pomiar. Jeśli stanę pod kątem 45 stopni to dźwięk odbity ode mnie leci w ścianę, wraca do mnie i dopiero do sensora dając tym samym znacznie większą odległość zmierzoną, zwykle poza zakresem, więc układ czasami głupieje. Podsumowanie: Cały układ działa na tyle zadowalająco, że nie planuję modyfikacji, ale użycie sensora dźwiękowego okazało się niezbyt trafionym pomysłem. Poza tym jestem dumny z projektu bo to pierwszy, który doczekał się obudowy i nie straszy sterczącymi kablami. Pozdrawiam!
  6. Cześć! Zbudowałem automatyczny włącznik światła nad drzwiami wejściowymi do mieszkania, oparty na serwie sterowanym przez ATTiny. Włącznik światła znajduje się w mieszkaniu. Szukanie kluczy bez światła było dość uciążliwe. Wstępnie myślałem o instalacji PIR, ale nie chcę by światło włączali mi mieszkańcy przechodzący klatką schodową, dlatego ostatecznie użyłem kontaktrona zainstalowanego na klamce. Budowa: Kontaktron otwiera się przy naciśnięciu klamki i otwarciu drzwi. Na ścianie nad włącznikiem wisi (na razie bez obudowy) układ sterowania, a przy włączniku zamocowałem serwo, po pierwsze po to, by nie dłubać przy napięciu 230V, a po drugie, by nadal używać włącznika manualnie. Działanie: W stanie spoczynku prąd płynie jedynie przez rezystor 50k. Otwarcie kontaktrona lub wciśnięcie jednego z przycisków powoduje podanie zasilania, na ATTiny i na serwo. I tu zaczyna się magia: na wstępie mikrokontroler zapewnia sobie zasilanie na czas pracy przez ten sam tranzystor, którym został zasilony wstępnie. Następnie sprawdza w jaki sposób został uruchomiony (przyciski i kontaktron są podłączone do wejść). Przyciski realizują funkcje On i Off. On: ustawia serwo w pozycji włączenia, czeka 0.5s, ustawia w pozycji środkowej i czeka 0.5s Off: ustawia serwo w pozycji wyłączenia, czeka 0.5s, ustawia w pozycji środkowej i czeka 0.5s Po wykonaniu sekwencji następuje odcięcie zasilania. Uruchomienie przez kontaktron realizuje procedurę: Czekaj 3s, wykonaj funkcję On, czekaj aż kontaktron zostanie zwarty, odczekaj 10s, wykonaj funkcję Off, wyłącz zasilanie. Sterowanie serwem realizuje się nie ciągłym sygnałem PWM, a pojedynczym impulsem odpowiedniej długości. Trochę o zasilaniu: Mikrokontroler ma podłączone +5V na stałe, a masę przez tranzystor NPN wstępnie zatkany rezystorem ściągającym bazę do masy. Aby go włączyć należy podać na bazę tranzystora stan wysoki. Jeden z pinów ATTiny jest podpięty pod tę bazę, aby po uruchomieniu sam mógł podtrzymać otwarcie tranzystora. Przyciski podają stan wysoki na wybrane wejścia mikrokontrolera i poprzez diody na bazę NPN'a. Diody są po to by stan wysoki nie cofał się z jednego przycisku na drugi i nie informował błędnie mikrokontrolera o tym, że wszystkie przyciski są wciśnięte. W efekcie po naciśnięciu przycisku ATTiny się uruchamia, podaje stan wysoki na bazę NPN'a zapewniając sobie zasilanie i sprawdza po wejściach którym przyciskiem został obudzony. Po wykonaniu zadania podaje na bazę NPN'a stan niski odcinając sobie zasilanie. Trochę inaczej wygląda sprawa kontaktrona. Tu użyłem tranzystora MOSFET, bo jest sterowany napięciem, a nie prądem. Bramka jest podłączona do +5V przez rezystor 50k i do masy przez kontaktron. Gdy ten jest zamknięty, MOSFET też. Po otwarciu kontaktrona na bramce pojawia się wyższy potencjał i otwiera MOSFET'a, a ten tak jak przyciski podaje stan wysoki na wybrane wejście mikrokontrolera i jednocześnie przez diodę na bazę NPN'a. W stanie spoczynku przez rezystor 50k płynie prąd. Gdybym tu użył typowego NPN'a sterowanego prądem, a nie napięciem, rezystor musiałby mieć znacznie mniejszy opór by zapewnić prąd włączenia, więc w stanie spoczynku układ czerpałby więcej energii. Uff, przebrnąłem... Ostatecznie układ działa tak: Podchodzę do drzwi i naciskam klamkę. Po 3 sekundach włącza się światło. Teraz mam 10 sekund na otwarcie drzwi kluczem (zwykle wystarcza). Po otwarciu drzwi odliczanie 10 sekund zostaje zresetowane, więc światło świeci tak długo, jak długo drzwi są otwarte. Po ich zamknięciu odliczanie startuje ponownie i światło gaśnie po 10 sekundach. Podsumowanie: Układ działa od kilku tygodni i nie doczekał się jeszcze ostatecznej wersji i obudowy. W tym czasie usunąłem kilka drobnych problemów. Pierwszym było sterowanie serwem, które nie zawsze działało. Nie wiem z czego dokładnie problem wynikał, ale postanowiłem wysyłać na serwo nie jeden impuls, a serię 5 impulsów imitującą ciągły sygnał PWM. Problem zniknął. Drugim problemem było zasilanie serwa. Za każdym razem gdy chciało wykonać ruch resetowało mi mikrokontroler. Nie umiałem tego spadku napięcia niczym pokonać, więc zbudowałem osobny układ zasilania z 7805 włączany tranzystorem. Nadal testuję, później pomyślę o obudowie i estetyczniejszym montażu elementów. Pozdrawiam!
  7. Cześć! Przedstawiam praktyczną tablicę wyników do gier planszowych na pilota IR. Od dłuższego czasu codziennie grywam w Scrabble, zwykle w składzie dwuosobowym. Spisywanie wyników na papierze i ręczne liczenie było irytujące, a arkusz kalkulacyjny w smartfonie mało praktyczny, dlatego zbudowałem prostą tablicę wyników na ATMega328. Budowa: Z tyłu mamy baterię 9V, która poza zasilaniem pełni funkcję podpórki. Od frontu mamy przejrzysty układ składający się z trzech sekcji: Pierwsza sekcja (od lewej) to zasilanie, czyli 7805 "w swoim naturalnym środowisku", z wyłącznikiem suwakowym. Dalej mamy mikrokontroler ATMega328, również "w swoim naturalnym środowisku", z podczepionym odbiornikiem podczerwieni TSOP31236, oraz podłączoną nóżką pod reset, żeby mógł sam się resetować. Na końcu mamy wyświetlacz LCD, także "w swoim naturalnym środowisku", z potencjometrami od kontrastu i podświetlenia. Działanie Urządzenie "buduje" dodatnią lub ujemną liczbę punktów i wywietla ją w drugiej linii na wyświetlaczu. Po zatwierdzeniu przyciskiem "Play" na pilocie naprzemiennie dodaje punkty graczom. Sumy punktów wyświetlane są w pierwszej linii, a strzałki pokazują czyja teraz kolejka. Zbudowałem wersję dla dwóch graczy bo więcej mi nie potrzeba, ale zawsze można rozbudować. Dodatkowo przycisk wyłączania resetuje cały układ. Program Zamieszczam kod, który jest na tyle prosty, że nie bawiłem się w obszerniejsze komentarze. Nazewnictwo zmiennych załatwia sprawę. #include <LiquidCrystal.h> #include <IRremote.h> LiquidCrystal lcd(9, 10, 5, 6, 7, 8); int wynik1=0,wynik2=0,suma=0; byte gracz=0; bool minus=0; String lin1="",lin2=""; void setup () { digitalWrite(17, HIGH); //pin resetujący mikrokontroler lcd.begin(16,2); IrReceiver.begin(2); lin1.reserve(16); lin2.reserve(16); linia1(); //funkcje budowania i wyświetlania linii na wyświetlaczu linia2(); } void loop () { if(IrReceiver.decode()) { //odbiór i interpretacja kodów if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x16 && IrReceiver.decodedIRData.flags==0) { //flags==0 mówi, że przycisk właśnie wciśnięto, a nie jest trzymany //jest to potrzebne by uniknąć zbędnych powtórzeń suma=suma*10; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x0C && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+1; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x18 && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+2; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x5E && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+3; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x08 && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+4; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x1C && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+5; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x5A && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+6; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x42 && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+7; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x52 && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+8; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x4A && IrReceiver.decodedIRData.flags==0) { suma=suma*10; suma=suma+9; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x0D && IrReceiver.decodedIRData.flags==0) { //zerowanie liczby punktów, np. po błędnym wpisaniu suma=0; minus=0; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x19 && IrReceiver.decodedIRData.flags==0) { //zmiana znaku liczby punktów minus=!minus; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x15 && IrReceiver.decodedIRData.flags==0) { //dodanie punktów aktualnemu graczowi if(gracz==0) { if(minus) { wynik1=wynik1-suma; } else { wynik1=wynik1+suma; } } else { if(minus) { wynik2=wynik2-suma; } else { wynik2=wynik2+suma; } } gracz++; if(gracz==2) { gracz=0; } suma=0; minus=0; } if(IrReceiver.decodedIRData.address==0 && IrReceiver.decodedIRData.command==0x45 && IrReceiver.decodedIRData.flags==0) { //reset mikrokontrolera digitalWrite(17, LOW); } delay(100); IrReceiver.resume(); linia1(); linia2(); } } void linia1() { lin1=" "; if(wynik1<10) { lin1=lin1+" "; } else if(wynik1<100) { lin1=lin1+" "; } if(gracz==0) { lin1=lin1+wynik1+" << "; } if(gracz==1) { lin1=lin1+wynik1+" >> "; } if(wynik2<10) { lin1=lin1+" "; } else if(wynik2<100) { lin1=lin1+" "; } lin1=lin1+wynik2+" "; lcd.setCursor(0,0); lcd.print(lin1); } void linia2() { lin2=" "; if(minus) { lin2=lin2+"-"; } else { lin2=lin2+" "; } lin2=lin2+" "; if(suma<10) { lin2=lin2+" "; } else if(suma<100) { lin2=lin2+" "; } lin2=lin2+suma+" "; lcd.setCursor(0,1); lcd.print(lin2); } Program napisany w Arduino IDE, wgrany przez programator USBasp. Podsumowanie Zrezygnowałem z lutowania układu bo na płytce stykowej jest całkiem solidny i idealnie mieści się w pudełku od Scrabble. Dodanie większej ilości graczy to na chwilę obecną też zbędna sprawa. Całość działa już kilka tygodni i na razie bateria daje radę. Pozdrawiam!
  8. Cześć! Akurat mam coś na warsztacie, to się pochwalę. Na zdjęciu trzy zmiksowane zestawy i zbudowany z nich sterownik serwa pozwalający wybrać jeden z trzech ustawionych kątów. Elektroniką interesuję się od podstawówki, ale dopiero teraz przechodząc kolejne etapy mam okazję pobawić się "namacalnie". Wcześniej tylko programy do symulacji i ostatnie kartki w zeszycie do polskiego. :D Szczęśliwego nowego roku! :)
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.