Skocz do zawartości

Arduino UNO R3 klon, kiepska masa, input


Pomocna odpowiedź

Napisano

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 :)

@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).

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?

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.

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?

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 🙂

@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 🙂

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
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). 
 

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?

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

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

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. 😉

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...