Skocz do zawartości

ELI5: Jak podłączyć kilka Arduino do jednego, wspólnego źródła zasilania?


valygar92

Pomocna odpowiedź

Cześć! Wykorzystuję w moim projekcie kilka Arduino nano (w domyśle chciałbym żeby ich było nawet z 10-15, ale na razie ograniczę się do maks 5 😄 ), nie chcę podłączać każdego z nich do osobnego źródła, i tu pojawia się moja zagwozdka, bo nie do końca wiem jak to ogarnąć, a nie chcę za bardzo sam kombinować, smutno byłoby zepsuć płytkę (lub więcej płytek) przez własny brak wiedzy.

1. Jaka bateria/baterie do tego będą potrzebne, bo nie łudzę się, żeby jedna bateria uciągnęła tyle płytek?

2. Jak to powinno być podłączone do płytek? Do tej pory moja wiedza ograniczała się do "tu jest bateria, tu jest kabelek z wyjściem 5.5/2.1, podłącz do wejścia DC w płytce, działa", a tu jednak już będę musiał się bawić z płytkami stykowymi (na początku) żeby to rozdzielić, i to mnie trochę przeraża...

Z góry dzięki za wszystkie porady lub linki do artykułów, które pomogą mi lepiej zrozumieć zagadnienie, bo ja nawet nie wiem od czego zacząć w tym momencie! No i za poświęcony czas! 🙂

Link do komentarza
Share on other sites

masz piny "VCC" i piny "GND" i te piny podpinasz odpowiednio do +5v i gnd...co do baterii to pasuje jakis pakiet 2-3s i przetwornica obnizajaca (na te 5v) i gra...mozesz tez podpiac do pojedynczej baterii ale nikt nie da Ci gwarancji ze przy rozladowanym aku nie bedzie resetow itp z powodu zbyt jiskiego zasilania...

na co tyle plytek?? Co to za projekt?? Im wiecej powiesz tym lepiej doradzimy

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

7 minut temu, farmaceuta napisał:

masz piny "VCC" i piny "GND"

Lepiej VIN i GND - wtedy można podłączyć bezpośrednio do pakietu 2S

8 minut temu, farmaceuta napisał:

na co tyle plytek??

Też jestem ciekaw... dlaczego np. Nano a nie Pro Mini?

  • Pomogłeś! 1
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

Co do samego projektu - istnieje taka gra komputerowa - https://keeptalkinggame.com/ i chciałem ideę przerzucić do prawdziwego świata, gdzie każdy z modułów do rozbrojenia to osobne arduino z całą logiką, całość ma się komunikować po I2C (gdzie master trzyma info o pozostałym czasie, możliwych błędach do popełniania a od slave'ów zbiera tylko info o tym, czy poszczególny moduł został rozbrojony (lub czy gracz popełnił błąd).

 

Cytat

dlaczego np. Nano a nie Pro Mini?

A tu akurat powód dość prozaiczny - nie bawiłem się jeszcze nigdy w lutowanie, na razie operuję tylko na płytce stykowej, nawet lutownicy nie mam. A nie widziałem Pro Mini z wlutowanymi stykami.

 

Hmmm, całość naprawdę byłaby taka prosta? Pakiet 2s i podpięcie do VIN i GND? Chyba za bardzo to demonizowałem sobie w głowie... 😄

Link do komentarza
Share on other sites

37 minut temu, valygar92 napisał:

gdzie każdy z modułów do rozbrojenia to osobne arduino z całą logiką, całość ma się komunikować po I2C (gdzie master trzyma info o pozostałym czasie, możliwych błędach do popełniania a od slave'ów zbiera tylko info o tym, czy poszczególny moduł został rozbrojony (lub czy gracz popełnił błąd).

Mozesz to rozwinac jakos? Bo nie moge zakumac...🤔 najakiej zasadzie to sie gra?

 

40 minut temu, valygar92 napisał:

Hmmm, całość naprawdę byłaby taka prosta? Pakiet 2s i podpięcie do VIN i GND? Chyba za bardzo to demonizowałem sobie w głowie... 😄

No proste😉 wiekszych komplikacji nie ma...

Link do komentarza
Share on other sites

Cytat

Mozesz to rozwinac jakos? Bo nie moge zakumac... najakiej zasadzie to sie gra?

Istnieje do 11 modułów - każdy z nich na dobrą sprawę jest osobnym bytem, nie wchodzą z sobą w żadną interakcję, nie wykorzystują nawzajem swoich danych ani nic z tych rzeczy. Każdy z modułów to proste (lub mniej proste) zadanie - wciśnięcie przycisków w odpowiedniej kolejności, wpisanie hasła, itd - właściwa odpowiedź zależy od zapalonych ledów na module, wyświetlanego tekstu na wyśietlaczu modułu , itd.

Dlatego poszedłem raczej w to, żeby każdy moduł to było osobne Arduino - daloby się całość ograć na jednej płytce (no, przynajmniej teoretycznie, w praktyce brakłoby mi pewnie pinów ;) ), ale potraktowałem każdy moduł jako osobny byt z własną logiką, w ten sposób nie dość że łatwiej mi to testować i rozwijać bez obawy o resztę, to teoretycznie mogę się bawić z poszczególnymi zagadkami bez martwienia się o całość.

 

Cytat

W jakiej odległości od siebie będą płytki? 

Raczej nieduża, całość chciałbym ostatecznie zamknąć w czymś maks 0.5x0.3x0.2 metra

Link do komentarza
Share on other sites

2 godziny temu, ethanak napisał:

Pół metra na i2c to nie jest niedużo... a szczególnie jeśli tam wsadzisz po drodze płytki stykowe to jest nawet bardzo dużo.

W idealnym świecie widzę to jako zbiór modułów (gdzie każdy moduł to zamknięte "pudełko" o rozmiarze max 15cm x 15cm x 5/10cm, a całość składałaby się z maks 12 modułów ułożonych 2x2x3, tak więc przy idealnym ułożeniu wszystkich Arduino jak najbliżej siebie może dałoby się skrócić odległość pomiędzy masterem a każdym slavem z osobna do 10-15cm.

Bardzo też możliwe że stwierdzę że 8 modułów w formie 2x2x2 mi wystarczy, wtedy wszystkie będą w stanie się prawie że stykać, przy odpowiednim ułożeniu.

Jak w ogóle przyglądałem się tematowi I2C to widziałem raczej że maks 1 metr, myślałem że moje maks 30cm (przy bardzo złych wiatrach) będzie ok, myliłem się? 🙂

 

Chyba że istnieje inna dobra metoda komunikacji, gdzie kilka płytek komunikuje się z jednym masterem? Bo do samego I2C po prawdzie nie jestem do końca przekonany, bo oczami wyobraźni widzę potencjalne problemy, jeśli wpadnę na pomysł podłączenia do któregoś z modułów na przykład wyświetlacza LCD po I2C...

Link do komentarza
Share on other sites

10 minut temu, valygar92 napisał:

do samego I2C po prawdzie nie jestem do końca przekonany

Jak dla mnie to potężny overkill - przecież potrzebujesz odebrać dwa bity od każdego modułu (o ile dobrze zrozumiałem).

Trochę - przyznam się - nad tym się pozastanawiałem. Wymyśliłem rozwiązanie dość proste - niestety konieczność używania gotowych modułów z wlutowanymi pinami trochę utrudnia sprawę...

Wyobraź sobie ekspander - np. MCP23017. Ekspander siedzi sobie przy głównym module, każde wyjście ekspandera podłączone jest do wejścia jakiegoś modułu.

Dwa wyjścia z każdego modułu są połączone w dwie wspólne "szyny" i podłączone do dwóch wejść modułu głównego (INPUT_PULLUP).

Niech ekspander będzie oprogramowany tak, że na wszystkich wyjściach będą jedynki, a najwyżej na jednym zero.

W każdym module normalnie oba wyjścia ustawione są w stan wysokiej impedancji (jako INPUT). Jeśli na wejściu pojawi się zero:

  • Wyjście A pozostaje w stanie wysokiej impedancji jeśli gracz rozwiązał zadanie, w przeciwnym razie ustawia się jako OUTPUT LOW.
  • Wyjście B pozostaje w stanie wysokiej impedancji jeśli gracz popełnił błąd w przeciwnym razie ustawia się jako OUTPUT LOW.

W ten sposób kolejno ustawiając piny ekspandera możesz dla max. 16 modułów odczytać:

  • czy moduł jest niepodłączony (oba wejścia są HIGH)
  • czy gracz popełnił błąd (wejście A jest LOW, wejście B HIGH)
  • czy gracz rozwiązał zadanie (wejście A jest HIGH, wejście B jest LOW)
  • czy gracz jeszcze nie skończył (oba wejścia LOW)

Częstotliwość komunikacji z modułami będzie dużo niższa, czyli układ będzie bardziej odporny na zakłócenia. Do tego możesz po stronie modułu głównego podciągnąć wejścia rezystorami (np. 1kΩ) do VCC.

Może być?

 

Link do komentarza
Share on other sites

Hm, interesujące rozwiązanie, przyznam się że nie pomyślałem o tym żeby to w tak prosty sposób ograć.

Jedyna potrzebna modyfikacja to kwestia błędów - można zaliczyć maksymalnie 2 błędy w całości (3 błąd to koniec), ale nic nie stoi na przeszkodzie, żeby wszystkie błędy popełnić w jednym module. Ale to by wymagało tylko jednego dodatkowego podłączenia, tak żeby dwa przechowywały informacje o błędach (mając 00, 01, 10, 11 idealnie wystarczy do przechowania do trzech błędów).

 

Co prawda w samej grze istnieją też dwa moduły, które wymagają informacji o aktualnej ogólnej ilości błędów i pozostałym czasie (obie te wartości chciałem przechowywać w masterze), ale tymczasowo je zignorowałem uznając że nie muszę implementować wszystkich. 🙂 Bo niestety powyższy sposób uniemożliwiałby przesłanie bardziej skomplikowanych informacji, jak np pozostały czas (który zawiera się w przedziale 0.1s - 10min)... 😕

Link do komentarza
Share on other sites

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

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.