MFRC 522 und Motorshield V2.3 kombinieren. Ist das möglich?

Hallo zusammen, :slight_smile:

In meinem kleinen Projekt verwende ich einen Arduino UNO, ein Adafruit Motorshield V2.3 und einen
MFRC 522-RFID Kartenleser.

Adafruit Motorshield V2.3 Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit [v2.3] : ID 1438 : $19.95 : Adafruit Industries, Unique & fun DIY electronics and kits
MFRC 522 Play-Zone.CH MFRC522 RFID-Reader Breakout inkl. 2 Keys
Arduino UNO Arduino Uno Rev3 — Arduino Official Store

Damit möchte ich einen DC Motor ansteuern. MFRC dient als "Sicherheitsschloss".

Nun habe ich folgendes Problem:
Wenn ich den MFRC direkt an den Arduino UNO anschliesse funktioniert dieser ohne Probleme.
Doch sobald ich das Motorshield auf den Arduino packe funktioniert der MFRC nicht mehr.

Mir ist aufgefallen das beim Motorshield der selbe Pin der beim Arduino Uno mit 3.3V angeschrieben ist nur mit 3V angeschrieben ist .

Könnte es daher sein das der MFRC einfach zu wenig Eingangsspannung erhält und daher nicht funktioniert? Oder ist es überhaupt nicht möglich diese 2 Bauteile(Motorshield und MFRC) zu kombinieren?

Kennt sich jemand damit aus?

Besten Dank für eure Hilfe :slight_smile:

Mavic

Die Beschriftung mit 3V halte ich für ein Platzproblem oder einfach Schlamperei. Die 3,3V sind mit Sicherheit einfach durchkontaktiert. Du kannst ja mal messen.

Für wahrscheinlicher halte ich eine Mehrfachbelegung von Pins.

Gruß Tommy

Hey Tommy,

Kann man dagegen was tun?

Gruss Mavic

Mehrfachbelegung von Pins scheint eher unwahrscheinlich.

MFRC 522-RFID Kartenleser verwendet SPI (am UNO also D13, D12, D11) und zusätzlich D10 und D9.
Edit: Der Kartenleser könnte zwar auch über I2C kommunizieren - die verlinket Library spricht aber nur SPI.
Ich habe diesen RF-ID-Reader auch selbst im Einsatz und bin nur auf Libs für SPI gestoßen.

Das Motorshield wird über I2C angesprochen (am UNO A4 und A5).

Dann sollte es möglich sein diese 2 Bauteile zu kombinieren?

Dann bleibt halt das übliche: Links zu Motor-Schield, RFC und Libs, sowie Sketch.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Gruß Tommy

Das wäre mal der Code der die Karte ausliest. Bereits hier funktioniert es nicht.

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *LED = AFMS.getMotor(1);
Adafruit_DCMotor *Motor = AFMS.getMotor(2);

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key; 

// Init array that will store new NUID 
byte nuidPICC[4];


///////////////////////////////////////////////////////////////////


void setup() { 
 Serial.begin(115200);
 AFMS.begin();
 SPI.begin(); // Init SPI bus
 rfid.PCD_Init(); // Init MFRC522 

 for (byte i = 0; i < 6; i++) {
   key.keyByte[i] = 0xFF;
 }

 Serial.println(F("This code scan the MIFARE Classsic NUID."));
 Serial.print(F("Using the following key:"));
 printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}

//////////////////////////////////////////////////////////////////////



void loop() {

 // Look for new cards
 if ( ! rfid.PICC_IsNewCardPresent())
   return;

 // Verify if the NUID has been readed
 if ( ! rfid.PICC_ReadCardSerial())
   return;

 Serial.print(F("PICC type: "));
 MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
 Serial.println(rfid.PICC_GetTypeName(piccType));

 // Check is the PICC of Classic MIFARE type
 if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
   piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
   piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
   Serial.println(F("Your tag is not of type MIFARE Classic."));
   return;
 }

 if (rfid.uid.uidByte[0] != nuidPICC[0] || 
   rfid.uid.uidByte[1] != nuidPICC[1] || 
   rfid.uid.uidByte[2] != nuidPICC[2] || 
   rfid.uid.uidByte[3] != nuidPICC[3] ) {
   Serial.println(F("A new card has been detected."));

   // Store NUID into nuidPICC array
   for (byte i = 0; i < 4; i++) {
     nuidPICC[i] = rfid.uid.uidByte[i];
   }
  
   Serial.println(F("The NUID tag is:"));
   Serial.print(F("In hex: "));
   printHex(rfid.uid.uidByte, rfid.uid.size);
   Serial.println();
   Serial.print(F("In dec: "));
   printDec(rfid.uid.uidByte, rfid.uid.size);
   Serial.println();
 }
 else Serial.println(F("Card read previously."));

 // Halt PICC
 rfid.PICC_HaltA();

 // Stop encryption on PCD
 rfid.PCD_StopCrypto1();
}


/**
* Helper routine to dump a byte array as hex values to Serial. 
*/
void printHex(byte *buffer, byte bufferSize) {
 for (byte i = 0; i < bufferSize; i++) {
   Serial.print(buffer[i] < 0x10 ? " 0" : " ");
   Serial.print(buffer[i], HEX);
 }
}

/**
* Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
 for (byte i = 0; i < bufferSize; i++) {
   Serial.print(buffer[i] < 0x10 ? " 0" : " ");
   Serial.print(buffer[i], DEC);
 }
}

MFRC 522
Motorshield

Hier sind noch die Links zu den Library.

RFID Library

Motorshield Library