Skocz do zawartości
Tuba

Arduino UNO R3 klon, kiepska masa, input

Pomocna odpowiedź

Witam serdecznie.

Mam program napisany w Pythonie, działa. Mam jedno wejście, zwykły przycisk, który przekazuje 5V. No i tutaj pojawia się problem, bo przekazując 5V jest ok podaje True, ale jak nie daje sygnału to daje losowo True albo False. Jak odłącze przewód od wejścia to jest False, jak daje kabelek na wejście i wisi w powietrzu to też szaleje True/False. Jak podłącze ten wiszący kabelek do GND to jest dobrze - False. No i tutaj pojawia się pytanie czy tak powinno być- domyślam się, że nie, no bo jak ma teraz prawidłowo działać układ? Kiedyś też miałem z tym problem tylko wejście było analogowe -> podłączyłem wiszący kabelek do wejścia i zmieniało się samo losowo w wartościach od 0.22 do 1.0 mimo braku sygnału. Jakieś rady?

Pozdrawiam :)

Udostępnij ten post


Link to post
Share on other sites

@Tuba witam na forum 🙂 Trochę ciężko zrozumieć o co dokładnie chodzi, bo nie pokazałeś żadnego z programu. Mogę się tylko domyślać, że to przez brak rezystora podciągającego na wejściu. Dodaj pull-up 10k i powinno działać poprawnie. Możesz też oczywiście włączyć wewnętrzne podciągnięcie (w Arduino będzie to konfiguracja wejścia jako INPUT_PULLUP).

Udostępnij ten post


Link to post
Share on other sites

Nie bardzo wiem jak w Pythonie ustawić programowo, jeżeli masz jakieś źródełko to chętnie skorzystam.

Czyli na chłopaki rozum - muszę zmostkować input z GND rezystorem 10k Ohm i Będzie dobrze? Z wejściem analogowym to samo zadziała czy większy rezystor?

Udostępnij ten post


Link to post
Share on other sites

Jak pokażesz ten program w Pythonie to jest duża szansa, że ktoś Ci pomoże. Jak nie pokażesz, to jest duża szansa że nikt.

Nie wspomnę o tym, że napisałeś jakieś bzdury o opornikach i podłączaniu do gnd.

Udostępnij ten post


Link to post
Share on other sites

Oczywiście wrzucę program jak będę miał możliwość/ zapewne jutro.

 

Jeżeli bzdury pisze na temat podłączania GND i Opornikach to widocznie źle zinterpretowalem schemat w tym linku (pierwszy zdjęcie montażu)

http://krzysztofjelonek.net/arduino-przyciski-i-szeregowy-monitor/

+ idzie do przycisku, druga nóżka podłączona do GND przez rezystor, nóżka ta jest wysterowana przez przycisk caly czas(przynajmniej w przycisku, ktory ja posiadam), a więc wygląda jak mostek + I GND przez rezystor.

Program programem, oczywiście wrzucę, ale fajnie jakbym też się dowiedział sprzętowo jak to rozwiązać, no i jak interpretować powyższy schemat z linku?

Udostępnij ten post


Link to post
Share on other sites

Ja tak z ciekawości: programujesz Arduino w Pythonie?

Udostępnij ten post


Link to post
Share on other sites

Jeżeli to można nazwać programowaniem 😉 dopiero rozpocząłem przygodę.

Udostępnij ten post


Link to post
Share on other sites
import time;
from threading import Thread
try:
    from pyfirmata import Arduino, util
except:
    import pip
    pip.main(['install','pyfirmata'])
    from pyfirata import Arduino, util, serial
      
board = Arduino('COM4')
it = util.Iterator(board);
it.start();
time.sleep(1);
      
input8 = board.get_pin('d:8:i');
while True:
    time.sleep(0.1);
    print(input8.read())

 

5 godzin temu, ethanak napisał:

Nie wspomnę o tym, że napisałeś jakieś bzdury o opornikach i podłączaniu do gnd.

Bzdury napisałem, ale sposób sprawdziłem i działa...

5V -> przycisk -> 8pin jako input,

8pin podłączony również do GND przez rezystor 10k, i... działa, przycisk spełnia swoją rolę, jak nie przyciskam jest False, jak przyciskam jest True, czyli jednak w ten sposób mogę się pozbyć zakłóceń. Pytanie co w tym podłączeniu jest złe i czemu tak nie powinno być, no i czemu to są bzdury. No i poproszę o podpowiedzi jak to powinno być prawidłowo, również programowo 😉

 

Pozdrawiam, dzięki za pomoc 🙂

Udostępnij ten post


Link to post
Share on other sites

@Tuba standardowo przyciski podłącza się w taki sposób, aby po wciśnięciu zwierały do masy i robi się pullup do 5V. Twoje rozwiązanie też zadziała, ale w pierwszym poście tak je opisałeś, że ciężko było je rozszyfrować :)

Hmm ciekawy ten Twój program, muszę się wczytać w ten temat. Jak rozumiem to kod w Pythonie na PC, który komunikuje się z Arduino, tak? Jesteś chyba pierwszą osobą, która pokazała na forum tego typu podejście. Myślałem (i pewnie nie tylko ja), że piszesz kod w Pythonie bezpośrednio na Arduino 🙂

Udostępnij ten post


Link to post
Share on other sites

Wszystko jest dobrze - tyle że tak jak pisał @Treker jest to raczej rzadko stosowane rozwiązanie (rezystor pull-down i przycisk zwierający do Vcc), stąd nieporozumienie.

Jeśli nie chcesz stosować rezystora (ja też nie przepadam) to musisz podłączyć przycisk do masy zamiast do Vcc, a pin zadeklarować jako INPUT_PULLUP zamiast INPUT. W ten sposób włączysz wewnętrzny rezystor podciągający. Dla innych płytek (np. ESP) możesz zadeklarować pin jako INPUT_PULLDOWN i wtedy nic w połączeniach się nie zmienia - ale znów nie wszystkie piny mogą działać w ten sposób.

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
5 godzin temu, Treker napisał:

Hmm ciekawy ten Twój program, muszę się wczytać w ten temat. Jak rozumiem to kod w Pythonie na PC, który komunikuje się z Arduino, tak? Jesteś chyba pierwszą osobą, która pokazała na forum tego typu podejście. Myślałem (i pewnie nie tylko ja), że piszesz kod w Pythonie bezpośrednio na Arduino 🙂

Rozumiem, że 'bezpośrednio' oznacza również wysyłanie kodu przez PC? Ogólnie to co przedstawiłem powyżej nie spełnia moich oczekiwań z tego względu, że wyłączając IDLE na komputerze, program się nie wykonuje, czy brakuje 'przesłania programu' na Arduino. Program uruchamiam przez IDLE poleceniem 'Run module'. IDLE natomiast włączam wpisując w CMD 'pyw -m idlelib'. Muszę poszukać rozwiązania, aby program ruszał w momencie podłączenia zasilania - inaczej nie ma sensu arduino 😄 Nie wiem czy to wina IDLE, że nie wysyłam na Arduino, czy może wina leży po stronie kodu?

2 godziny temu, ethanak napisał:

Jeśli nie chcesz stosować rezystora (ja też nie przepadam) to musisz podłączyć przycisk do masy zamiast do Vcc, a pin zadeklarować jako INPUT_PULLUP zamiast INPUT. W ten sposób włączysz wewnętrzny rezystor podciągający. Dla innych płytek (np. ESP) możesz zadeklarować pin jako INPUT_PULLDOWN i wtedy nic w połączeniach się nie zmienia - ale znów nie wszystkie piny mogą działać w ten sposób.

No dobra, ja w moim kodzie używam akurat 'board.get_pin('d:8:i')', więc ostatnia litera służy do deklaracji in/out, nie mam możliwości sprawdzić, ale zakładam, że 'd:8:input_pullup' nie zadziała. Jak więc jak mam zadeklarować input pullup w pythone? spotkałem się również z 'board.digital[8].write(1)' też stosowałem i działało, ale już jako input to ciężko współgra i wyskakuje mi przy printcie 'none' (zamiast True/False). 
 

Udostępnij ten post


Link to post
Share on other sites

Moment - nie w "pythonie" tyko w konkretnej bibliotece. A ta akurat biblioteka ma błąd który ciągnie się za nią od dawna.

Pytanie: co chcesz zrobić, bo jak sam piszesz jesteś początkujący, a chwytasz się rzeczy wymagających nieco większej wiedzy. Być może da się prościej i bez babolowatych bibliotek?

Udostępnij ten post


Link to post
Share on other sites

Najprawdopodobniej da się, już pisze.

Pierwszy projekt jaki sobie robię na rozgrzewkę to sygnalizacja świetlna, dla kierowców idzie zapetlona sekwencja, po przycisnieciu przycisku czekamy na koniec sekwencji świateł kierowców i włączają się światła dla pieszych- jedna sekwencja i znowu w kółko dla kierowców. 

Docelowo chciałbym stworzyć moduł komfortu kierunkowskazow do samochodu, czyli jeden krótki klik kierunku powoduje 3klikniecia. Jeżeli mam lipna bibliotekę to od razu jak możesz doradz lepsze rozwiązania, co bym się złej praktyki nie uczył 😉

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

Przede wszystkim zacznij używać Arduino IDE i zapomnij o firmacie, podłączaniu do peceta (przecież nie będziesz podpinał laptopa w samochodzie jak będziesz chciał mignąć kierunkami). Nie potrzeba żadnych dziwacznych bibliotek (które nota bene służą do czegoś innego). Przejrzyj sobie tutejsze kursy Arduino, to co chcesz zrobić to akurat dość proste rzeczy i idealnie się nadają na początek przygody z programowaniem. Tyle, że zamiast w Pythonie będziesz pisać w C++.

Powodzenia! 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

No właśnie tyle że uczę się Pythona i przy okazji chce zaprogramować Arduino z wykorzystaniem tego języka. Uczę się również Javascript. Nie chce sobie mieszac trzecim językiem (C++). Stąd biblioteka, szukałem rozwiązań aby móc pisać w Pythonie, później jak będę chciał coś bardziej skomplikowanego pisać żebym już miał ogarnięte IDE do Pythona. 😉

Udostępnij ten post


Link to post
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!

Gość
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...