Elektroda.pl
Elektroda.pl
X
Elektroda.pl
W2 Usługi badań i pomiarów
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Samoregulująca się żaluzja Arduino.

14 Maj 2016 19:57 1065 9
  • Poziom 6  
    Witam

    Na projekt kompetencyjny wymyśliłem samoregulującą się żaluzję na bazie Arduino. Mam już wykonaną makietę z drewna z zamontowanym serwomechanizmem oraz kod programu na Arduino, chociaż nie w całości.
    I tu zwracam się do Was z zapytaniem...
    Otóż regulowanie kąta obrotu serwa odbywa się za pomocą trywialnej funkcji servo.write(kąt) która wykonuje się gdy zostanie spełniony uprzednio warunek if w którym określony jest poziom natężenia światła. Wypełniłem cały zakres natężenia światła od 0 do wartości 400 lux który to zakres odpowiada ruchowi serwa od pozycji gdy łopatki żaluzji są całkowicie na siebie nałożone (nie przepuszczają światła) aż do pozycji gdy są one poziomo ułożone (horyzontalnie)

    A co jeśli obniż się poziom natężenia światła? Jak spowodować by łopatki żaluzji zaczęły opadać w dół? Jaki mam wpisać zakres do if skoro jest on już cały "wykorzystany" na otwieranie żaluzji. Zakresu nie mogę powtórzyć w warunkach if bo program zgłupieje (dla dwóch takich samych warunków w if będzie wykonywana różna akcja: raz serwo odchyl w lewo o ileś stopni, raz w prawo o ileś).

    Pomyślałem czy nie można by było tego zrobić tak, że Arduino obliczałoby pochodną wykresu zmieniających się wartość natężenia światła. Odpowiednia wartość pochodnej odpowiadałaby regulacji o określony kąt. Gdy pochodna dodatnia to natężenie światła rośnie więc łopatki idą w gorę, gdy pochodna ujemna (natężenia światła spada) i łopatki opadają. Przekopałem internet ale nic nie znalazłem apropo wyznaczania wykresu przez Arduino i liczenie pochodnej.

    Czy ktoś ma jakiś pomysł jak to inaczej rozwiązać lub może coś znalazł apropo tej pochodnej?

    Zamieszcze jeszcze kod:

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod


    Z góry dzięki za pomoc:)
  • W2 Usługi badań i pomiarów
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 35  
    Jakub17 napisał:
    Witam

    Na projekt kompetencyjny wymyśliłem samoregulującą się żaluzję na bazie Arduino. ................

    A co jeśli obniż się poziom natężenia światła? Jak spowodować by łopatki żaluzji zaczęły opadać w dół? Jaki mam wpisać zakres do if skoro jest on już cały "wykorzystany" na otwieranie żaluzji. Zakresu nie mogę powtórzyć w warunkach if bo program zgłupieje (dla dwóch takich samych warunków w if będzie wykonywana różna akcja: raz serwo odchyl w lewo o ileś stopni, raz w prawo o ileś).

    Pomyślałem czy nie można by było tego zrobić tak, że .............
    Czy ktoś ma jakiś pomysł jak to inaczej rozwiązać lub może coś znalazł apropo tej pochodnej?




    Stosowanie tu instrukcji warunkowych 'IF...' nie jest najlepszym wyjściem. Stosujesz je dla określonych pojedynczych zdarzeń lub skończonej ich grupy, albo pewnego zakresu obserwowanego parametru traktowanego jako jedno zdarzenie. Ty potrzebujesz raczej regulację arbitralną czyli ciągłą, zależną od zmieniającego się oświetlenia.
    Można wzorowac się na przykładzie kontroli potencjometrem wielkości kąta wyhylenia serva.
    Róznica będzie tylko w sposobie pomiaru napięcia; zamiast czytac 'pot.' - czytasz natężenie światła przez ADC . Reszta jest tylko odpowiednie zmapowanie wyniku odczytu do kąta otwarcia serva/żaluzji.
    Do poprawnego funkcjonowania, servo potrzebuje powtarzalnych (co 20 msec) impulsów o określonym czasie trwania, co załatwi ci odpowiednia includowana library.

    e marcus
  • W2 Usługi badań i pomiarów
  • Poziom 6  
    emarcus napisał:
    Jakub17 napisał:





    Róznica będzie tylko w sposobie pomiaru napięcia; zamiast czytac 'pot.' - czytasz natężenie światła przez ADC . Reszta jest tylko odpowiednie zmapowanie wyniku odczytu do kąta otwarcia serva/żaluzji.
    Do poprawnego funkcjonowania, servo potrzebuje powtarzalnych (co 20 msec) impulsów o określonym czasie trwania, co załatwi ci odpowiednia includowana library.

    e marcus


    Nie rozumiem tego co tutaj napisaleś. Mógłbyś troche rozszerzyć apropo tego analogii potencjometru? Dlaczego uważasz że serwo potrzebuje impulsów do sterowania. Przyjęte rozwiązanie przez ze mnie jest złe?

    Dodano po 49 [minuty]:

    emarcus

    Chyba już rozumiem co miałeś na myśli...
    Poczytałem o funkcji map() Arduino.

    Chcesz przenieść wartości natężenia światła dzięki tej funkcji na wartości które umożliwiają sterowanie serwem. Takie sterowanie będzie pozwalało w sposób ciągły regulować obroty serwa.

    Nie rozumiałem słowa "mapownie" dlatego nie wiedziałem o co Ci chodzi, ale po znalezieniu funkcji map() już jest wszystko jasne, dzięki:)
    Postaram się teraz to wykonać
  • Użytkownik usunął konto  
  • Poziom 6  
    Piotrus999

    Nie wiem jak wprowadzić tą histereze żeby serwo cały czas nie pracowało... jakieś wskazówki jak to zrobić?

    Dodano po 6 [minuty]:

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

    lux - zmienna odpowiedzialna za natężenie światła
    To fragment kodu który odpowiada za prace ciągłą. Niestety serwo ma pracę trochę szarpaną. Piotrus_999 wiesz co zrobić żeby upłynnić ten ruch?
  • Użytkownik usunął konto  
  • Poziom 6  
    Wprowadziłem delaye między myservo.write(maped);
    Dzięki temu serwo ma czas na zajęcie pozycji odpowiadającej pomiarowi i nie ma takich szarpań.

    No w takim razie Piotrus999 powiedz co proponujesz. Jak Ty wykonałeś sterowanie? I czy da się to zrobić na bazie Arduino?
  • Użytkownik usunął konto