├── LICENSE
├── README.md
├── code
├── MATRIX DISPLAY_RECIVER
│ ├── MATRIX DISPLAY_RECIVER.ino
│ └── PixelToMatrix.exe
├── SERVO_RECIVER
│ └── SERVO_RECIVER.ino
└── TRASMITTER
│ └── TRASMITTER.ino
└── stl
├── BODY.stl
├── COVER1.stl
├── COVER2.stl
├── Cover.stl
├── FINGER.stl
├── INDEX1.stl
├── INDEX2.stl
└── potentiometer.stl
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 CiferTech
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
IANA
5 |
6 |
7 | A Game-Inspired Gadget for Remote Control of Devices
8 |
9 |
10 |
11 |
12 |
13 |
14 |

15 |

16 |

17 |
18 |
27 |
28 |
29 |
30 |
31 |
32 | # :notebook_with_decorative_cover: Table of Contents
33 |
34 | - [About the Project](#star2-about-the-project)
35 | * [Pictures](#camera-Pictures)
36 | * [Features](#dart-features)
37 | - [Getting Started](#toolbox-getting-started)
38 | * [Schematic](#electric_plug-Schematic)
39 | * [Installation](#gear-installation)
40 | - [Usage](#eyes-usage)
41 | - [License](#warning-license)
42 | - [Contact](#handshake-contact)
43 |
44 |
45 |
46 |
47 | ## :star2: About the Project
48 | We will be building a smart glove inspired by the game Rainbow Six Siege from IANA character. The project allows us to control a device remotely, using hand gestures captured by a MPU6050 accelerometer/gyroscope and two potentiometers. Wireless communication between the glove and the device is achieved using the nRF24 radio
49 |
50 |
51 | ### :camera: Pictures
52 |
53 |
54 |

55 |
56 |
57 |
58 |
59 | ### :dart: Features
60 |
61 | - Uses 2.4Ghz band for comunication
62 | - 2 potenciameter for track the movemnent of two finger
63 | - MPU6050 for track the hand movement
64 |
65 |
66 | ## :toolbox: Getting Started
67 |
68 | To build this project, you will need the following parts and tools:
69 |
70 | - Arduino Nano
71 | - MPU6050 Gyroscope
72 | - nRF24L01 Wireless Transceiver
73 | - 2 Potentiometers
74 |
75 |
76 |
77 |
78 |
79 |
80 | ### :electric_plug: Schematic
81 | Make the connections according to the table and schematic below.
82 |
83 | * TRASMITTER
84 |
85 | | Arduino| nRF24|
86 | | ---- | -----|
87 | | 9 | CE |
88 | | 13 | SCK |
89 | | 12 | MISO |
90 | | 10 | CSN |
91 | | 11 | MOSI |
92 | | 3V3 | Vcc |
93 | | GND | GND |
94 |
95 | | Arduino | MPU6050 |
96 | | ---- | -----|
97 | | A4 | SDA |
98 | | A5 | SCL |
99 | | 5v | VCC |
100 | | GND | GND |
101 |
102 | | Arduino | Poyenciameter1 |
103 | | ---- | -----|
104 | | Wiper | A2 |
105 | | 5v | VCC |
106 | | GND | GND |
107 |
108 | | Arduino | Poyenciameter2 |
109 | | ---- | -----|
110 | | Wiper | A3 |
111 | | 5v | VCC |
112 | | GND | GND |
113 |
114 |
115 | * RECIVER
116 |
117 | | Arduino| nRF24|
118 | | ---- | -----|
119 | | 9 | CE |
120 | | 13 | SCK |
121 | | 12 | MISO |
122 | | 10 | CSN |
123 | | 11 | MOSI |
124 | | 3V3 | Vcc |
125 | | GND | GND |
126 |
127 |
128 | * Complete Schematic
129 |
130 |
131 |
132 |
133 |
134 | ### :gear: Installation
135 |
136 | you need to install the required library in Arduino IDE Follow these steps:
137 |
138 | - Follow this path Sketch> Include Library> Manage Libraries
139 | - Search for nRF24L01 and Install the library
140 | - Search for RF24 and Install the library
141 | - Search for MPU6050 and Install the library
142 |
143 |
144 |
145 | ## :eyes: Usage
146 |
147 | After uploading the code, Finally, you can test the smart glove by sending data wirelessly to a device and verifying that it responds as expected. You can then customize the code further to suit your specific requirements and make the smart glove even more functional.
148 |
149 |
150 |
151 | ## :warning: License
152 |
153 | Distributed under the MIT License. See LICENSE.txt for more information.
154 |
155 |
156 |
157 | ## :handshake: Contact
158 |
159 | CiferTech - [@twitter](https://twitter.com/cifertech1) - CiferTech@gmali.com
160 |
161 | Project Link: [https://github.com/cifertech/IANA](https://github.com/cifertech/IANA)
162 |
163 |
164 | ## :gem: Acknowledgements
165 |
166 | - [Motion HID Glove](https://www.thingiverse.com/thing:3673439)
167 | - [Overwatch Junkrat Gauntlet](https://www.thingiverse.com/thing:1887603)
168 |
169 |
170 |
--------------------------------------------------------------------------------
/code/MATRIX DISPLAY_RECIVER/MATRIX DISPLAY_RECIVER.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | const uint64_t pipeIn = 0xE8E8F0F0E1LL;
7 |
8 | RF24 radio(9, 10);
9 |
10 | int DIN = 7;
11 | int CS = 6;
12 | int CLK = 5;
13 |
14 | LedControl lc=LedControl(DIN,CLK,CS,0);
15 |
16 | struct MyData {
17 | byte X;
18 | byte Y;
19 | int value;
20 | int value1;
21 | };
22 |
23 | MyData data;
24 |
25 | void setup()
26 | {
27 | Serial.begin(9600);
28 |
29 | lc.shutdown(0,false);
30 | lc.setIntensity(0,15);
31 | lc.clearDisplay(0);
32 |
33 | radio.begin();
34 | radio.setAutoAck(false);
35 | radio.setDataRate(RF24_250KBPS);
36 | radio.openReadingPipe(1, pipeIn);
37 | radio.startListening();
38 |
39 | }
40 |
41 | void recvData()
42 | {
43 | if ( radio.available() ) {
44 | radio.read(&data, sizeof(MyData));
45 |
46 |
47 | if (data.Y < 80) { //Reverse
48 | byte a[8] = {0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C};
49 | printByte(a);
50 | }
51 |
52 | if (data.Y > 145) {//forward
53 | byte a[8] = {0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18};
54 | printByte(a);
55 | }
56 |
57 | if (data.X > 155) {//right
58 | byte a[8] = {0x10,0x30,0x7F,0xFF,0xFF,0x7F,0x30,0x10};
59 | printByte(a);
60 | }
61 |
62 | if (data.X < 80) {//left
63 | byte a[8] = {0x08,0x0C,0xFE,0xFF,0xFF,0xFE,0x0C,0x08};
64 | printByte(a);
65 | }
66 |
67 | if (data.X > 100 && data.X < 170 && data.Y > 80 && data.Y < 130) { //stop
68 | byte a[8] = {0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00};
69 | printByte(a);
70 | }
71 | }
72 | }
73 |
74 | void loop()
75 | {
76 | recvData();
77 | Serial.print("X= ");
78 | Serial.print(data.X);
79 | Serial.print(" ");
80 | Serial.print("Y= ");
81 | Serial.print(data.Y);
82 | Serial.print(" ");
83 | Serial.print("P1= ");
84 | Serial.print(data.value);
85 | Serial.print(" ");
86 | Serial.print("P2= ");
87 | Serial.print(data.value1);
88 | Serial.print("\n");
89 | }
90 |
91 | void printByte(byte character [])
92 | {
93 | int i = 0;
94 | for(i=0;i<8;i++)
95 | {
96 | lc.setRow(0,i,character[i]);
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/code/MATRIX DISPLAY_RECIVER/PixelToMatrix.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/code/MATRIX DISPLAY_RECIVER/PixelToMatrix.exe
--------------------------------------------------------------------------------
/code/SERVO_RECIVER/SERVO_RECIVER.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include
6 | Servo servox;
7 | Servo servoy;
8 |
9 | const uint64_t pipeIn = 0xE8E8F0F0E1LL;
10 |
11 | RF24 radio(9, 10);
12 |
13 |
14 | struct MyData {
15 | byte X;
16 | byte Y;
17 | int value;
18 | int value1;
19 | };
20 |
21 | MyData data;
22 |
23 | void setup()
24 | {
25 | Serial.begin(9600);
26 |
27 | servox.attach(6);
28 | servoy.attach(5);
29 |
30 | radio.begin();
31 | radio.setAutoAck(false);
32 | radio.setDataRate(RF24_250KBPS);
33 | radio.openReadingPipe(1, pipeIn);
34 | radio.startListening();
35 |
36 | }
37 |
38 | void recvData()
39 | {
40 | if ( radio.available() ) {
41 | radio.read(&data, sizeof(MyData));
42 |
43 | /*
44 | if (data.Y < 80) { //Reverse
45 | servoy.write(90);
46 | }
47 |
48 | if (data.Y > 145) {//forward
49 | servoy.write(180);
50 | }
51 |
52 | if (data.X > 155) {//right
53 | servox.write(180);
54 | }
55 |
56 | if (data.X < 80) {//left
57 | servox.write(90);
58 | }
59 |
60 | if (data.X > 100 && data.X < 170 && data.Y > 80 && data.Y < 130) { //stop
61 | servox.write(0);
62 | servoy.write(0);
63 | }
64 | */
65 |
66 | if (data.value < 80) { //Reverse
67 | servoy.write(90);
68 | }
69 |
70 | if (data.value > 145) {//forward
71 | servoy.write(180);
72 | }
73 |
74 | if (data.value1 > 155) {//right
75 | servox.write(180);
76 | }
77 |
78 | if (data.value1 < 80) {//left
79 | servox.write(90);
80 | }
81 |
82 | if (data.value > 100 && data.value < 170 && data.value1 > 80 && data.value1 < 130) { //stop
83 | servox.write(0);
84 | servoy.write(0);
85 | }
86 |
87 | }
88 | }
89 |
90 | void loop()
91 | {
92 | recvData();
93 | Serial.print("X= ");
94 | Serial.print(data.X);
95 | Serial.print(" ");
96 | Serial.print("Y= ");
97 | Serial.print(data.Y);
98 | Serial.print(" ");
99 | Serial.print("P1= ");
100 | Serial.print(data.value);
101 | Serial.print(" ");
102 | Serial.print("P2= ");
103 | Serial.print(data.value1);
104 | Serial.print("\n");
105 | }
106 |
--------------------------------------------------------------------------------
/code/TRASMITTER/TRASMITTER.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include "Wire.h"
5 | #include "I2Cdev.h"
6 | #include "MPU6050.h"
7 |
8 | const int potPin = A2;
9 | const int potPin1 = A3;
10 |
11 |
12 | MPU6050 mpu;
13 | int16_t ax, ay, az;
14 | int16_t gx, gy, gz;
15 |
16 | int16_t value;
17 | int16_t value1;
18 |
19 | const uint64_t pipeOut = 0xE8E8F0F0E1LL;
20 |
21 | RF24 radio(9, 10); // CN and CSN
22 |
23 | struct MyData {
24 | byte X;
25 | byte Y;
26 | int value=0;
27 | int value1=0;
28 | };
29 |
30 | MyData data;
31 |
32 | void setup()
33 | {
34 | Serial.begin(9600);
35 |
36 | pinMode(potPin, INPUT);
37 | pinMode(potPin1, INPUT);
38 |
39 | Wire.begin();
40 | mpu.initialize();
41 |
42 | radio.begin();
43 | radio.setAutoAck(false);
44 | radio.setDataRate(RF24_250KBPS);
45 | radio.openWritingPipe(pipeOut);
46 | }
47 |
48 | void loop()
49 | {
50 | mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
51 |
52 | data.X = map(ax, -17000, 17000, 0, 255 );
53 | data.Y = map(ay, -17000, 17000, 0, 255);
54 |
55 | value = analogRead(potPin);
56 | data.value = map(value, 0, 1023, 0, 255);
57 |
58 | value1 = analogRead(potPin1);
59 | data.value1 = map(value1, 0, 1023, 0, 255);
60 |
61 | delay(50);
62 | radio.write(&data, sizeof(MyData));
63 |
64 | Serial.print("Axis X = ");
65 | Serial.print(data.X);
66 | Serial.print(" ");
67 | Serial.print("Axis Y = ");
68 | Serial.println(data.Y);
69 |
70 | Serial.print("P1 = ");
71 | Serial.print(data.value);
72 | Serial.print("P2 = ");
73 | Serial.println(data.value1);
74 | }
75 |
--------------------------------------------------------------------------------
/stl/BODY.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/BODY.stl
--------------------------------------------------------------------------------
/stl/COVER1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/COVER1.stl
--------------------------------------------------------------------------------
/stl/COVER2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/COVER2.stl
--------------------------------------------------------------------------------
/stl/Cover.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/Cover.stl
--------------------------------------------------------------------------------
/stl/FINGER.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/FINGER.stl
--------------------------------------------------------------------------------
/stl/INDEX1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/INDEX1.stl
--------------------------------------------------------------------------------
/stl/INDEX2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/INDEX2.stl
--------------------------------------------------------------------------------
/stl/potentiometer.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cifertech/IANA/594a5b5d0f22ca5ef300a2ad94558b4138c4c7e2/stl/potentiometer.stl
--------------------------------------------------------------------------------