Introduction: Automatic Nerf Sentry Turret

This is a an automatic nerf sentry turret. It will run using an internal power supply and all of the logic will be provided by an ESP-32 microcontroller. There will be an ESP-32 camera that will be used to detect faces so that the nerf blaster knows when there is a target in sight. In order to get the turret to aim, it will be mounted to a servo motor to pivot around. There will also be a second servo motor used to pull the trigger of the nerf blaster. All of this will be supported by a frame built from popsicle sticks and hot glue.


Supplies

  • Popsicle Sticks
  • Hot Glue
  • ESP-32 Microcontroller and Camera
  • 1 MG 996R Servo Motor
  • 1 DSServo 80Kg servo motor
  • Battery Powered Nerf Blaster of User's Choice
  • External Battery

Step 1: Go to Your Browser and Search Aruduino IDE Download. Click on the First Link

Navigate to the Arduino website.

Step 2: Select the Proper Software Based Upon the Operating System on Your Computer or Laptop. Then Click Download

You may download for free or donate to Arduino, that's a personal choice.

Step 3: Go to Your Download Folder on Your Computer or Laptop and Click the Arduino IDE File

Step 4: Select "I Agree" on the Window That Pops Up

Step 5: Select the Option for "only Me" and Click Next

Step 6: Choose the Destination You Wish to Install the Software and Click "Install"

Step 7: Click "Finish"

Step 8: Open Up the Arduino IDE Software and Click "File" in the Upper Left Hand Corner of the Screen

Step 9: Scroll Down to Additional Boards Manager and Paste the Link Below in the Additional Boards URLs Section

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Step 10: Click on Tools, and Navigate Down the Menu to the Board Section. Click on That and in the New Menu Click on "Boards Manager"

Step 11: Search ESP32 in the Boards Manager and Click Install on the ESP32 by Espressif Systems Board Set

Step 12: Plug the ESP32 Into Your Computer or Laptop. Click the Arrow in Selecting Your Board and Choose the USB Serial Port. Select the Board Type "AI Thinker ESP32-Cam"

Step 13: Click on Tools and Navigate to "partition Scheme". Click on That and Select "Huge APP (3MB No OTA/1MB SPIFFS)"

Step 14: Ensure That the CPU Frequency, Core Debug Level, Erase All Flash Before Sketch Upload, Flash Frequency, and Flash Mode All Match the Settings Within the Pictures Provided

Step 15: Open Google and Visit: Https://www.python.org/downloads/

Step 16: Click the Yellow "download Python ..." Button

Step 17: Once Python Is Downloaded, Run the .exe File That Was Downloaded

Step 18: Once Python Has Finished Installing, Go to the Search Bar on Your Computer and Type in CMD

Step 19: Click on the Tile That Says "command Prompt". a Black Window Should Pull Up

Step 20: Type in "Pip Install Opencv-Python" and Press Enter

Step 21: Type in "pip Install Numpy" and Press Enter

Step 22: Type in "pip Install Matplotlib" and Press Enter

Step 23: Take 5 Popsicle Sticks and Glue Them All on Top of Each Other, Do This Six Times

Detailed CAD of the turret base can be found in the attached CAD files.

Step 24: Take Two Popsicle Sticks and Hot Glue Them on Their Side to the Underside of the Servo Mounting Flanges

Step 25: Take Two Stacks of Popsicle Sticks and Place Them Perpendicular Underneath the Popsicle Sticks and Flush to the Servo Body, Then Glue Them in Place

Step 26: Take Another Two Stacks of Popsicle Sticks and Place Them Underneath and Perpendicular to the Stacks From Step 25, and Flush to the Servo Body, Then Glue Them in Place

Step 27: Glue a Popsicle Stick to the Top of and in Line With Each of the Bottom Sets of Popsicle Sticks, It Should Be Sticking Off Like a Diving Board

Step 28: Mirror These Popsicle Sticks to the Underside of the Frame

Step 29: Take the Fifth Stack of Popsicle Sticks and Place It Underneath the Sticks From Step 27, But Above the Sticks From Step 28, Across Them Located at Their Tip. Glue This in Place There

Step 30: Glue As Many Popsicle Sticks As Is Necessary Flat and Underneath the Bottom Set of Popsicle Sticks to Fully Bridge the Gap Between the Popsicle Sticks From Step 28

Step 31: Take the Sixth Stack of Popsicle Sticks and Line It Up With the Metal Servo Horn

Step 32: Use a Sharpie to Transfer the Location of the Mounting Holes in the Servo Horn to the Middle of One End of the Stack of Popsicle Sticks

Step 33: Use a Screwdriver or 1/8th Drill to Drill Those Holes Into the Stack

Step 34: Glue the Stack Onto the Servo Horn

Step 35: Put the Mounting Screws for the Servo Horn Through the Stack and Screw Them Down Tightly, But Not Tightly Enough to Break the Wood

Step 36: Place a 2X3 Array of Hot Glue Blobs on the Bottom of the Frame and Allow Them to Dry

Step 37: Open Up the Arduino IDE Software

Step 38: Copy the Code Below and Paste It Into the The New Sketch in the Software

#include <WebServer.h>
#include <WiFi.h>
#include <esp32cam.h>
#include <ESP32_Servo.h>

const char* WIFI_SSID = "Your-Wifi";
const char* WIFI_PASS = "Your-Password";

WebServer server(80);
Servo aimingServ;
Servo firingServ;
int pos;
bool dir;
int firePos = 0;
int openPos = 30;
int servoIncrement = 3;

static auto loRes = esp32cam::Resolution::find(320, 240);
static auto midRes = esp32cam::Resolution::find(350, 530);
static auto hiRes = esp32cam::Resolution::find(800, 600);

void serveJpg()
{
 auto frame = esp32cam::capture();

 if (frame == nullptr) {
  Serial.println("CAPTURE FAIL");
  server.send(503, "", "");
  return;
 }
 server.setContentLength(frame->size());
 server.send(200, "image/jpeg");
 WiFiClient client = server.client(); 
 frame->writeTo(client);
}

void handleJpgMid()
{
 if (!esp32cam::Camera.changeResolution(midRes)) {
 }
 serveJpg();
}

void scan() {
 server.send(201);
 if(pos >= 179 || pos <= 1) {
  dir = !dir;
 }
 if(dir) {
  pos+=1;
  aimingServ.write(pos);
 } else {
  pos-=1;
  aimingServ.write(pos);
 }
}

void moveLeft() {
 server.send(201);
 dir = false;
 pos-=servoIncrement;
 if(pos < 1) {
  pos = 0;
 }
 aimingServ.write(pos);
}
void moveRight() {
 server.send(201);
 dir = true;
 pos+=servoIncrement;
 if(pos > 179) {
  pos =180;
 }
 aimingServ.write(pos);
}
void fire() {
 server.send(201);
 firingServ.write(firePos);
 delay(500);
 firingServ.write(openPos);
}


void setup(){
 pinMode(4,OUTPUT);
 digitalWrite(4,HIGH);
 delay(100);
 digitalWrite(4,LOW);
 Serial.begin(115200);
 Serial.println();
 aimingServ.attach(14);
 firingServ.attach(15);
 pos = 90;
 dir = false;
 aimingServ.write(pos);
 firingServ.write(openPos);
 {
  using namespace esp32cam;
  Config cfg;
  cfg.setPins(pins::AiThinker);
  cfg.setResolution(hiRes);
  cfg.setBufferCount(2);
  cfg.setJpeg(80);

  bool ok = Camera.begin(cfg);
  Serial.println(ok ? "CAMERA OK" : "CAMERA FAIL");
  if(!ok) {
   for(int i = 0; i < 10; i ++){
    digitalWrite(4,HIGH);
    delay(1000);
    digitalWrite(4,LOW);
    delay(500);
   }
  } else {
    for(int j = 0; j<3; j++){
    for(int i = 0; i < 3; i ++){
     digitalWrite(4,HIGH);
     delay(250);
     digitalWrite(4,LOW);
     delay(250);
    }
    delay(500);
   }
  }
 }
 WiFi.persistent(false);
 WiFi.mode(WIFI_STA);
 WiFi.begin(WIFI_SSID, WIFI_PASS);
 while (WiFi.status() != WL_CONNECTED) {
  delay(250);
 }
 Serial.print("http://");
 Serial.println(WiFi.localIP());
 Serial.println(" /cam-mid.jpg");
 Serial.println(" /left");
 Serial.println(" /right"); 
 Serial.println(" /fire"); 
 Serial.println(" /scan"); 
 server.on("/cam-mid.jpg", handleJpgMid);
 server.on("/left", moveLeft);
 server.on("/right", moveRight);
 server.on("/fire", fire);
 server.on("/scan", scan);

 server.begin();
 for(int i = 0; i < 10; i ++){
    digitalWrite(4,HIGH);
    delay(50);
    digitalWrite(4,LOW);
    delay(50);
   }
}

void loop()
{
 server.handleClient();
}


Step 39: Replace "Your-Wifi" and "Your-Password" With Your Wifi Address and Password. Leave the Quotation Marks Around the Wifi Name and Password

Step 40: Plug the ESP 32 Into Your Computer or Laptop Using a USB Cable and Make Sure That the ESP 32 Is Connected to Your Device

Step 41: Click the Arrow in the Top Left of the Software to Upload the Program to the ESP 32

Step 42: Watch the Serial Monitor in the Arduino IDE, Ensure the Baud Rate Is Set to 115200

Step 43: If the Wifi Was Set Up Correctly, the Serial Monitor Will Eventually Show a Number in the Format "xxx.xxx.xxx.xxx." Some of These Sections Can Be Two and One Digit Numbers. Write Down This Number, Do Not Include the Quotations

Step 44: On Your Computer, Open Notepad

Step 45: Paste the Following Code Into Your Notepad Window



import cv2
import matplotlib.pyplot as plt
import cvlib as cv
import urllib.request
import numpy as np
from cvlib.object_detection import draw_bbox
from cvlib.face_detection import detect_face

ipURL = 'http://xxx.xxx.xxx.xxx' 

url= ipURL + '/cam-mid.jpg'
urlLeft= ipURL + '/left'
urlRight= ipURL + '/right'
urlFire= ipURL + '/fire'
urlScan= ipURL + '/scan'
im=None

if __name__ == '__main__':
  print("started")
  print(url)
  cv2.namedWindow("detection", cv2.WINDOW_AUTOSIZE)
  while True:
    imgnp=None
    img_resp=urllib.request.urlopen(url)
    imgnp=np.array(bytearray(img_resp.read()),dtype=np.uint8)
    img_resp.close()
    im = cv2.imdecode(imgnp,-1)
    bbox, conf = detect_face(im)
    num = -1;
    for i in bbox:
      print("s6")
      num = (i[1] + i[3]) / 2
      break
    width,height,cols = im.shape
    print(num)
    img_resp = None
    if (num < 0):
      while img_resp == None:
        img_resp=urllib.request.urlopen(urlScan)
      imgnp=np.array(bytearray(img_resp.read()),dtype=np.uint8)
      img_resp.close()
    elif (num > (2 * height / 3) ):
      while img_resp == None:
        img_resp=urllib.request.urlopen(urlLeft)
      imgnp=np.array(bytearray(img_resp.read()),dtype=np.uint8)
      img_resp.close()
    elif (num < (1 * height / 3) ):
      while img_resp == None:
        img_resp=urllib.request.urlopen(urlRight)
      imgnp=np.array(bytearray(img_resp.read()),dtype=np.uint8)
      img_resp.close()
    elif ((num >= (1 * height / 3)) & (num <= (2 * width / 3)) ):
      while img_resp == None:
        img_resp=urllib.request.urlopen(urlFire)
      imgnp=np.array(bytearray(img_resp.read()),dtype=np.uint8)
      img_resp.close()
    cv2.imshow('detection',im)
    key=cv2.waitKey(5)
    if key==ord('q'):
      break
  cv2.destroyAllWindows()


Step 46: In the Section That Has Xxx.xxx.xxx.xxx, Place the Number That You Wrote Down Previously

Step 47: Save the File to Your Documents Folder

Step 48: In Your Documents Folder, Right Click on the File and Select Rename

Step 49: In the Box for the New Name, Type in The-name-you-want-for-your-file.py

Note The .Py Extension Is The Essential Part Of The Name, But It Would Be Wise Not To Use Spaces Or Slashes In Your Name

Step 50: Connect the Positive Terminal of Each Servo Together.

Step 51: Connect the Negative Terminal of Each Servo and the GND Pin From the ESP32 Together.

Step 52: Connect Pin 14 on the ESP32 to the Swivel Servo Signal Pin

Step 53: Connect Pin 15 on the ESP32 to the Trigger Servo Signal Pin

Step 54: Gluing the Blaster in Place 1

This is where you get to bring in your own nerf toy and mount it to your project. The one used in the pictures is just an example, but many other options exist. Any battery powered Nerf blaster can be made to run on this turret.


Balance your Nerf blaster on the wooden section of the frame sitting atop the servo, in such a way that it can still be loaded and the trigger is accessible, but it does not significantly lean to one side or another. (Ensure that this is done with the battery in the toy so it does not throw balance off later)

Step 55: Gluing the Blaster in Place 2

Lift the toy up, and apply a significant amount of hot glue to the popsicle stick on the servo then place the toy back onto the position it was in. Hold it there until the hot glue cools.

Step 56: Take Your MG 996R Servo

Step 57: Set Your Servo to 30 Degrees and Attach the Cross Pin Horn So That It Is Perpendicular to the Longest Face on the Body, Be Sure to Screw It In

Step 58: Line Up the Horn So That It Sits Into the Trigger Well and Is Just Resting on the Trigger Pulling Face of the Trigger

Step 59: Apply a Significant Amount of Hot Glue to the Body of the Servo That Faces the Toy, Then Push Them Together and Hold Until the Hot Glue Has Cooled

Step 60: Mount the ESP32 As Pictured, With One Row of Pins Against the Body of the Toy and the Camera Facing Down the Barrel and Slightly Angled Upwards

Step 61: Secure the ESP32 in Place With a Small Amount of Hot Glue, Be Sure Not to Get Any in the Contacts

Step 62: Plug the ESP32 Into Your Computer and Run Both Programs As Specified in Section 6.

Use This To Verify The Camera Is Aligned How You Would Like. Ensure the toy and servos are unplugged for this step

Step 63: Unplug Everything and Use More Hot Glue to Affix the ESP32 in Place More Permanently

Step 64: Place the Battery and Wiring in the Tray Underneath the Turret

Step 65: Plug the ESP32 Into Your Computer or a USB Power Bank

Step 66: Plug the Connected Servo Positive Wires to the Battery Positive

Step 67: Plug the Connected Servo Negatives and the ESP32 GND to the Battery Negative

Step 68: Ensure the ESP32 Has Gone Through It's Startup Sequence

This will be clear when the ESP32 has posted its IP address in the serial monitor, or it goes through first four flashes, then two sets of 3 flashes, and finally a set of 10 quick flashes. DO NOT PROCEED if it has not produced the quick flashes. If it does not do this shortly, try turning it off and back on again. or check the wifi and SSID section of the ESP-32 Program.

Step 69: Open CMD

Refer To Steps 18 And 19

Step 70: Type in "cd Documents"

Step 71: Type in Python The-name-you-want-for-your-file.py

And now your turret is running!

Step 72: Sources

Sources

[1] “Project Description - Spring 2023 ECET 38001-001 LEC.” https://purdue.brightspace.com/d2l/le/content/704478/viewContent/11560738/View (accessed Feb. 13, 2023).

[2] A. Kumar, A. Kaur, and M. Kumar, “Face detection techniques: a review,” Artif. Intell. Rev., vol. 52, no. 2, pp. 927–948, Aug. 2019, doi: 10.1007/s10462-018-9650-2.

[3] H. M. Saputra, A. Nurhakim, and M. N. Firdaus, “Servo Motor Controller Device for Stewart Platform Based on Simple Pulse Generator,” in 2019 International Conference on Radar, Antenna, Microwave, Electronics, and Telecommunications (ICRAMET), Oct. 2019, pp. 104–108. doi: 10.1109/ICRAMET47453.2019.8980422.

[4] L. Wulfert, C. Wiede, M. H. Verbunt, P. Gembaczka, and A. Grabmaier, “Human Detection with A Feedforward Neural Network for Small Microcontrollers,” in 2022 7th International Conference on Frontiers of Signal Processing (ICFSP), Sep. 2022, pp. 14–22. doi: 10.1109/ICFSP55781.2022.9924667.

[5] A. Bender, E. Marel, and I. Kristinsson, “Mechatronics I Final Project Report Auto Targeting Nerf Turret”, Dec. 2012, pp. 1-34, doi: 10.1063/1.4999076.

[6]  “ESP32 series,” Espressif. [Online]. Available: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf. [Accessed: 03-Mar-2023]. 

[7]  “Metal DC geared motor w/encoder - 12V 83rpm 45kg.Cm Sku: Fit0185 - digi-key,” DigiKey. [Online]. Available: https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/FIT0185_Web.pdf. [Accessed: 03-Mar-2023]. 

[8]  “OV7670 CMOS camera module REVB DS - OpenHacks,” OpenHacks. [Online]. Available: https://www.openhacks.com/uploadsproductos/ov7670_cmos_camera_module_revc_ds.pdf. [Accessed: 03-Mar-2023]. 

[9] “Amazon.com: FLASH HOBBY D3536 1450KV Brushless Outrunner Motor with 2-4s Lipo (1450kv) : Toys & Games.” https://www.amazon.com/FLASH-HOBBY-1450KV-Brushless-Outrunner/dp/B08M96DF1R/ref=asc_df_B08M96DF1R/?tag=hyprod-20&linkCode=df0&hvadid=598295292427&hvpos=&hvnetw=g&hvrand=15809673157108136490&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-1727180490677&th=1 (accessed Mar. 03, 2023).

[10] “Amazon.com: Greartisan DC 12V 50RPM Gear Motor High Torque Electric Micro Speed Reduction Geared Motor Eccentric Output Shaft 37mm Diameter Gearbox : Automotive.” https://www.amazon.com/Greartisan-Electric-Reduction-Eccentric-Diameter/dp/B071XCX1LH/ref=asc_df_B071XCX1LH/?tag=hyprod-20&linkCode=df0&hvadid=198064502357&hvpos=&hvnetw=g&hvrand=7258452090221824506&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-350566183361&th=1 (accessed Mar. 03, 2023).

[11] “Amazon.com: INJORA 35KG Servo- High Torque Servo Motors- Watreproof Digital Metal Gear for 1/8 1/10 RC Car Models Crawler Truck Boat (Control Angle 270°) : Toys & Games.” https://www.amazon.com/dp/B0922R8KFK/ref=sspa_dk_detail_1?pd_rd_i=B08N525FDV&pd_rd_w=dCATV&content-id=amzn1.sym.dd2c6db7-6626-466d-bf04-9570e69a7df0&pf_rd_p=dd2c6db7-6626-466d-bf04-9570e69a7df0&pf_rd_r=50AJ6N98ZETK0VN68JBE&pd_rd_wg=bWzXE&pd_rd_r=7e378d88-d041-4724-a8b0-b8222d029c46&s=toys-and-games&sp_csd=d2lkZ2V0TmFtZT1zcF9kZXRhaWxfdGhlbWF0aWM&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFFS0pSVUNHWFNQSFMmZW5jcnlwdGVkSWQ9QTA0MzAyMzcyNkg5OE9JT1RDN0pBJmVuY3J5cHRlZEFkSWQ9QTA2MTI0MjUxUjREVFZEQjhNMDNRJndpZGdldE5hbWU9c3BfZGV0YWlsX3RoZW1hdGljJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ&th=1 (accessed Mar. 03, 2023).

[12] “Amazon.com: STEPPERONLINE Stepper Motor Nema 17 Bipolar 40mm 64oz.in(45Ncm) 2A 4 Lead 3D Printer Hobby CNC : Industrial & Scientific.” https://www.amazon.com/Stepper-Motor-Bipolar-64oz-Printer/dp/B00PNEQI7W/ref=asc_df_B00PNEQI7W/?tag=hyprod-20&linkCode=df0&hvadid=309777532761&hvpos=&hvnetw=g&hvrand=2239778761973898031&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-458488325758&psc=1&tag=&ref=&adgrpid=63226431993&hvpone=&hvptwo=&hvadid=309777532761&hvpos=&hvnetw=g&hvrand=2239778761973898031&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-458488325758 (accessed Mar. 03, 2023).

[13] “Teyleten Robot ESP32S ESP32 ESP-WROOM-32 Development Board 2.4GHz Dual-Core WiFi +Bluetooth 2 Function Microcontroller for Arduino (ESP32 30P, 3PCS).” https://www.amazon.com/Teyleten-Robot-ESP-WROOM-32-Development-Microcontroller/dp/B08246MCL5/ref=sr_1_3?keywords=ESP32&qid=1677524171&sr=8-3&th=1 (accessed Mar. 03, 2023).

[14] “Arduino UNO REV3 [A000066].” https://www.amazon.com/Arduino-A000066-ARDUINO-UNO-R3/dp/B008GRTSV6/ref=asc_df_B008GRTSV6/?tag=&linkCode=df0&hvadid=309751315916&hvpos=&hvnetw=g&hvrand=12297800837462680057&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-457497319401&ref=&adgrpid=67183599252&th=1 (accessed Mar. 03, 2023).

[15] “Amazon.com: Arduino Mega 2560 REV3 [A000067] : Electronics.” https://www.amazon.com/ARDUINO-MEGA-2560-REV3-A000067/dp/B0046AMGW0/ref=asc_df_B0046AMGW0/?tag=hyprod-20&linkCode=df0&hvadid=309743296044&hvpos=&hvnetw=g&hvrand=14550404298577464135&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-516265455074&psc=1 (accessed Mar. 03, 2023).

[16] “Raspberry Pi 4 Model B 2019 Quad Core 64 Bit WiFi Bluetooth (1GB).” https://www.amazon.com/Raspberry-Model-2019-Quad-Bluetooth/dp/B07TD43PDZ/ref=asc_df_B07TD43PDZ/?tag=hyprod-20&linkCode=df0&hvadid=380013417597&hvpos=&hvnetw=g&hvrand=16448157784737347834&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-781430589105&psc=1&tag=&ref=&adgrpid=77922879259&hvpone=&hvptwo=&hvadid=380013417597&hvpos=&hvnetw=g&hvrand=16448157784737347834&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9016722&hvtargid=pla-781430589105 (accessed Mar. 03, 2023).

[17] “150 Pieces Balsa Wood Sticks Hardwood Square Wooden Craft Dowel Rods Unfinished Balsa Wood Sheets 12 Inch Thin Wood Strips 1/4 Inch 1/8 Inch for Crafts DIY Projects Models Making Supplies.” https://www.amazon.com/Balsa-Wood-Sticks-Hardwood-Unfinished/dp/B09TK5L4X6/ref=sr_1_5?keywords=balsa+wood&qid=1677524024&sr=8-5 (accessed Mar. 03, 2023).

[18] “Amazon.com: 100Pcs Jumbo Wooden Craft Sticks Wooden Popsicle Craft Sticks Stick 6” Long x 3/4”Wide Treat Sticks Ice Pop Sticks for DIY Crafts,Home Art Projects, Classroom Art Supplies : Arts, Crafts & Sewing.” https://www.amazon.com/Popsicle-Crafts%EF%BC%8CHome-Projects-Classroom-Supplies/dp/B092CMPBPW/ref=pd_lpo_1?pd_rd_w=Wmae4&content-id=amzn1.sym.116f529c-aa4d-4763-b2b6-4d614ec7dc00&pf_rd_p=116f529c-aa4d-4763-b2b6-4d614ec7dc00&pf_rd_r=AE62QHC0CPG1REB4RY5D&pd_rd_wg=6KDQM&pd_rd_r=647da863-05d2-45b5-ac2b-a7b41a83429f&pd_rd_i=B092CMPBPW&psc=1 (accessed Mar. 03, 2023).

[19] “Amazon.com : 36 Corrugated Cardboard Sheets 12 x 12 Inches Brown Kraft Large Craft Paper Squares Thick Flat Card Board Inserts for Packing Shipping Crafts Mailing Dividers Packaging by Gift Boutique : Arts, Crafts & Sewing.” https://www.amazon.com/Corrugated-Cardboard-Packaging-Gift-Boutique/dp/B08JQQ8TRJ/ref=sr_1_2_sspa?keywords=cardboard&qid=1677524095&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyUzYxRFMxSkNJNVFOJmVuY3J5cHRlZElkPUEwNjU0NDE1MVc3QUI4REtLVlRVRSZlbmNyeXB0ZWRBZElkPUEwODc0OTY5MTFLMzhaWFZDMFA5MCZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU= (accessed Mar. 03, 2023).

[20] “ESP32-cam ai-thinker Pinout Guide: Gpios usage explained,” Random Nerd Tutorials, 04-Aug-2020. [Online]. Available: https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/. [Accessed: 03-May-2023]. 

[21] “Amazon.com: [2-pack] MG996R 55g metal gear torque digital servo motor ...,” Amazon. [Online]. Available: https://www.amazon.com/2-Pack-MG996R-Torque-Digital-Helicopter/dp/B09JWK494C. [Accessed: 03-May-2023]. 

[22] “Amazon.com: GOOLRC Digital Servo 80kg metal gear high torque waterproof ...,” Amazon. [Online]. Available: https://www.amazon.com/GoolRC-Digital-Torque-Waterproof-Crawler/dp/B0B58X21XY. [Accessed: 03-May-2023]. 

[23] “Lumenier 1000mah 3s 35c lipo battery (XT60),” www.getfpv.com. [Online]. Available: https://www.getfpv.com/lumenier-1000mah-3s-35c-lipo-battery-xt60.html?utm_source=google&utm_medium=cpc&utm_campaign=DM%2B-%2BB%2B-%2BPMax%2B-%2BShop%2B-%2BSM%2B-%2BALL&utm_content=pmax_x&utm_keyword=&utm_matchtype=&campaign_id=17881616054&network=x&device=c&gclid=CjwKCAjw_YShBhAiEiwAMomsEHEiqZ3WS4gyx_AaBplpE_1QeV36Rkf7X4YvIm9Wmxb3o6XnQarSeRoC3GwQAvD_BwE. [Accessed: 03-May-2023].