├── Powerful Gogo.pdf ├── README.md ├── Radar.ino ├── Servo.py └── Radar_pde.pde /Powerful Gogo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vishal-sreenivas/Anti-missile-system-using-camera-and-laser-module-IOT-/HEAD/Powerful Gogo.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Anti-missile-system-using-camera-and-laser-module-IOT- 2 | Its a IoT based project , where used arduino uno board for dectection of missiles and prevention. • Designed a missile detection system with help of Arduino Uno board . • Used camera module to detect the missiles and showed in radar . • With help of laser module it is assumed as THEL and pointed to unwanted objects 3 | -------------------------------------------------------------------------------- /Radar.ino: -------------------------------------------------------------------------------- 1 | #include . 2 | const int trigPin = 8; 3 | const int echoPin = 9; 4 | // defining time and distance 5 | long duration; 6 | int distance; 7 | Servo myServo; // Object servo 8 | void setup() { 9 | pinMode(trigPin, OUTPUT); // trigPin as an Output 10 | pinMode(echoPin, INPUT); // echoPin as an Input 11 | Serial.begin(9600); 12 | myServo.attach(10); // Pin Connected To Servo 13 | } 14 | void loop() { 15 | // rotating servo i++ depicts increment of one degree 16 | for(int i=15;i<=120;i++){ 17 | myServo.write(i); 18 | delay(30); 19 | distance = calculateDistance(); 20 | 21 | Serial.print(i); 22 | Serial.print(","); 23 | Serial.print(distance); 24 | Serial.print("."); 25 | } 26 | // Repeats the previous lines from 165 to 15 degrees 27 | for(int i=120;i>15;i--){ 28 | myServo.write(i); 29 | delay(30); 30 | distance = calculateDistance(); 31 | Serial.print(i); 32 | Serial.print(","); 33 | Serial.print(distance); 34 | Serial.print("."); 35 | } 36 | } 37 | int calculateDistance(){ 38 | 39 | digitalWrite(trigPin, LOW); 40 | delayMicroseconds(2); 41 | // Sets the trigPin on HIGH state for 10 micro seconds 42 | digitalWrite(trigPin, HIGH); 43 | delayMicroseconds(10); 44 | digitalWrite(trigPin, LOW); 45 | duration = pulseIn(echoPin, HIGH); 46 | distance= duration*0.034/2; 47 | return distance; 48 | } -------------------------------------------------------------------------------- /Servo.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | from cvzone.FaceDetectionModule import FaceDetector 3 | import pyfirmata 4 | import numpy as np 5 | 6 | cap = cv2.VideoCapture(0) 7 | ws, hs = 1280, 720 8 | cap.set(3, ws) 9 | cap.set(4, hs) 10 | 11 | if not cap.isOpened(): 12 | print("Camera couldn't Access!!!") 13 | exit() 14 | 15 | 16 | port = "COM3" 17 | board = pyfirmata.Arduino(port) 18 | servo_pinX = board.get_pin('d:9:s') #pin 9 Arduino 19 | servo_pinY = board.get_pin('d:10:s') #pin 10 Arduino 20 | 21 | detector = FaceDetector() 22 | servoPos = [90, 90] # initial servo position 23 | 24 | while True: 25 | success, img = cap.read() 26 | img, bboxs = detector.findFaces(img, draw=False) 27 | 28 | if bboxs: 29 | #get the coordinate 30 | fx, fy = bboxs[0]["center"][0], bboxs[0]["center"][1] 31 | pos = [fx, fy] 32 | #convert coordinat to servo degree 33 | servoX = np.interp(fx, [0, ws], [0, 180]) 34 | servoY = np.interp(fy, [0, hs], [0, 180]) 35 | 36 | if servoX < 0: 37 | servoX = 0 38 | elif servoX > 180: 39 | servoX = 180 40 | if servoY < 0: 41 | servoY = 0 42 | elif servoY > 180: 43 | servoY = 180 44 | 45 | servoPos[0] = servoX 46 | servoPos[1] = servoY 47 | 48 | 49 | cv2.circle(img, (fx, fy), 80, (0, 0, 255), 2) 50 | cv2.putText(img, str(pos), (fx+15, fy-15), cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 0), 2 ) 51 | cv2.line(img, (0, fy), (ws, fy), (0, 0, 0), 2) # x line 52 | cv2.line(img, (fx, hs), (fx, 0), (0, 0, 0), 2) # y line 53 | cv2.circle(img, (fx, fy), 15, (0, 0, 255), cv2.FILLED) 54 | cv2.putText(img, "TARGET LOCKED", (850, 50), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3 ) 55 | 56 | else: 57 | cv2.putText(img, "NO TARGET", (880, 50), cv2.FONT_HERSHEY_PLAIN, 3, (0, 0, 255), 3) 58 | cv2.circle(img, (640, 360), 80, (0, 0, 255), 2) 59 | cv2.circle(img, (640, 360), 15, (0, 0, 255), cv2.FILLED) 60 | cv2.line(img, (0, 360), (ws, 360), (0, 0, 0), 2) # x line 61 | cv2.line(img, (640, hs), (640, 0), (0, 0, 0), 2) # y line 62 | 63 | 64 | cv2.putText(img, f'Servo X: {int(servoPos[0])} deg', (50, 50), cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 0), 2) 65 | cv2.putText(img, f'Servo Y: {int(servoPos[1])} deg', (50, 100), cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 0), 2) 66 | 67 | servo_pinX.write(servoPos[0]) 68 | servo_pinY.write(servoPos[1]) 69 | 70 | cv2.imshow("Image", img) 71 | cv2.waitKey(1) 72 | -------------------------------------------------------------------------------- /Radar_pde.pde: -------------------------------------------------------------------------------- 1 | import processing.serial.*; 2 | import java.awt.event.KeyEvent; 3 | import java.io.IOException; 4 | Serial myPort;// defubes variables 5 | 6 | String distance=""; 7 | String data=""; 8 | String noObject; 9 | String angle=""; 10 | float pixsDistance; 11 | int iAngle, iDistance; 12 | int index1=0; 13 | int index2=0; 14 | PFont orcFont; 15 | void setup() { 16 | 17 | size (1280 ,720); 18 | smooth(); 19 | myPort = new Serial(this,"COM11", 9600); // change this accordingly 20 | myPort.bufferUntil('.'); // reads the data from the serial port up to the character ‘.’. So actually it reads this: angle,distance. 21 | } 22 | void draw() { 23 | 24 | fill(98,245,31); 25 | // simulating motion blur and slow fade of the moving line 26 | noStroke(); 27 | fill(0,4); 28 | rect(0, 0, width, height-height*0.065); 29 | 30 | fill(98,245,31); // green color 31 | // calls the functions for drawing the radar 32 | drawRadar(); 33 | drawLine(); 34 | drawObject(); 35 | drawText(); 36 | } 37 | void serialEvent (Serial myPort) { // starts reading data from the Serial Port 38 | // reads the data from the Serial Port up to the character ‘.’ and puts it into the String variable “data”. 39 | data = myPort.readStringUntil('.'); 40 | data = data.substring(0,data.length()-1); 41 | 42 | index1 = data.indexOf(','); // find the character ‘,’ and puts it into the variable “index1” 43 | angle= data.substring(0, index1); // read the data from position “0” to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port 44 | distance= data.substring(index1+1, data.length()); // read the data from position “index1” to the end of the data pr thats the value of the distance 45 | 46 | // converts the String variables into Integer 47 | iAngle = int(angle); 48 | iDistance = int(distance); 49 | } 50 | void drawRadar() { 51 | pushMatrix(); 52 | translate(width/2,height-height*0.074); // moves the starting coordinats to new location 53 | noFill(); 54 | strokeWeight(2); 55 | stroke(98,245,31); 56 | // draws the arc lines 57 | arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); 58 | arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); 59 | arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); 60 | arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); 61 | // draws the angle lines 62 | line(-width/2,0,width/2,0); 63 | line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); 64 | line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); 65 | line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); 66 | line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); 67 | line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); 68 | line((-width/2)*cos(radians(30)),0,width/2,0); 69 | popMatrix(); 70 | } 71 | void drawObject() { 72 | pushMatrix(); 73 | translate(width/2,height-height*0.074); // moves the starting coordinats to new location 74 | strokeWeight(9); 75 | stroke(255,10,10); // red color 76 | pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels 77 | // limiting the range to 40 cms 78 | if(iDistance<40){ 79 | // draws the object according to the angle and the distance 80 | line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); 81 | } 82 | popMatrix(); 83 | } 84 | void drawLine() { 85 | pushMatrix(); 86 | strokeWeight(9); 87 | stroke(30,250,60); 88 | translate(width/2,height-height*0.074); // moves the starting coordinats to new location 89 | line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle 90 | popMatrix(); 91 | } 92 | void drawText() { // draws the texts on the screen 93 | 94 | pushMatrix(); 95 | if(iDistance>40) { 96 | noObject = "Out of Range"; 97 | } 98 | else { 99 | noObject = "In Range"; 100 | } 101 | fill(0,0,0); 102 | noStroke(); 103 | rect(0, height-height*0.0648, width, height); 104 | fill(98,245,31); 105 | textSize(25); 106 | 107 | text("10cm",width-width*0.3854,height-height*0.0833); 108 | text("20cm",width-width*0.281,height-height*0.0833); 109 | text("30cm",width-width*0.177,height-height*0.0833); 110 | text("40cm",width-width*0.0729,height-height*0.0833); 111 | textSize(40); 112 | text("SANJU VISHAL VIVEK", width-width*0.875, height-height*0.0277); 113 | text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277); 114 | text("", width-width*0.26, height-height*0.0277); 115 | if(iDistance<40) { 116 | text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277); 117 | } 118 | textSize(25); 119 | fill(98,245,60); 120 | translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); 121 | rotate(-radians(-60)); 122 | text("30°",0,0); 123 | resetMatrix(); 124 | translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); 125 | rotate(-radians(-30)); 126 | text("60°",0,0); 127 | resetMatrix(); 128 | translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); 129 | rotate(radians(0)); 130 | text("90°",0,0); 131 | resetMatrix(); 132 | translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); 133 | rotate(radians(-30)); 134 | text("120°",0,0); 135 | resetMatrix(); 136 | translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); 137 | rotate(radians(-60)); 138 | text("150°",0,0); 139 | popMatrix(); 140 | } 141 | --------------------------------------------------------------------------------