Skocz do zawartości

szymonw

Użytkownicy
  • Zawartość

    105
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

szymonw wygrał w ostatnim dniu 19 marca

szymonw ma najbardziej lubianą zawartość!

Reputacja

26 Bardzo dobra

O szymonw

  • Ranga
    5/10

Ostatnio na profilu byli

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

  1. Warunek będzie wyglądał najprawdopodobniej identycznie. Opublikuj ten swój kod to się nim zajmę po powrocie za kilka godzin..Mój kod bazuje na genialnej bibliotece Timers i jak widzisz bardzo się wszystko upraszcza.Cały program bazuje na trochę zmodyfikowanej wersji przerzutnika SR(set reset) . Reszta to zależności czasowe.Warto poczytać o tej bibliotece -jest gdzieś na forum.
  2. Nie wiem czy przeanalizowałeś mój program ale jest w nim rozwiązanie do którego dążysz.Są tam dwie zmienne h1 i h2,które służą do tego celu.Zmienne są umieszczone w void dogory i void dodolu. .Spójrz na case 12 : gdzie jest warunek jeśli h1=0 i h2=0 to wyłącz.
  3. Projekt podświetlenie schodów jest świetną okazją do zapoznania się z możliwościami różnych programów służących do pisania programów.Moje pierwsze rozwiązanie zostało napisane a raczej narysowane w programie Realizer firmy Actum Solutios i trwało jakieś trzy godziny.Powodem tak krótkiego czasu jest bogactwo bibliotek.Zachęcam do ściągnięcia programu Realizer Bronze.W załączniku jest odpowiedni plik z rozszerzeniem .sch. Realizer Bronze pozwoli otworzyć ten plik ale nie pozwoli na nic więcej.Pisanie programu w Arduino jest zupełnie inne i nie ma wprost, dla wielu elementów ,równoważnych procedur w związku z tym należy je wypracować.To świetne ćwiczenie umiejętności i nabieranie doświadczenia. Następna wersja programu będzie pisana w STM32CubeIDE. //SCHODY //Poniżej napisany program został skompilowany dla kontrolera STM32F103. //W celu przystosowania do Arduino wykorzystującego procesor ATmega 328 lub inny należy odpowiednio przypisać porty //Ten program został wstępnie przetestowany i na moim STM3232F103 działa poprawnie. //Jeśli będziesz chciał zastosować ten program usuń wszystkie linie dotyczące transmisji szeregowej bo są zbędne. //Te linie służą do testowania programu. //Ten program potrzebuje zainstalowania biblioteki Timers w wersji,którą dołączyłem do wcześniejszego postu. #include <Timers.h> Timers <4> schody; bool u1=0,u2=0,u3=0,u4=0,u5=1; bool z1=0,z2=0,z3=0,z4=0 ; bool Q1=0,Q2=0,Q3=0,Q4=0 ; bool k1=0, k2=0,k3=0,k4=0; # define C1 PB12 //Czujnik nr1 TSOP.Stan'1' jest wtedy gdy do czujnika // nie dociera sygnsł z nadajnika.Stan '0' jest wtedy gdy sygnał z nadajnika dociera. # define C2 PB13 //Czujnik nr2 TSOP # define C3 PB14 //Czujnik nr3 TSOP # define C4 PB15 //Czujnik nr4 TSOP #define led1 PB3 #define led2 PB4 #define led3 PB5 #define led4 PB6 #define led5 PB7 #define led6 PB8 #define led7 PC13 #define p1 PB9//przycisk włączenia oświetlenia na stałe. #define wdn PB1//wyłączenie diod nadawczych(wdn) w dzień //Pierwsze naciśnięcie przycisku włącza oświetlenie a drugie naciśnięcie przycisku wyłącza. int analog0 = PA0; int noc=0; int d=0 ,f=0,h1=0,h2=0,b=0 ; //=================================================== void dogory() { h1=1; d=d+1; if(d>12){ d=0; } switch (d) { case 1: digitalWrite(led1,LOW); break; case 2: digitalWrite(led2,LOW); break; case 3: digitalWrite(led3,LOW); break; case 4: digitalWrite(led4,LOW); break; case 5: digitalWrite(led5,LOW); break; case 6: digitalWrite(led6,LOW); break; case 7: digitalWrite(led7,LOW); break; case 12: h1=0; if ((h1==0) && (h2==0)) { digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); } Q2=0; k2=0; break; } } //=========================================== void dodolu() { h2=1; f=f+1; if(f>12) { f=0; } switch (f) { case 1: digitalWrite(led7,LOW); break; case 2: digitalWrite(led6,LOW); break; case 3: digitalWrite(led5,LOW); break; case 4: digitalWrite(led4,LOW); break; case 5: digitalWrite(led3,LOW); break; case 6: digitalWrite(led2,LOW); break; case 7: digitalWrite(led1,LOW); break; case 12: h2=0; if ((h1==0) && (h2==0)) { digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); } Q4=0; k4=0; break; } } //============================================ void czas1() { Q1=0; k1=0; } //============================================= void czas2() { Q3=0; k3=0; } //============================================= void setup() { Serial.print(9600); pinMode(C1,INPUT_PULLUP); pinMode(C2,INPUT_PULLUP); pinMode(C3,INPUT_PULLUP); pinMode(C4,INPUT_PULLUP); pinMode(p1,INPUT_PULLUP); pinMode(led1,OUTPUT);digitalWrite(led1,HIGH); pinMode(led2,OUTPUT);digitalWrite(led2,HIGH); pinMode(led3,OUTPUT);digitalWrite(led3,HIGH); pinMode(led4,OUTPUT);digitalWrite(led4,HIGH); pinMode(led5,OUTPUT);digitalWrite(led5,HIGH); pinMode(led6,OUTPUT);digitalWrite(led6,HIGH); pinMode(led7,OUTPUT);digitalWrite(led7,HIGH); pinMode(wdn,OUTPUT);digitalWrite(wdn,HIGH); schody.attach (0, 1000, dogory); schody.attach (1, 1000, dodolu); schody.attach (2, 2000, czas1); schody.attach (3, 2000, czas2); } //================================================ void loop() { u1= digitalRead(C1); u2= digitalRead(C2); u3= digitalRead(C3); u4= digitalRead(C4); u5= digitalRead(p1); noc=analogRead(analog0); Serial.print("noc="); Serial.println(noc); if (noc<800) { digitalWrite(wdn,HIGH);//wyjście podłączone do wejścia bramki 'and'. //Drugie wejście bramki 'and' ma być podłączone do wyjścia generatora np.33khz. } else { digitalWrite(wdn,LOW); } if (u5==0) { b=b+1; switch(b) { case 1 : digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led4,LOW); digitalWrite(led5,LOW); digitalWrite(led6,LOW); digitalWrite(led7,LOW); break; case 2: digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); b=0; break; } } z2=Q1 && u2 ; z4=Q3 && u4 ; z1=(u1==1) && (u2==0) && (noc<800) && (b==0); z3=(u3==1) && (u4==0) && (noc<800) && (b==0); Q1= z1|| k1 ;//k1 jest stanem Q1 (n-1) Q3= z3|| k3 ;//k3 jest stanem Q3 (n-1) Q2= z2 || k2; Q4= z4 || k4; k2=Q2; k1=Q1; Serial.print("k1="); Serial.println(k1); k4=Q4; k3=Q3; schody.process(); if (k2==0) { schody.updateInterval(0,0); } else { schody.updateInterval(0,1000); } if (k4==0) { schody.updateInterval(1,0); } else { schody.updateInterval(1,1000); } if (k1==1) { schody.updateInterval(2,2000); } else { schody.updateInterval(2,0); } if (k3==1) { schody.updateInterval(3,2000); } else { schody.updateInterval(3,0); } } potrzeb pliki.rar
  4. Bardzo mi się podoba ta biblioteka i właśnie ją zastosowałem.Zaglądając do pliku tekstowego natknąłem się na: attach KEYWORD2 setInterval KEYWORD2 updateInterval KEYWORD2 process KEYWORD2 onTime KEYWORD2 Chodzi mi o pełny opis tej biblioteki a szczególnie o onTime.. Czy kolega ma jakąś wiedzę ta ten temat i czy mógłby się podzielić wiedzą.
  5. Proces wygrzewania ma na celu usunięcie wszelkich związków chemicznych,które osadziły się na aktywnej części czujnika.Producent to opisał.Podłącz do stabilnego zasilania i niech się wygrzewa. 168 godzin to tydzień -7 dób( wiesz z czym nie mylić). Jeśli musisz zrobić dzielnik napięcia to kup porządne metalizowane rezystory i je zastosuj. Niestety "świeże " rezystory mogą "pływać" to znaczy ich rezystancja się zmienia w czasie.Te zmiany są quasi-statyczne co powoduje ,że z upływem czasu pomiar może być niewiarygodny.Powodzenia
  6. Mam pytanie czy w tym projekcie nie lepiej jest użyć biblioteki Timers. Gdzieś na tym forum jest opis jak jej użyć.Wydaje się ,że program się uprości.Gdybyście zdecydowali się na użycie biblioteki Timers to muszę Wam powiedzieć,że są dwie różne o tej samej nazwie.Wersja biblioteki tylko z dwoma plikami jest tą właściwą do tego projektu. Timers.rar
  7. Zajmowałem się podobnymi czujnikami dawno temu.Czujnik tego typu jest elementem wykorzystującym zjawisko adsorpcji w temperaturze ok 350oC kiedyś a teraz jak widzę 250oC.Grzałka podgrzewa półprzewodnik.Przez grzałkę płynie dość duży prąd bo ok. 200mA.Jak jest czyste powietrze to przy powierzchni półprzewodnika gromadzi się tlen,który powoduje,że oporność półprzewodnika jest stosunkowo duża.W chwili pojawienia się węglowodorów,tlenku węgla następuje katalityczne utlenianie powszechnie zwane spalaniem.Pozbawienie tlenu przy powierzchni powoduje spadek oporności półprzewodnika.Posłużenie się płytką stykową to nie jest najlepszy pomysł. Połączenia powinny być pewne czyli najlepiej lutowane.Zasilacz powinien być dobrej jakości z dobrze filtrowanym napięciem.Napięcie zgodnie z notą katalogową 5V + -0,1V.Jak to zrobisz odpadnie Ci problem z połączeniami i zasilaniem .W nocie katalogowej znajdziesz tabelkę Producent sugeruje by przed użyciem czujnik wygrzać.To wygrzewanie powinno trwać od 48 h do 168h w zależności od czasu nieużywania.W Twoim przypadku powinno być to 168 godzin. Rezystor RL o tolerancji 1% i mniejszej jeśli jest dostępny.Dobrze by się stało gdybyś do czujnika podłączył wzmacniacz operacyjny w układzie wtórnika napięciowego i dopiero do wyjścia podłącz dzielnik napięcia ale to opcja.Zamiast jednego rezystora 4,7k zastosuj dwa np 2,2k i 2,5k o tolerancji jak wcześniej pisałem.Rezystory nie takie zwykłe ale metalizowane i dobrze by było je postarzyć wkładając do zamrażarki a następnie do piekarnika i tak kilkadziesiąt razy.Kiedyś producenci udostępniali wykresy obrazujące zmianę rezystancji w czasie.Chodzi o to by pomiar był wiarygodny.Pamiętaj taki czujnik jest na tyle czuły,że wykrywa to co się z Ciebie wydobywa i w szczególności może służyć jako alkomat.
  8. Kontroler użyty w moim projekcie to ST7flite39.O który kod Ci chodzi.Jeśli o plik źródłowy to musisz mieć program Realizer .Jeśli o plik wsadowy to S19 też nie ma problemu ,jeśli o ASM to też nie ma problemu.Ale jeśli masz konwerter z ASM > C to sobie poradzisz.Najprościej jest zastosować ST7flite39,który kupisz w Kamami lub TME ale potrzebny jest programator! Nowy folder.rar
  9. Dla sportu narysowałem program do podświetlania schodów.Program został stworzony w Realizerze a symulacja jest w załączniku . Total used bits : 67 Total used events : 0 Total used unsigned bytes : 6 Total used signed bytes : 0 Total used unsigned integers : 4 Total used signed integers : 0 Total used longs : 0 Memory overview: ---------------------------------------------------------------------- Total used RAM : 27 byte (0080H,0087H->00A0H) Total used ROM : 1045 byte (E000H->E414H) of FFDFH ----------------------------------------------------------------- Best case loop time : 141 usec Worst case loop time : 171 usec bandicam 2020-10-27 18-33-21-592.rar
  10. Nie chcę niczego sugerować ale takie coś robi się na 5-ciu czujnikach.Zacznijmy od tego ,ze weźmiesz kartkę papieru,ołówek i gumkę do wycierania.Narysuj kreskę poziomą u góry a na końcach dwie małe kreski pionowe.Ten rysunek symbolizuje schody(jak w casino de Paris, schody które nie mogą wyjść z mody...).Z lewej strony narysuj dwa małe kwadraciki i po prawej też dwa małe kwadraciki.To są symbole czujników podczerwieni.Opisz je 1,2,3,4.Proponuję użyć jako czujników ruchu TSOP31233.Są to czujniki wysokiej klasy,które jak spojrzysz do datasheet to dowiesz się,że są odporne na refleksy,zmianę oświetlenia i inne zakłócenia.Czujnik reaguje na podczerwień pulsująca z częstotliwością ok.33khz.Generator kupisz gotowy albo zrobisz.Dlaczego 33khz.Bo jest to typowa częstotliwość używana w prostych zegarach a rezonator lub generator jest powszechnie dostępny.Tych czujników będziesz potrzebował 4 szt.Dwa na dole dwa na górze. Załóżmy,że jesteś na dole i zbliżasz się do schodów wówczas przecinasz strumień podczerwieni płynący do pierwszego czujnika po czym przecinasz drugi strumień podczerwieni idący do drugiego czujnika.Kontroler ma zarejestrować tę sekwencję zdarzeń.Jeśli rozpozna to ma za zadanie włączyć oświetlenie.Teraz idziesz do góry( w środku programu masz bla,bla,bla i diody zapalają się jako sekwencja) i dochodzisz do kolejnych dwóch czujników i sytuacja się powtarza.Ta druga sekwencja wyłącza oświetlenie z pewnym opóźnieniem.Analogicznie jest w odwrotną stronę.Piąty czujnik to fotorezystor wykrywający dzień/noc po to by włączyć/wyłączyć urządzenie.
  11. Że zadam może głupie pytanie.Czy ten program obsługuje komunikację dwukierunkową.To znaczy czy jak schodzę ze schodów to najpierw zapalają się diody te od góry a później jak wchodzę po schodach do góry to zapalają się diody od dołu.Jak to jest u Ciebie w założeniach konstruktorskich?
  12. No to Ci się ulało.Wygląda na to,że musisz sobie odpowiedzieć na pytanie co robiłeś przez te 40 lat.Z treści wynika,że czymś co jest bardzo oddalone od głównego nurtu cywilizacji.Główny nurt cywilizacji to nauka.A nauka to te dziedziny w których podstawą jest logika i mierzalność wszystkiego co się da zmierzyć.Informatykę stworzyli matematycy i fizycy .Nauki techniczne oparte są na trzech dziedzinach matematyka, fizyka i chemia.Reszta to mniemanologia i tylko podszywają się pod słowo nauka jak g.. w dowcipie o g... i statku.Z porad,które mogę Ci udzielić to 1.Zacznij od kursu,który jest w dziale Artykuły użytkowników pt.układy logiczne.Dlaczego?Dlatego ,że jest to wykład z logiki. 2.Na tym forum jest kurs Arduino z przykładami.By cokolwiek zacząć zacznij od tego kursu ale wcześniej zapoznaj się z user manual.Wszystko znajdziesz w necie. 3.Musisz być kreatywny -wymyśl sobie projekt i zacznij pisać program. 4.Każda płytka ma swój opis.Musisz wiedzieć do którego pinu podłączony jest LED i w programie to zapisać.Nie musi to być pin13.Jeśli chcesz cokolwiek zrobić to musisz się zapoznać opisem płytki.User manual u podstaw tym bardziej,że jak twierdzisz znasz języki obce.Skorzystaj z tego narzędzia.Nic na hura.Logika kolego logika.
  13. Przepraszam,że się wtrącam ale problem nie jest w programie.Problem jest w zjawiskach fizycznych.Proszę przeczytać załączony pdf.Po przeczytaniu wszystko będzie jasne i klarowne. M-15.pdf
  14. Jest mój artykuł w dziale artykuły użytkowników Port USB i bootloader w STM32f1C8T6 a Windows 10 i ARDUINO IDE.Przeczytaj i wyciągnij wnioski. Nie wiem czy dla tego STM-a jest pliczek wsadowy obsługujący port USB ale to jest do sprwdzenia bo tych pliczków jest tam gdzieś dosyć dużo.
×
×
  • Utwórz nowe...