Skocz do zawartości

Robot odkurzacz


Chester11-86

Pomocna odpowiedź

Teraz wygląda ok, za wyjątkiem podłączenia switch'y. Zwykło się łączyć do masy, a ja dodatkowo polecę Ci wspomniany wcześniej filtr RC:

.

Warto jeszcze na zaciskach silników dodać kondziory, np. 100nF, ale nie trzeba tego lutować na płytce - można przy samym silniku. Żadnych błędów nie znalazłem, ale niech ktoś jeszcze spojrzy bo pora taka dziwna i mój mózg jeszcze śpi... 😉

Link do komentarza
Share on other sites

Zastosowałeś ten filtr RC i dodałeś jeszcze rezystor 10k. Czy taki sam rezystor mam dodać do tych swoich "czujników" (tzn one będą także switchami ale innej budowy)??

Tylko trochę nie rozumie Twojego schematu 🙁

Wyjście podprowadzamy pod nóżkę procesora?? Po naciśnięciu switcha na wyjściu pojawi się stan niski??

Pozdrawiam??

Link do komentarza
Share on other sites

Bez filtra masz taką sytuację, że sprężyste blaszki wykonują oscylujące ruchy i wykres napięcia wygląda mniej-więcej tak (sorki, za painta - najlepiej by było spojrzeć na oscylograf 😉 )

W układzie jak na schemacie (zapożyczonym niegdyś z jakiegoś pdf'a, chyba jakaś praca dyplomowa), zamiast tych drgań i przeskoków, będziesz miał wygładzoną linię charakterystyki. To jest opcja przy naciśnięciu przycisku, przy puszczeniu sytuacja jest analogiczna. Zastosowany filtr dolnoprzepustowy "odcina" sygnały o wyższej częstotliwości (drgania), a "przepuszcza" sygnały o niższej częstotliwości. Nie musisz tego stosować jak nie chcesz, w programie możesz wykorzystać dwukrotne sprawdzanie stanu pinu z opóźnieniem np. 300ms. BASCOM ma nawet gotową funkcję - debounce, ale nie wypowiem się o jej działaniu bo nigdy nie używałem.

Rezystor 10k to po prostu pull-up, jeśli nie masz go na schemacie to włączasz ten wbudowany w strukturę uC (programowo).

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jeżeli chciałbym programowo zrobić pull-up to muszę w bascomie użyć komendy "Set" ?

Dziękuję bardzo za wyjaśnienie, o komendzie debounce też czytałem w kursie bascoma 🙂

Ale powtórzę pytanie jeszcze raz bo chodzi mi o to jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować i jak pisać program 🙂

Pozdrawiam!

Link do komentarza
Share on other sites

powtórzę pytanie jeszcze raz bo chodzi mi o to jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować

Piny procka używane jako wejścia w przeważających przypadkach sterowane są od strony masy.

Ja zawsze tak steruję procesor i zawsze steruję stanem niskim na pinach używanych jako wyjścia.

Link do komentarza
Share on other sites

Jeżeli chciałbym programowo zrobić pull-up...

Musisz ustawić piny jako wejścia i wymusić na nich stan 1 programowo, czyli tak jak mówisz.

jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować i jak pisać program

Dopóki przycisk nie będzie wciśnięty, będziesz miał stan "1", w momencie wciśnięcia - "0". Obsługujesz to np. if'em - jeśli jest "0", to wykonaj jakąś tam akcję

If pinb.5 = 0 then
blablablaa
else
blablabla
endif
Link do komentarza
Share on other sites

Właśnie to chciałem wiedzieć 🙂 no to teraz nic innego jak nauczyć się tych timerów w końcu 🙂

Kolego Armir wszystko będzie zasilane z akumulatora 6V i zastosowałem takie kondensatory. Uważasz że powinienem dać większe??

Link do komentarza
Share on other sites

Najlepiej wartości dobierać zgodnie z notą katalogową, a nie dlatego, że "ktoś komuś powiedział, że powinno być..." 😃 Także google->nazwa_układu datasheet->czytanie (w tym wypadku oglądanie obrazków).

Dodam jeszcze, że gdybyś czytał datasheet (noty katalogowe, jak kto woli), to wiedziałbyś o minimalnej różnicy napięć wymaganej do stabilizacji...Która dla 7805T wynosi ok. 2V. Czyli z 6V nijak na tym układzie nie osiągniesz 5V. Polecam stabilizatory LDO (low-dropout).

Link do komentarza
Share on other sites

Witam!

Na początku zwracam się z prośbą do administratorów jak również moderatorów forum o nie kasowanie tego tematu ponieważ obiecuję, że będzie się rozwijał🙂

Na razie kompletuję sobie części jak również testuję gdy mam tylko wolną chwilkę moje rozwiązania mechaniczne ale chciałem sobie przetestować jedno rozwiązanie gdzie mam niestety mały problem z programem. Ciągle opieram się o testy płytki, która została wcześniej przedstawiona przez kolegę matrix'a.

Zasada działania jaką chce osiągnąć:

Sprawa wygląda tak, że mam do dyspozycji 3 switche. Jeden główny i dwa mają funkcję krańcówek. Po włączeniu zasilania nic się nie dzieje i na wstępie jedna z krańcówek jest wciśnięta. Po naciśnięciu głównego switcha na odpowiedniej nóżce procka jest podany stan wysoki, silnik się obraca do momentu aż zostanie wciśnięta druga krańcówka. po ponownym naciśnięciu głównego switcha silnik się kręci w drugą stronę i wraca do położenia początkowego do wciśnięcia pierwszej krańcówki.

Próbowałem sam coś stworzyć ale za dużo if'ów mi wyszło 😋

Czy mógłbym prosić o malutką podpowiedź?? Na co zwrócić uwagę??

Pozdrawiam!

Dorzucam jeszcze program jaki zrobiłem ale jest źle ponieważ nie chce się kompilować 🙁

$regfile = "attiny2313.dat"
$crystal = 4000000

Config Pinb.0 = Output                                      'ustalanie portow wyjscowych
Config Pinb.1 = Output
Config Pind.3 = Input                                       'ustalanie portow wejscoiwych
Config Pind.4 = Input
Config Pind.5 = Input


Kran_1 Alias Pind.4                                         'zmiana nazw portow
Kran_2 Alias Pind.5
Gl_1 Alias Pind.3
L1_a Alias Portb.0
L1_b Alias Portb.1


Set Portd.3                                                 'podcaganie portu
Set Portd.4
Set Portd.5

L1_a = 0                                                    'ustalenie stanow niskich
L1_b = 0                                                    'na wyjsciach






Do                                                          'glowny program

  Waitms 90                                                'czekaj 90ms


  If Kran_1 = 0 And Gl_1 = 0 Then                         
     Waitms 15
     Gosub Przod
  Elseif Kran_2 = 0 And Gl_1 = 0 Then                      '
     Waitms 15
     Gosub Tyl
  Else
     L1_a = 0
     L1_b = 0
  End If
Loop
End


Przod:
  L1_a = 1
  If Kran_2 = 0 Then
  L1_a = 0

  Return

Tyl:
  L1_b = 1
  If Kran_1 = 0 Then
  L1_b = 0

  Return

__________

Komentarz dodany przez: Nawyk

Proszę, używaj znaczników

 do zagnieżdżania kodów źródłowych.
Link do komentarza
Share on other sites

Program jaki wgrałem znajduję się poniżej ale właśnie jest taka przypadłość że silnik się zatrzymuję 🙁 a powinien działać tak długo dopóki nie zostanie wciśnięta druga krańcówka. Co robię źle??

$regfile = "attiny2313.dat"
$crystal = 4000000

Config Pinb.0 = Output                                      'ustalanie portow wyjscowych
Config Pinb.1 = Output
Config Pind.3 = Input                                       'ustalanie portow wejscoiwych
Config Pind.4 = Input
Config Pind.5 = Input


Kran_1 Alias Pind.4                                         'zmiana nazw portow
Kran_2 Alias Pind.5
Gl_1 Alias Pind.3
L1_a Alias Portb.0
L1_b Alias Portb.1


Set Portd.3                                                 'podcaganie portu
Set Portd.4
Set Portd.5

L1_a = 0                                                    'ustalenie stanow niskich
L1_b = 0                                                    'na wyjsciach


Do                                                          'glowny program

  Waitms 90                                                'czekaj 90ms


  If Kran_1 = 0 And Gl_1 = 0 Then                          'jesli czu.1 zostanie zalaczony to przejdz do Cofnij
     Waitms 15
     Gosub Przod
  Elseif Kran_2 = 0 And Gl_1 = 0 Then                      'jesli czu.2 zostanie zalaczony to przejdz do Cofnij
     Waitms 15
     Gosub Tyl
  Else
     L1_a = 0
     L1_b = 0
  End If
Loop
End


Przod:
  L1_a = 1
  If Kran_2 = 0 Then
  L1_a = 0
  End If

Return

Tyl:
  L1_b = 1
  If Kran_1 = 0 Then
  L1_b = 0
  End If

Return
Link do komentarza
Share on other sites

Przeanalizuj kod od początku (samą pętlę główną).

Najpierw sprawdzasz, czy nie ma sygnału do załączenia silników i to jest OK. Jeśli jakiś wystąpi (zakładamy że wystąpił) to przechodzimy do odpowiedniej procedury.

Następna iteracja i znowu sprawdzamy czy wystąpił sygnał. I tu jest problem. Nie może takowy wystąpić bo przed chwilą wystartowaliśmy silnik co w efekcie rozłącza krańcówkę i nie pozwala spełnić pierwszego warunku, a wózeczek nie zdąży w czasie ok. 100ms dojechać do drugiego końca, a co za tym idzie nie da rady spełnić drugiego warunku. I tu jest wykonywana instrukcja else w której zatrzymujesz silnik.

Po za tym sam sposób sprawdzania, czy silnik dojechał do końca nie jest zbyt fortunny. Warunek ten jest sprawdzany tylko podczas spełnienia innego warunku, startującego silnik. Czyli zostanie on wykonany tylko raz, ponieważ sytuacja w której Gl_1 i Kran_1 są załączone występuje tylko na początku pracy urządzenia.

IMO tutaj dobrze sprawdziłaby się pętla bodajże

while warunek
instrukcje
wend
  • Lubię! 1
Link do komentarza
Share on other sites

Po pierwsze chciałem przeprosić że nie umieściłem kodu programu w odpowiednich znacznikach 🙁

Po drugie kolego Mihau, troszkę nie zrozumiałem gdzie mam umieścić te komendy?? To ma być umieszczone w podprogramie czy pętli głównej?? 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.