Sanguinoscope Blood Group Typing Project

AR-AD1: Sanguinoscope Blood Group Typing Project

This entry is part 1 of 3 in the series Advanced Arduino Projects

Blood typing is a method to tell what type of blood you have. Sanguinoscope helps you find the combination of blood groups. Blood typing is done so you can safely donate your blood or receive a blood transfusion.

Blood typing is a method to tell what type of blood you have. Sanguinoscope helps you find the combination of blood groups. Blood typing is done so you can safely donate your blood or receive a blood transfusion. It is also done to see if you have a substance called Rh factor on the surface of your red blood cells. Your blood type is based on whether or not certain proteins are on your red blood cells. These proteins are called antigens. Your blood type (or blood group) depends on what types your parents passed down to you. Blood is often grouped according to the ABO blood typing system.

The 4 major blood types are:
1. Type A
2. Type B
3. Type AB
4. Type O

In this project you will learn with complete guidelines that how to find the possible combinations of progeny blood groups by giving inputs of maternal and paternal blood group combinations.

Watch the following video to construct your own Sanguinoscope. You will have to purchase the relevant material given in the following video lecture to construct the project.

If you have any problem while purchasing the material, post your difficulties in ATL Lab Forum. Our expert teachers will try to answer your queries.

The Code

Note: Following code is copyrighted. You can use it freely until you don’t change the first 1-9 lines of the code.

/* This code was developed by Vidyasagar Academy Akola,
 * www.vsa.edu.in
 * License: You can use it for any purpose as long as you don't 
 * claim that you are its author and
 * you don't alter License terms and 
 * formulations (lines 1-9 of this file). 
 * Project: Sanguinoscope using Arduino UNO
 * Date of Creation: 26.02.2020
*/

  // I/O variables
  int A_Paternal=1;
  int B_Paternal=2;
  int AB_Paternal=3;
  int O_Paternal=4;

  int A_Maternal=5;
  int B_Maternal=6;
  int AB_Maternal=7;
  int O_Maternal=8;

  int A_Progeny=9;
  int B_Progeny=10;
  int AB_Progeny=11;
  int O_Progeny=12;
  int Buzzer=13; // connect buzzer to pin-13 (buzzer is optional)

  int A_Paternal_Status=LOW;
  int B_Paternal_Status=LOW;
  int AB_Paternal_Status=LOW;
  int O_Paternal_Status=LOW;

  int A_Maternal_Status=LOW;
  int B_Maternal_Status=LOW;
  int AB_Maternal_Status=LOW;
  int O_Maternal_Status=LOW;

  void setup()
  {
    pinMode(A_Paternal,INPUT);
    pinMode(B_Paternal,INPUT);
    pinMode(AB_Paternal,INPUT);
    pinMode(O_Paternal,INPUT);
    
    pinMode(A_Maternal,INPUT);
    pinMode(B_Maternal,INPUT);
    pinMode(AB_Maternal,INPUT);
    pinMode(O_Maternal,INPUT);

    pinMode(A_Progeny,OUTPUT);
    pinMode(B_Progeny,OUTPUT);
    pinMode(AB_Progeny,OUTPUT);
    pinMode(O_Progeny,OUTPUT);

    pinMode(Buzzer,OUTPUT); // optional
  }

  void loop()
  {
    A_Paternal_Status=digitalRead(A_Paternal);
    B_Paternal_Status=digitalRead(B_Paternal);
    AB_Paternal_Status=digitalRead(AB_Paternal);
    O_Paternal_Status=digitalRead(O_Paternal);

    A_Maternal_Status=digitalRead(A_Maternal);
    B_Maternal_Status=digitalRead(B_Maternal);
    AB_Maternal_Status=digitalRead(AB_Maternal);
    O_Maternal_Status=digitalRead(O_Maternal);

    if((A_Paternal_Status==HIGH)&(A_Maternal_Status==HIGH)) // A,A
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(100);
    }

    if((A_Paternal_Status==HIGH)&(O_Maternal_Status==HIGH)) // A,O
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,LOW);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((O_Paternal_Status==HIGH)&(A_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,LOW);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((A_Paternal_Status==HIGH)&(B_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }


    if((B_Paternal_Status==HIGH)&(A_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((B_Paternal_Status==HIGH)&(B_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,LOW);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((B_Paternal_Status==HIGH)&(O_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,LOW);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((O_Paternal_Status==HIGH)&(B_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,LOW);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((AB_Paternal_Status==HIGH)&(A_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((A_Paternal_Status==HIGH)&(AB_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((AB_Paternal_Status==HIGH)&(B_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((B_Paternal_Status==HIGH)&(AB_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((AB_Paternal_Status==HIGH)&(O_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((O_Paternal_Status==HIGH)&(AB_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((AB_Paternal_Status==HIGH)&(AB_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,HIGH);
      digitalWrite(B_Progeny,HIGH);
      digitalWrite(AB_Progeny,HIGH);
      digitalWrite(O_Progeny,LOW);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    if((O_Paternal_Status==HIGH)&(O_Maternal_Status==HIGH))
    {
      digitalWrite(A_Progeny,LOW);
      digitalWrite(B_Progeny,LOW);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,HIGH);
      digitalWrite(Buzzer,HIGH);
      delay(100);
      digitalWrite(Buzzer,LOW);
      delay(4000);
    }

    else
    {
      digitalWrite(A_Progeny,LOW);
      digitalWrite(B_Progeny,LOW);
      digitalWrite(AB_Progeny,LOW);
      digitalWrite(O_Progeny,LOW);        
    }
  }

Connection Diagram

Sanguinoscope Blood Group Typing Project
Share on your network!
Dattaraj Vidyasagar
Dattaraj Vidyasagar

Author on this website. He is veteran of Core Electronics since last 35+ years. ATL Mentor of Change, Niti Ayog, Govt. of India, Google Certified Educator, International Robotics Trainer and author of 17 books on electronics, robotics, programming languages and web designing... ➤➤

Leave a Reply

Your email address will not be published. Required fields are marked *