RFID based Contactless Body Temperature Screening

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10
RFID based Contactless Body Temperature Screening
September 1, 2020 - 3:21pm

Hallo,
ein sehr schönes Projekt, das ich gerne umsetzen möchte.

Leider habe ich folgendes Problem:20200901_105827.jpg
Beim Lesen der Card-ID in meinem RFID-Reader erhalte ich bei meinen Karten nur eine 11-stellige ID   zum Beispiel 8009C7A25EB und am Ende ein anderes unlesbares 12. Zeichen.

Was mache ich falsch?

Wenn ich diese ID dann in ihrem Projekt nutze, funktioniert zwar der  Ultrasonic Sensor (HCSR-04)    und berechnet die richtige Distance aber der Reader liest keine ID ein und das Screening funktioniert nicht.

Können sie mir helfen?    uengel@gmx.de

Vielen Dank     

Sourav Gupta's picture

Offline

Joined: Feb 12, 2018

Replies: 311
Können Sie den Code teilen?

Wie schließen Sie den Ultraschallsensor an?

  

 

   

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Die Lösung meines Problems ist:

Die ausgelesene RFID meiner Card ist 8009C7A25EB  .
Wenn ich aber den Sketch für Screening verwende, muss ich als ID  28009C7A25EB  vorgeben. Dann gibt es eine Übereinstimmung und die Temperatur wird gemessen.
Ich verstehe aber nicht den Unterschied, dass ich im Sketch eine "2" vor der ID eingeben muss.

Hier mein Code:

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

#include<SoftwareSerial.h>
SoftwareSerial ss(2, 3);

char tag[] ="28009C7A25EB"; // Replace with your own Tag ID
char input[12];        // A variable to store the Tag ID being presented
int count = 0;        // A counter variable to navigate through the input[] character array
boolean flag = 0;     // A variable to store the Tag match status
const int trigPin = 5;
const int echoPin = 6;
long duration;
int distance;
String RfidReading;
float TempReading;

void setup()
{
  Serial.begin(9600);   // Initialise Serial Communication with the Serial Monitor
  ss.begin(9600);         //EM-18 serial communication enabling by 9600 baud rate
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  mlx.begin();
  Serial.println("CLEARDATA"); //clears up any data left from previous projects
  Serial.println("LABEL,Date,Time,Temperature,Name"); //always write LABEL, to indicate it as first line
}

void loop()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.0340 / 2;
     Serial.println("Distance");
     Serial.println(distance);
  if (distance <= 40){
      reader();
  }
  delay(1000);
}

void reader()
{
if(ss.available())    // Check if there is incoming data in the RFID Reader Serial Buffer.
  {   
    count = 0; // Reset the counter to zero
    while(ss.available() && count < 12)
    {             
      input[count] = ss.read(); // Read 1 Byte of data and store it in the input[] variable

   Serial.println();  
   Serial.print(input[count]);     
      
      count++; // increment counter
      delay(5);
    }
    if(count == 12) //
    {
      count =0; // reset counter varibale to 0
      flag = 1;
      while(count<12 && flag !=0)  
      {
        if(input[count]==tag[count]) {
        flag = 1; }// everytime the values match, we set the flag variable to 1
        else {
        flag= 0; }
        
        count++; // increment i
        RfidReading = "4711engel";
      }
    }

   if(flag == 1) // If flag variable is 1, then it means the tags match
    {   
          Serial.println();
          Serial.println("Access Allowed!");
      temp_read();
      Write_streamer();
      }
    else
    {
          Serial.println();
          Serial.println("Access Denied"); // Incorrect Tag Message     
    }
    for(count=0; count<12; count++)
    {
      input[count]= 'F';
    }
    count = 0; // Reset counter variable
  }
}

void temp_read()
{
 TempReading = mlx.readObjectTempC();
 Serial.print(",");
 Serial.print("Ambient ");
 Serial.print(mlx.readAmbientTempC());
 Serial.print(" C  ");
 Serial.print("Target  ");
 Serial.print(mlx.readObjectTempC());
 Serial.print(" C  ");
 delay(1000);
}

void Write_streamer()
  {
    Serial.print("DATA"); //always write "DATA" to Indicate the following as Data
    Serial.print(","); //Move to next column using a ","
    Serial.print("DATE"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print("TIME"); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print(RfidReading); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print(TempReading); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.println(); //End of Row move to next row
  }

 

 

Ausgabe Serial Monitor:

CLEARDATA
LABEL,Date,Time,Temperature,Name
Distance
2
Distance
3

2
8
0
0
9
C
7
A
2
5
E
B
Access Allowed!
,Ambient 24.19 C  Target  33.03 C  DATA,DATE,TIME,4711engel,33.03,
Distance
92

 

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Ich habe das Tool installiert. Sieht so aus, wir in ihrer Beschreibung.

Für den Serial Monitor verwende ich Port "COM51". Wie kann ich diesen Port im Tool einstellen? Aktuell werden meine Daten zwar im serial monitor angezeigt, aber nicht im ‘PLX-DAQ spreadsheet’ Tool.

Was kann ich machen?

Sourav Gupta's picture

Offline

Joined: Feb 12, 2018

Replies: 311

Die serielle Ausgabe ist in Ordnung.
Im Tool "PLX-DAQ-Tabelle" gibt es ein Dropdown-Menü für die Portauswahl. Wählen Sie dort den gewünschten Port aus.

Aber auf dem LCD denke ich, dass Sie anderen Code ausführen. Denn im Code gibt es keine LCD-Druckfunktion.

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Vielen Dank für die schnelle Antwort.

Tool "PLX-DAQ-Tabelle" :
Ja, diese Einstellung habe ich gesehen. Mein Problem ist nur, dass der Port = COM51 ist.

Ports.jpg

Diesen Port finde ich aber nicht in der Auswahl. Diese geht nur bis 15.

 

Nun zum anderen Problem "Card-Reader":
Hier verwende ich einen sehr ähnlichen sketch zum Einlesen der Card erweitert durch die LCD-Ausgabe.
Hier der Code:

#include <LiquidCrystal.h>
   // initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);          //RS,EN,D4,D5,D6,D7

#include <Wire.h>
#include<SoftwareSerial.h>
SoftwareSerial ss(2, 3);

char input[12];        //memory for storing 12 characters of ID
int count = 0;         //integer for storing character of ID

void setup()
{
   Serial.begin(9600);  // Initialise Serial Communication with the Serial Monitor
   lcd.begin(16, 2);
   ss.begin(9600);         //serial communication enabling by 9600 baud rate
   lcd.setCursor(0, 0);    //move courser to first line
   lcd.print("Card-Nr:        ");      //headline
}

void loop()
{
if(ss.available())    // Check if there is incoming data in the RFID Reader Serial Buffer.
  {   
    count = 0; // Reset the counter to zero
    while(ss.available() && count < 12)   // Read 12 characters and store them in input array
           {
              input[count] = ss.read();   // Read 1 Byte of data and store it in the input[] variable
              count++;  // increment counter

              lcd.print(input[count]);        //showing 12 characters on LCD one by one
              Serial.print(input[count]);
              delay(5);   
                         
              if (count==12)
                  {
                     lcd.print("             ");
                     count = 0;               // once 12 characters are read get to start and wait for second ID
                     lcd.setCursor(0, 1);     //move courser to start.
                  }
           }          
   }

}             

 

Vielleicht haben Sie eine Idee, wie ich den richtigen Port im Tool "PLX-DAQ-Tabelle"  einstellen kann?

Viele Grüße

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Scheint wohl ein Fehler im Tool "PLX-DAQ-Tabelle"  zu sein.

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Scheint wohl ein Fehler im Tool "PLX-DAQ-Tabelle"  zu sein.

Sourav Gupta's picture

Offline

Joined: Feb 12, 2018

Replies: 311

Verwenden Sie die Portnummer im PLX-Tool, Stellen Sie auch die Baudrate ein.

 
Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

Ich würde mich über eine zeitnahe Antwort freuen, damit ich mit dem Projekt voran komme.

Ulrich Engel's picture

Offline

Joined: Oct 09, 2019

Replies: 10

If nobody likes to answer or help, close this forum!!!

I´m still waiting for answer to fix my problem.

 

My problem is:  I cannot use the tool "PLX-DAQ-Tabelle" because my arduino ide use port  COM51:

Ports.jpg

 

In the Tool  the ports i can use are from 1 to 15.

Sourav Gupta's picture

Offline

Joined: Feb 12, 2018

Replies: 311

Use available other softwares.

For example "Live Graph". Hope this will help you.

 

Since majority of people use English to communicate in this forum, if you could write it in English others will help you as well.