├── About The project(Usage).txt ├── Material required.txt ├── Rx Code file └── Rx Code file.ino ├── Schematic Rx(Car).pdf ├── Schematic Tx(Gloves).pdf └── Tx code file └── Tx code file.ino /About The project(Usage).txt: -------------------------------------------------------------------------------- 1 | Gesture-controlled robots for elderly individuals can have several advantages and applications. Here are some potential use cases and benefits of gesture-controlled robots for older people: 2 | 3 | 1. Assistance with daily tasks: Gesture-controlled robots can be programmed to assist with various daily tasks such as turning on/off lights, operating appliances, fetching items, and opening doors. Older adults with limited mobility or strength can benefit from these robotic assistants. 4 | 5 | 2. Healthcare monitoring: Gesture-controlled robots can be equipped with sensors to monitor vital signs, remind individuals to take medication, and track physical activity levels. They can also be programmed to alert caregivers or healthcare providers in case of emergencies or abnormal health readings. 6 | 7 | 3. Social interaction and companionship: Robots with gesture recognition capabilities can engage in simple conversations and respond to hand gestures, providing companionship to elderly individuals who may feel isolated or lonely. These robots can play games, tell stories, or even act as virtual pets. 8 | 9 | 4. Cognitive stimulation: Gesture-controlled robots can offer cognitive stimulation through interactive games, puzzles, or memory exercises. By encouraging mental engagement and challenging older adults, these robots can help maintain cognitive abilities and improve overall mental well-being. 10 | 11 | 5. Rehabilitation and physical therapy: Gesture-controlled robots can assist in rehabilitation exercises by guiding older adults through specific movements and providing feedback on their performance. They can help improve mobility, balance, and coordination through personalized exercise routines. 12 | 13 | 6. Fall detection and emergency response: Advanced gesture-controlled robots can incorporate fall detection algorithms and emergency response systems. They can identify if an older adult has fallen and alert caregivers or emergency services, providing timely assistance in critical situations. 14 | 15 | 7. User-friendly interface: Gesture recognition technology offers a user-friendly and intuitive interface for older adults who may have difficulty operating complex devices. Gestures such as hand waves, swipes, or pointing can be easily interpreted by the robot, eliminating the need for complex button presses or voice commands. 16 | 17 | 8. Independence and autonomy: By enabling older adults to control their environment through simple hand gestures, gesture-controlled robots promote independence and autonomy. They empower individuals to perform tasks and interact with their surroundings without relying heavily on human assistance. 18 | 19 | It's worth noting that while gesture-controlled robots have great potential, they should be designed with careful consideration of user needs, usability, and safety. User testing and feedback from older adults are crucial to ensure the effectiveness and acceptance of such robotic systems. -------------------------------------------------------------------------------- /Material required.txt: -------------------------------------------------------------------------------- 1 | ->Arduino UNO 2 | 3 | ->Arduino Nano 4 | 5 | ->L298 Motor Driver 6 | 7 | ->nRf24L01 Modules 8 | 9 | ->Joystick 10 | 11 | ->18650 Li-ion battery 12 | 13 | ->Jumper Wires 14 | 15 | ->Battery Holders 16 | 17 | ->General purpose PCB 18 | 19 | ->20 mm berg strips 20 | 21 | ->Scotch Tape 22 | 23 | ->Soldering Iron 24 | 25 | ->gloves 26 | 27 | ->4wd Car kit 28 | 29 | 30 | ALL THE MATERIALS WILL AVAILABLE IN AMAZON(SEARCH WHICH IS SUITABLE FOR ARDUINO)!!!!!!!! 31 | 32 | 33 | ts9785 -------------------------------------------------------------------------------- /Rx Code file/Rx Code file.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #define CSN_GPIO 8 6 | #define CE_GPIO 7 7 | 8 | #define RIGHT_FORWARD 5 // Left side motor forward 9 | #define RIGHT_BACKWARD 4 // Left side motor backward 10 | #define LEFT_FORWARD 3 // Right side motor forward 11 | #define LEFT_BACKWARD 2 // Right side motor backward 12 | 13 | // Hardware configuration 14 | RF24 radio(CE_GPIO, CSN_GPIO); // Set up nRF24L01 radio on SPI bus plus pins 7 & 8 15 | 16 | const byte Address[6] = "00001"; 17 | unsigned char Received_Command = 0,Speed_index = 0,Run_Stop_Mode = 0; // Run_Stop_Mode -> 0 = Stop , 1 = Run; 18 | unsigned char Rx_Array[2]; 19 | unsigned int Run_Stop_Counter = 0; 20 | 21 | void setup() { 22 | Serial.begin(115200); 23 | pinMode(RIGHT_FORWARD,OUTPUT); //left motors forward 24 | pinMode(RIGHT_BACKWARD,OUTPUT); //left motors reverse 25 | pinMode(LEFT_FORWARD,OUTPUT); //right motors forward 26 | pinMode(LEFT_BACKWARD,OUTPUT); //right motors reverse 27 | radio.begin(); 28 | radio.openReadingPipe(0, Address); 29 | radio.setPALevel(RF24_PA_MIN); 30 | radio.startListening(); 31 | Serial.println("START"); 32 | } 33 | 34 | void loop() 35 | { 36 | if (radio.available()) // If the NRF240L01 module received data 37 | { 38 | delay(1); 39 | //radio.read(&Received_Command, 1); 40 | radio.read(&Rx_Array, 2); 41 | Received_Command = Rx_Array[0]; 42 | Speed_index = Rx_Array[1]; 43 | Serial.print(Received_Command); 44 | Serial.print(" , "); 45 | Serial.println(Speed_index); 46 | } 47 | 48 | /***************** Speed control Logic ********************/ 49 | if(Run_Stop_Mode==0) // Stop 50 | { 51 | digitalWrite(RIGHT_FORWARD,LOW); 52 | digitalWrite(RIGHT_BACKWARD,LOW); 53 | digitalWrite(LEFT_FORWARD,LOW); 54 | digitalWrite(LEFT_BACKWARD,LOW); 55 | Run_Stop_Counter++; 56 | if(Run_Stop_Counter>=((5-Speed_index)*100)) // Speed_index = 1 -> Min speed, 5 -> Max Speed. 57 | { 58 | Run_Stop_Counter = 0; 59 | Run_Stop_Mode = 1; 60 | } 61 | } 62 | else if(Run_Stop_Mode==1) // Run 63 | { 64 | Run_Stop_Counter++; 65 | if(Run_Stop_Counter>=((Speed_index)*100)) // Speed_index = 1 -> Min speed, 5 -> Max Speed. 66 | { 67 | Run_Stop_Counter = 0; 68 | Run_Stop_Mode = 0; 69 | } 70 | 71 | if(Received_Command == 1) //move forward(all motors rotate in forward direction) 72 | { 73 | digitalWrite(LEFT_FORWARD,HIGH); 74 | digitalWrite(RIGHT_FORWARD,HIGH); 75 | } 76 | else if(Received_Command == 2) //move reverse (all motors rotate in reverse direction) 77 | { 78 | digitalWrite(LEFT_BACKWARD,HIGH); 79 | digitalWrite(RIGHT_BACKWARD,HIGH); 80 | } 81 | else if(Received_Command == 3) //turn right (left side motors rotate in forward direction, right side motors rotates in backward direction) 82 | { 83 | digitalWrite(LEFT_FORWARD,HIGH); 84 | digitalWrite(RIGHT_BACKWARD,HIGH); 85 | } 86 | else if(Received_Command == 4) //turn left (right side motors rotate in forward direction, left side motors rotates in backward direction) 87 | { 88 | digitalWrite(RIGHT_FORWARD,HIGH); 89 | digitalWrite(LEFT_BACKWARD,HIGH); 90 | } 91 | else if(Received_Command == 0) //STOP (all motors stop) 92 | { 93 | digitalWrite(RIGHT_FORWARD,LOW); 94 | digitalWrite(RIGHT_BACKWARD,LOW); 95 | digitalWrite(LEFT_FORWARD,LOW); 96 | digitalWrite(LEFT_BACKWARD,LOW); 97 | } 98 | else //STOP (all motors stop) , If any other command is received. 99 | { 100 | digitalWrite(RIGHT_FORWARD,LOW); 101 | digitalWrite(RIGHT_BACKWARD,LOW); 102 | digitalWrite(LEFT_FORWARD,LOW); 103 | digitalWrite(LEFT_BACKWARD,LOW); 104 | } 105 | } 106 | //delay(10); 107 | } 108 | -------------------------------------------------------------------------------- /Schematic Rx(Car).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THARUN1526/Gesture-Controlled-Robot-Engineering-Project-/f199bbb9edad68cf83803dc1a590347d1e2f12cd/Schematic Rx(Car).pdf -------------------------------------------------------------------------------- /Schematic Tx(Gloves).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THARUN1526/Gesture-Controlled-Robot-Engineering-Project-/f199bbb9edad68cf83803dc1a590347d1e2f12cd/Schematic Tx(Gloves).pdf -------------------------------------------------------------------------------- /Tx code file/Tx code file.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "Wire.h" 5 | #include "MPU6050.h" 6 | 7 | #define CSN_GPIO 8 8 | #define CE_GPIO 7 9 | 10 | // Hardware configuration 11 | RF24 radio(CE_GPIO, CSN_GPIO); // Set up nRF24L01 radio on SPI bus plus pins 7 & 8 12 | MPU6050 accelgyro; 13 | 14 | int16_t ax, ay, az; // x-axis and y-axis values, for this application z-axis is not needed. 15 | int16_t gx, gy, gz; // these values are not used, just declaring to pass in the function. 16 | 17 | #define TX_ENABLE_KEY 2 18 | #define TX_LED 3 19 | 20 | const byte Address[6] = "00001"; 21 | int Pot_Val_Y = 0,Pot_Val_X = 0, Up_key = 0, Dn_key = 0, Left_key = 0, Right_key = 0; 22 | unsigned char Tx_command = 0,Speed_index = 0,Tx_Enable_Flag = 0,TX_Key_Pressed = 0; 23 | unsigned char Tx_Array[2]; 24 | 25 | 26 | 27 | void setup() { 28 | Serial.begin(115200); 29 | pinMode(TX_ENABLE_KEY, INPUT_PULLUP); 30 | pinMode(TX_LED, OUTPUT); 31 | 32 | radio.begin(); 33 | radio.openWritingPipe(Address); 34 | radio.setPALevel(RF24_PA_MAX); 35 | radio.stopListening(); 36 | radio.write(&Tx_command, sizeof(Tx_command)); 37 | 38 | Wire.begin(); 39 | Serial.println("Initializing I2C devices..."); 40 | accelgyro.initialize(); 41 | 42 | // verify connection 43 | Serial.println("Testing device connections..."); 44 | Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed"); 45 | 46 | Tx_Array[0] = 0; 47 | Tx_Array[1] = 0; 48 | 49 | } 50 | 51 | void loop() 52 | { 53 | accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // we are getting all 6 value from MPU6050 i.e. 3 Accelerometer values and 3 Gyro values viz. ax,ay,az,gx,gy and gz. 54 | 55 | if(!(PIND & 0x04)&&(TX_Key_Pressed==0)) 56 | { 57 | TX_Key_Pressed = 1; 58 | if(Tx_Enable_Flag==0) 59 | { 60 | Tx_Enable_Flag = 1; 61 | PORTD |= 0x08; 62 | //Serial.println("A"); 63 | } 64 | else 65 | { 66 | Tx_Enable_Flag = 0; 67 | PORTD &= 0xF7; 68 | //Serial.println("B"); 69 | } 70 | //PORTD |= 0x08; 71 | Serial.println("Pressed"); 72 | } 73 | else if((PIND & 0x04)&&(TX_Key_Pressed==1)) 74 | { 75 | TX_Key_Pressed = 0; 76 | Serial.println("Released"); 77 | } 78 | 79 | if((ay<=-4000)||((ay>=4000))) 80 | { 81 | //Serial.print("A , "); // uncomment A,B,C..... if you are debugging 82 | if((ax>=-4000)||((ax<=4000))) 83 | { 84 | Serial.print("B , "); 85 | if((ay<=-4000)) 86 | { 87 | //Serial.print("C , "); 88 | Tx_command = 1; // forward 89 | Speed_index = (ay + 4000)/-2000 + 1; // more the negative value more the speed. ay valu varies from -16384 to +16384 same for ax and others. 90 | if(Speed_index>5) 91 | { 92 | Speed_index = 5; 93 | } 94 | } 95 | 96 | if((ay>=4000)) 97 | { 98 | //Serial.print("D , "); 99 | Tx_command = 2; // Backward 100 | Speed_index = (ay - 4000)/2000 + 1; // more the positive value more the speed. ay valu varies from -16384 to +16384 same for ax and others. 101 | if(Speed_index>5) 102 | { 103 | Speed_index = 5; 104 | } 105 | } 106 | } 107 | else 108 | { 109 | //Serial.print("E , "); 110 | Tx_command = 0; 111 | Speed_index = 0; 112 | } 113 | } 114 | else if((ax<=-4000)||((ax>=4000))) 115 | { 116 | //Serial.print("F , "); 117 | if((ay>=-4000)||((ay<=4000))) 118 | { 119 | //Serial.print("G , "); 120 | if((ax<=-4000)) 121 | { 122 | //Serial.print("H , "); 123 | Tx_command = 4; // Right 124 | Speed_index = (ax + 4000)/-2000 + 1; // more the negative value more the speed. ax valu varies from -16384 to +16384 same for ay and others. 125 | if(Speed_index>5) 126 | { 127 | Speed_index = 5; 128 | } 129 | } 130 | 131 | if((ax>=4000)) 132 | { 133 | //Serial.print("I , "); 134 | Tx_command = 3; // Left 135 | Speed_index = (ax - 4000)/2000 + 1; // more the positive value more the speed. ax valu varies from -16384 to +16384 same for ay and others. 136 | if(Speed_index>5) 137 | { 138 | Speed_index = 5; 139 | } 140 | } 141 | } 142 | else 143 | { 144 | //Serial.print("J , "); 145 | Tx_command = 0; 146 | Speed_index = 0; 147 | } 148 | } 149 | else 150 | { 151 | //Serial.print("K , "); 152 | Tx_command = 0; 153 | Speed_index = 0; 154 | } 155 | Serial.print(Tx_command); 156 | Serial.print(" , "); 157 | Serial.println(Speed_index); 158 | if(Tx_Enable_Flag) 159 | { 160 | Tx_Array[0] = Tx_command; 161 | Tx_Array[1] = Speed_index; 162 | radio.write(&Tx_Array, 2); // 1st byte = Direction , 2nd Byte = Speed 163 | } 164 | delay(100); 165 | } 166 | --------------------------------------------------------------------------------