Skocz do zawartości

Podłączenie czytnika RFID RC522 przez ekspander portów MCP2308


isiupick

Pomocna odpowiedź

Dzień dobry,

Jestem studentem informatyki, który wykonuje projekt robota samojezdnego do inwentaryzacji zasobów - line-follower z kursu budowy robotów z czytnikiem RFID RC522. Nie posiadam dużego doświadczenia z Arduino oraz z układami elektronicznymi, a zetknąłem się z dwoma problemami związanymi z podłączeniem czytnika RFID do ekspandera:

  1. Jak podłączyć przewód odpowiedzialny za napięcie 3,3V używając ekspandera?
  2. W jaki sposób zadeklarować piny ekspandera by współpracowały z czytnikiem RFID

1. RC522 wymaga napięcia 3,3V co osiągnąłem przez wykorzystanie konwertera poziomów logicznych. Na schemacie podłączenia RC522 do Arduino (załączone zdjęcie) przewód niosący napięcie 3,3V (pomarańczowy przewód) zostaje również doprowadzony do pinu "3,3" płytki Arduino. W jaki sposób by wyglądało to połączenie z ekspanderem?

2. W kursie budowy robotów jest podany przykład wykorzystania ekspandera do kontrolowania LEDów przez proste ustawienie pina na "High" czy "Low" oraz jak ustawić kierunek komunikacji pina (we/wy) lecz nie wiem jak zadeklarować piny ekspandera by wykorzystać funkcje biblioteki czytnika. Na początku kursu związanego z RC522 zostają zadeklarowane dwa piny, później wykorzystywane w działaniu całego programu, lecz nie wiem jak je zdefiniować i użyć w tym samym kontekście używając ekspandera. Kod z kursu czytnika RC522:

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
}

void loop() {
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
  {
    Serial.print("UID: {");
    Serial.print(rfid.uid.uidByte[0] < 0x10 ? "0x0" : "0x");
    Serial.print(rfid.uid.uidByte[0], HEX);
    Serial.print(rfid.uid.uidByte[1] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[1], HEX);
    Serial.print(rfid.uid.uidByte[2] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[2], HEX);
    Serial.print(rfid.uid.uidByte[3] < 0x10 ? ", 0x0" : ", 0x");
    Serial.print(rfid.uid.uidByte[3], HEX);
    Serial.println("}");
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
  }
}

Rozmawiając ze znajomym wpadliśmy na pomysł wykorzystania złącza UART na shieldzie, lecz też nie wiem do końca jak to zrobić.

Jeśli jest możliwość poprawnego podłączenia tego czujnika przez ekspander portów/UART na tym shieldzie, bardzo bym się ucieszył gdyby ktoś pomógł w tej kwestii, przez którą trochę utknąłem w miejscu.

(Jest to mój pierwszy wpis na tym forum, więc proszę o wybaczenie błędów formatowania itp.)

podłączenie RFID.png

Edytowano przez isiupick
Link do komentarza
Share on other sites

@isiupick, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 18.01.2019 o 20:33, isiupick napisał:

Jeśli jest możliwość poprawnego podłączenia tego czujnika przez ekspander portów/UART na tym shieldzie, bardzo bym się ucieszył gdyby ktoś pomógł w tej kwestii, przez którą trochę utknąłem w miejscu.

Projektując shielda staraliśmy się "upchać" jak najwięcej peryferiów na płytce. Niestety przyniosło to ze sobą pewne ograniczenia, jednym z nich było np. wykorzystanie pinów odpowiedzialnych za SPI jako normalne GPIO. Zakładaliśmy, że ewentualne dodatkowe peryferia będą podłączane przez I2C. W związku z tym nie ma żadnej łatwiej metody, która pozwoli teraz podłączyć ten czytnik RFID do shielda. Teoretycznie jest to możliwe, ale wymagałoby przecięcia 1 ścieżki i wykorzystania lutownicy do dorobienia innych połączeń. W tej chwili najłatwiejszym rozwiązaniem byłoby wykorzystanie innego czytnika RFID, konkretnie takiego, który może komunikować się przez I2C.

Odpowiadając jednak na pozostałe pytania:

Dnia 18.01.2019 o 20:33, isiupick napisał:

Jak podłączyć przewód odpowiedzialny za napięcie 3,3V używając ekspandera?

Ekspander nie ma z tym nic wspólnego, zasilanie czytnika należałoby doprowadzić do pinu 3,3V w Arduino. Cały shield był przygotowany do pracy z 5V, więc nie ma na nim takiego wyprowadzenia. Można się jednak dość łatwo dolutować do odpowiedniego pinu.

Dnia 18.01.2019 o 20:33, isiupick napisał:

W jaki sposób zadeklarować piny ekspandera by współpracowały z czytnikiem RFID

Nie ma takiej możliwości. Czytnik powinien być podłączony do sprzętowego SPI, które jest dostępne na konkretnych pinach Arduino. Możliwe, że istnieją sposoby, na programowe symulowanie tego interfejsu z wykorzystaniem ekspandera, ale ja do tej pory nie spotkałem się z takim rozwiązaniem.

Dnia 18.01.2019 o 20:33, isiupick napisał:

2. W kursie budowy robotów jest podany przykład wykorzystania ekspandera do kontrolowania LEDów przez proste ustawienie pina na "High" czy "Low" oraz jak ustawić kierunek komunikacji pina (we/wy) lecz nie wiem jak zadeklarować piny ekspandera by wykorzystać funkcje biblioteki czytnika.

Ekspandery wykorzystuje się głównie w celu dodania zwykłych pinów GPIO, które sprawdzają się właśnie przy sterowaniu diod czy sprawdzaniu przycisków (uogólniając). Nie można za pomocą ekspandera dorabiać sobie sprzętowych peryferiów takich jak ADC/SPI itd.

Dnia 18.01.2019 o 20:33, isiupick napisał:

Rozmawiając ze znajomym wpadliśmy na pomysł wykorzystania złącza UART na shieldzie, lecz też nie wiem do końca jak to zrobić.

Niestety również nie wiem, ponieważ wybrany czytnik komunikuje się przez SPI, a nie ma to wiele wspólnego z UARTem.

Dnia 18.01.2019 o 20:33, isiupick napisał:

Jeśli jest możliwość poprawnego podłączenia tego czujnika przez ekspander portów/UART na tym shieldzie, bardzo bym się ucieszył gdyby ktoś pomógł w tej kwestii, przez którą trochę utknąłem w miejscu.

Wszystko zależy od tego, czy możesz coś przeciąć/przylutować itd. Jeśli nie, to pozostaje wymiana czytnika na inny model, taki który będzie działał na I2C lub rezygnacja z naszego shieldu.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

@Treker Dziękuję bardzo za odpowiedź. Niestety nie jestem na tyle doświadczony/brak mi umiejętności, żeby przecinać shielda i dolutowywać się do niego, więc spróbuję coś wymyślić. Jeśli nie uda mi się znaleźć innego czytnika RFID postaram się wykorzystać drugie Arduino do obsługi czytnika. Jeszcze raz dziękuję bardzo i pozdrawiam!

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

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.