Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 25.05.2019 we wszystkich miejscach

  1. 2 punkty
    A co będzie jak zamienisz miejscami funkcje loop() i loope()?
  2. 1 punkt
    Mówią jakby Ameryka nie szpiegowała nikogo :] Amerykańska Hipokryzja nie zna granic. Każdy kto używa amerykańskiego oprogramowania o zamkniętym kodzie musi się liczyć ze szpiegostwem (a raczej być tego pewnym). Nie tylko w tym najpopularniejszym jak windows itp. Takie kwiatki znajdowano nawet w linuksie, w kawałkach zamkniętego kodu jak np. w jednym z protokołów szyfrujących udostępnionych przez jedną z amerykańskich agencji na rzecz społeczności ;p Była to dość głośna afera swego czasu. Każdy kto posiada telefon komórkowy jest szpiegowany i to nie tylko smartfon. Telefon taki nie musi być nawet włączony, Już nokia 3210 miała możliwość uruchomienia mikrofonu i podsłuchiwania otoczenia. Wy jako elektronicy i po części programiści powinniście o tym wiedzieć najlepiej. Czasem myślę, że nawet jadąc na bezludną wyspę w samych majtkach i sandałach mogło by się okazać, że jesteś podsłuchiwany oczywiście wszystko dla twojego dobra, bo mogłeś się tam znaleźć nie celowo przecież lub co gorsza próbować się ukryć przed wymiarem sprawiedliwości. Oczywiście, według amerykanów takie szpiegostwo jest ok, bo to przecież wszystko dla naszego dobra i przeciw tym paskudnym terrorystom czy "bandyckim" krajom jak Chiny, czy Rosja. Wszyscy inni oczywiście są jeszcze gorsi jeśli śmią się temu przeciwstawiać i sami zaczynają podsłuchiwać Amerykę, jakież to oni łajdactwa przeciw nim planują. Bardzo dobrze wiedzą o tym, że Amerykanie nie mają honoru i nigdy jeszcze nikomu wojny nie wywołali. Zawsze jedynie napadają na wybrany kraj, bez ostrzeżenia. Grabiąc go i łupiąc. To już ich tradycja począwszy od odebrania ziem tym samym sposobem indianom. Teraz oczywiście robią to zawsze pod przykrywką obrony demokracji i walki z terroryzmem, czy totalitaryzmem. Pytanie tylko, czy to samo w sobie nie jest totalitaryzmem? No ale to już temat na inna dyskusję. Prawda jest taka, że ta cała afera została sztucznie napędzona, aby podciąć nogę chinom i przy okazji mieć pretekst wypowiedzieć im podpisane wcześniej umowy, czy tez w razie potrzeby nakładać różne sankcje. To tylko świadczy o ich desperacji i że wojnę handlową z Chinami przegrywają. To niestety efekt socjalizmu i życia na kredytach trawiących jak rak zachodnie społeczeństwa. Tej wojny w ten sposób nie da się wygrać niestety,
  3. 1 punkt
    Witam, W koncu udalo mi sie doprowadzic czesc mechaniczna "robota" do etapu, kiedy mozna go zaprezentowac na filmie. Konstrukcja jak wiele innych nieco wzorowana na kinowych "bohaterach". Troche wyroznia sie zastosowaniem komutatorow w dloniach (przez co maja ciagly obrot) oraz wydluzaniem szyi. Nieztety sterowannie na chwile obecna nie dziala poprawnie, po prostu mi nie wyszlo - na filmie powycinane sa fragmenty kiedy robot (a wlasciwie jego sterownik) zastanawia sie okolo 3 sekung przed kazdym ruchem. Jako napedy zastosowalem silniki DC z przekladnniami. Silniki maja po 2 wylaczniki krancowe zabezpieczajace na koncach ruchu. Zasilanie - akumulator 12V 12Ah.
  4. 1 punkt
    @RebelMan91 Arduino nie jest stworzone do odtwarzania plików MP3. Można to rozwiązać za pomocą dodatkowej nakładki, która zajmie się odtwarzaniem plików z karty. Właściwie dałoby się to pewnie nawet zrobić bez Arduino, wystarczyłoby odpowiednio wykorzystać tego typu płytkę: https://www.sparkfun.com/products/13720 Podaję w ramach podpowiedzi jakbyś nie znalazł nikogo do pomocy
  5. 1 punkt
    Skąd wziąłeś tę bibliotekę i dlaczego nie używasz normalnej (DHT)? Poza tym nawet nie znając biblioteki a czytając tylko komentarze w kodzie - masz NodeMCU z prockiem 16 MHz?
  6. 1 punkt
    jestem za cienki w te klocki, ale podmieniłem w bibliotece domyślny adres na obecnie wskazywany 0x11 i z powrotem czujnik pokazuje normalna i prawidlową temperaturę. Do czujnika, który ma stary (już nie domyślny adres 0x5A) odwołuję się w kodzie w ten sposób: IR_Thermometer_Sensor_MLX90614 czujnik_nr_2 = IR_Thermometer_Sensor_MLX90614(0x5A); szkoda, że nie wiem jak to działa z tymi adresami, ale osiągnąłem swój cel pomiaru z dwóch czujników na jednej magistrali I2C
  7. 1 punkt
    Przypomnij sobie wzór na moc w ruchu obrotowym. Może wtedy, opierając się na podanych parametrach (np. moc przy jakichś rpm) i posługując się kalkulatorem 4-działaniowym znajdziesz moment. Co rozumiesz przez sposób sterowania silnikiem? Chodzi o jakieś algorytmy regulacji czy urządzenia do sterowania silnikami? A sterowanie obrotami - to chodzi o kierunek czy prędkość? No i na koniec: o jakim type silnika myślisz? Zwykły DC czy coś nowszego?
  8. 1 punkt
    Tak, tylko to jest znów pewien przypadek szczególny w którym liczby jakie dodajesz do ułamkowego akumulatora fazy (tak, to jest właśnie on ) będą miały postać 1/2, 1/3, 1/4, 1/5 itd. Wtedy rzeczywiście będziesz odczytywał tę samą próbkę 2, 3, 4, 5 itd razy, ale po co się ograniczać? Ani to w niczym nie upraszcza programu ani nie umożliwia generowania częstotliwości w szerokim zakresie z małym rastrem. A jeśli chcesz mieć krok 0.625 (czyli 5/8) albo 2.828125 (czyli 2 i 53/64)? Obie te liczby mają skończone rozwinięcie dwójkowe na mniej niż 8 bitach i zaaplikowane do naszego DDSa z bezwzględną precyzją dadzą odpowiednio 97.65625Hz i 441.89453125Hz. A przecież to prosty programik z jedną, 16-bitową zmienną licznika gdzie za pomoca trywialnego dodawania niecałkowitych kroków dostajesz zakres od 0.61Hz (0x0001) do 2.5kHz (0x1000) z rastrem 0.61Hz. Pomysł jest tak prosty i efektywny, że żal go nie wykorzystać, prawda? Jak rozumiem Twój pomysł polega na tym, że po prostu odliczamy co ile próbek wysłać kolejną pozycję z tablicy. Zadziała, ale nie wiem co to daje, bo ani to prostsze ani lepsze. Akumulator fazy robi to, i wiele więcej. Wszystko zależy od liczby jaką dodajesz. Bardzo istotnym elementem DDSa jest analogowy filtr wyjściowy. Musi to być porządnie zrobiony układ tnący ostro trochę poniżej połowy częstotlwości próbkowania. W prostych zabawkach można stosować jakieś kondensatorki i oporniki, w lepszych urządzeniach dawać filtry aktywne a w tych najbardziej wypasionych trzeba sięgać po scalone filtry z przełączanymi pojemnościami. Takie coś kosztuje z 10 USD, ale za to jest filtrem Czebyszewa np. 8 rzędu więc tnie ostro, a jego częstotlwość ustalasz zegarem cyfrowym. Bez takiego stopnia wyjściowego DDS produkuje przebiegi bardzo zniekształcone i zawierające sporo harmonicznych, których zawartość jest niestety różna w zależności od ustawionego kroku. Tak więc niektóre częstotliwości z DDSa będą ładniejszą sinusoidą a niektóre będą poszarpane, co jest chyba zgodne z intuicją. Filtr analogowy to wycina i każdemu daje równą szansę Przy okazji: puszczając kilka DDSów równolegle, korzystających oczywiście wspólnie z tego samego przerwania od jednego timera i tym samym jednej, wspólnej częstoliwości próbkowania oraz sumując ich sygnały wyjściowe jeszcze w procesorze, można zupełnie spokojnie zrobić polifoniczne organki np. na Arduino mogące grać rozbudowane akordy a nie tylko "Wlazł kotek na płotek" jednym palcem. A mając kilka tablic różnych sygnałów, można łatwo przełączać "brzmienia", bo jednak czysta sinusoida jest akustycznie mało ciekawa..
  9. 1 punkt
    Korzystałem kilkukrotnie z Elecrow. Koszt przesyłki to ok 8 dolarów najmniej. Co ciekawe zawsze szło DHL'em do granicy, od granicy pocztą. PCB dostawałem po ok 2 tygodniac, łącznie z produkcją, żaden podatek vat nie był doliczany. Obecna promocja to niestety tylko 1 zakup do koszyka za .99 centów. Można dorzucić kolejne zamówienia, ale już w wyższych cenach. Zatem za ok 14 dolarów z przesyłką można zamówić 20 płytek PCB - uważam, że warto.
  10. 1 punkt
    Dobrze przeczytałeś: urządzenia wiszące w jednej szynie I2C muszą mieć różne adresy. W przypadku tych czujników musisz użyć programu do zmiany adresu w jednym z czujników. Nie wiemy jakiego programu dokładnie użyłeś i w jaki sposób, ale dopóki tego nie załatwisz, nie zadziała więcej jak jeden czujnik. Może pokaż jakiś link albo wrzuć kod tego co miało zmienić adres czujnika i opisz krok po kroku co robiłeś. Adres czujnika przechowywany jest w jego wewnętrznej pamięci EEPROM i jest jak najbardziej możliwa jego zmiana.
  11. 1 punkt
    Współczynnik 900 o którym wspomniałem uwzględnia średnie roczne nasłonecznienie w Polsce. Średnie, a więc jeśli już tu bilans się nie zapina, to na pewno będą dziury w działaniu. Dodatkowo różnice między latem z zimą (średnio w miesiącu) są praktycznie dwukrotne więc zimą będzie jeszcze gorzej niż to wynika ze średniej rocznej. A gdy przechodzimy do pojedynczych dni to wiadomo, bez śledzenia pozycji Słońca sensowną moc dostajesz tylko przez kilka godzin bezchmurnego dnia i w tym czasie musisz doładować akumulator żeby starczył przynajmniej na najbliższy wieczór, noc i poranek. Tak by było gdybyś miał wysokosprawne przetwornice impulsowe pracujące w trybie MPPT i Słońce w zenicie przez kilka godzin. Wtedy moc wejściowa z panelu wpływałaby w 90% do akumulatora. W Twoim układzie masz taniutką ładowarkę liniową, gdzie 120mA zamienia się na 120mA a cały naddatek napięcia idzie w ciepło. Tak więc z czysto teoretycznie dostępnych 660mW korzystasz średnio jedynie z 3.7V*120mA = 440mW. Musisz rozumieć cechy układów które stosujesz, nic za darmo: naprawdę będzie dobrze, jeśli ta bateria naładuje 800mAh ogniwo w 2-3 słoneczne dni bez uwzględniania jednoczesnej pracy systemu i jego poboru mocy. BTW: Napisałem "tutaj nie można posługiwać się prądami tylko mocami" i musisz to robić konsekwentnie. W przypadku gdy wstawiasz sprawne układy DCDC dopasowane (pod względem idei korzystania a nie tylko co do prądu i napięcia) do paneli słonecznych, możesz liczyć na 90% sprawności. Jeżeli stosujesz rozwiązania "budżetowe" to musisz tym bardziej uwzględnić ich marną sprawność (i straty mocy) we wszystkich obliczeniach.
  12. 1 punkt
    OK, to REDO FROM START, jak mawiały stare komputery (tłumaczenie ZACZNIJ Z POCZĄTKU wydaje mi się równie fajne). Zatem przez chwilę przestań myśleć o PWM. Zamiast tego załóżmy, że na wyjściu z procesora masz DAC czyli przetwornik cyfrowo-analogowy. Jak wyślesz do niego liczbę 0 to dostajesz 0V a gdy wyślesz powiedzmy 255 to dostajesz jego pełny zakres czyli np. 5V. Wygląda, że Twój DAC jest 8-bitowy Żeby nie trzeba było wciąż liczyć kosztownych funkcji trygonometrycznych, w pamięci masz stablicowany jeden okres sinusa (albo innego przebiegu, który chcesz wygenerować, to może być trójkąt, piła, impuls Gaussa, cokolwiek). Powiedzmy, że zrobiłeś tablicę o długości 64 próbki, czyli policzoną z krokiem 2*PI/64. Ponieważ byłeś sprytny, to wartości tablicy (gołe sinusy czyli zakres -1..+1) od razu pomnożone są przez 127 i do wszystkich dodałeś 128. Dzięki temu liczby jakie z niej czytasz pasują wprost do Twojego DAC-a: 1 to najmniejsza możliwa wartość, bo (-1*127)+128 = 1, 128 to poziom odniesienia, wartość "spoczynkowa" - to byś wysyłał do DACa gdybyś nie generował żadnego przebiegu, (0*127)+128 = 128 255 to max tego co DAC może przyjąć, bo (+1*127)+128 = 255. No a teraz zrobiłeś licznik i zaczynasz w pętli wysłać kolejne wartości odczytane z tablicy do DACa. Program napisałeś tak, że np. dostajesz przerwanie od jakiegoś timera co 100us czyli z częstotliwością 10kHz. Cały okres sinusa wyśle się zatem po 64 przerwaniach (i zliczeniu licznika od 0 do 63), a zatem po 64*100us=6.4ms. Wyjściowy sygnał będzie miał zatem częstotliwość 1/6.4ms=156.25Hz. Na razie jest prosto, prawda? Zatem chcesz zmienić częstotliwość. Oczywistym rozwiązaniem wydaje się zmiana częstotliwości przerwań od timera, ale to zły pomysł, bo systemy lubią stałe taktowanie. Być może na tym przerwaniu robisz też coś innego (zliczasz czas? generujesz inne przebiegi dla innego DACa? itp) a wierz mi, są jeszcze inne powody. Wypadałoby więc trochę szybciej albo trochę wolniej przemiatać tablicę. Jeżeli zamiast jednego kroku na raz robiłbyś ich więcej, np. do licznika dodawałbyś za każdym razem 2 to wtedy całą tablicę "przejechałbyś" w zaledwie 32 przerwania a sygnał wyjściowy miałby już 1/3.2ms = 312.5Hz. To jednak jest ułomne, bo od razu skoczyłeś o sporą wartość. Widać wyraźnie, że wypadałoby mieć licznik liczący ułamki albo inaczej liczby niecałkowite, prawda?. Wtedy można skakać w tablicy np. o 1.25 kroku i mieć delikatną zmianę częstotliwości zamiast dwukrotnej. I tak się właśnie robi Oczywiście są tu pewne sztuczki, bo przecież tablicy nie możesz odczytywać z indeksu ułamkowego, np. 27.75, musisz ją adresować liczbą całkowitą, ale na szczęście ani używanie zmiennych typu float/double ani adresowanie "ułamkowe" nie są to potrzebne. Zacznijmy od licznika. Do tej pory wystarczał licznik zrobiony na jednym bajcie, bo potrzebny zakres indeksów tablicy to 0..63. Teraz też tyle będzie wystarczało, bo tablica przecież się nie wydłużyła, ale potrzebujemy bitów "po przecinku". Zmieniamy zatem licznik np. na 16-bitowy int bez znaku i ustalamy, że nasz przecinek leży (dla uproszczenia) między bitami 7 a 8: NNCCCCCC.UUUUUUUU To co powyżej to 16-bitowe słowo licznika rozpisane na bity: N - to bity nieużywane C - to część całkowita naszego licznika/indeksu tablicy, 6 bitów wystarcza do zaadresowania naszych 64 pozycji U - to część ułamkowa licznika Oczywiście procesor o tym nic nie wie i nadal traktuje nasz licznik jako zwykłą zmienną całkowitą bez znaku. Pamiętając, że dla adresowania tablicy sinusów korzystamy tylko z bitów C zobaczmy co się będzie z nimi działo, gdy do licznika będziemy dodawać w każdym przerwaniu liczbę 0x0100: 0x0000, 0x0100, 0x0200, 0x0300 itd.. Ponieważ nasze bity C są na starszym bajcie to od razu widać, że zliczamy jakbyśmy do licznika dodawali 1. Tuż przez zaadresowaniem tablicy przesuwamy licznik o 8 bitów w prawo gubiąc niepotrzebną część ułamkową, obcinamy nadmiarowe bity N i mamy indeks całkowity w zakresie 0..63: DAC = tablica[(licznik >>8) & 0x3F]; No to teraz spróbujmy dodawać coś ciekawszego, np. 0.75, czyli w naszej notacji 0x00C0 : 0x0000, 0x00C0, 0x0180, 0x0240, 0x0300, 0x03C0, 0x0480 itd.. Zgodnie z oczekiwaniami mamy zatem sekwencję adresów: 0,0,1,2,3,3,4 itd.. Tablica adresowana w ten sposób będzie "przemiatana " wolniej zatem częstotliwość wyjściowego sinusa będzie mniejsza. W drugą stronę także się da: jeśli do licznika będziesz dodawał liczbę 0x0357 to dostaniesz na wyjściu sinus 521.85Hz (rozpisz to sobie i zastanów się dlaczego akurat tyle). Z resztą zostawiam Ci wyprowadzenie wzoru na to jaką liczbę dodawać by otrzymać wymaganą częstotliwość sygnału wyjściowego przy określonych parametrach syntezera (długość tablicy, postać licznika) Wystarczy tylko wspomnieć, że w takiej konfiguracji jednostkowym krokiem tego systemu będzie ok. 0.61Hz. Teraz możesz zatem zupełnie spokojnie wygenerować częstotliwość 937.5Hz jak i 145.18Hz bez żadnej zmiany taktowania a jedynie przez dobór wartości dodawanej do licznika.Tak działają wszystkie tzw. DDS-y czyli programowane syntezery częstotliwości spotykane czasem w generatorach. Co prawda zamiast taktowania 10kHz masz tam 25MHz a licznik zamiast 14 bitów ma ich np. 24, ale zasada jest ta sama. No i na koniec, jeśli w tych rozważaniach zastąpisz DACa timerem/generatorem PWM, to każdy okres PWMa zamienia się na jedną próbkę z DACa. Za każdym razem gdy generator PWM zgłasza Ci, że właśnie skończył poprzedni okres Ty wysyłasz mu nową próbkę sinusa z tablicy zaadresowanej licznikiem tak jak do DACa. Po odfiltrowaniu low-pass (to konieczne, inaczej całość nie ma sensu) dostajesz sygnał analogowy o żądanym kształcie. Czy teraz świta bardziej? Acha, i jeszcze faza: jeśli chcesz produkować kilka sygnałów o tej samej częstotliwości, ale przesuniętych w fazie, to wystarczy tylko jeden licznik. Przykład dla trzech wyjść: bezpośrednio bitami C licznika adresujesz tablicę dla pierwszego sygnału, dodajesz do tego 1/3 długości tablicy (modulo jej długość) i dostajesz adres próbki dla drugiego wyjścia i po kolejnym dodaniu 1/3 długości tablicy masz indeks próbki dla trzeciego DACa/PWMa. Fajne?
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×