Remake the Infinite Sports Game. More Fun!
287 Views, 3 Favorites, 0 Comments
Remake the Infinite Sports Game. More Fun!
We applied the concept of rethinking, reusing, redesigning, and re-coding to remake it. During the remake process, we rejoiced with each other.
Supplies
Two RC cars 27Mhz and 40 MHz
Reused the UNO with the IO shield
Reused relays
Reused transceiver of the wireless car
Reused foam board (showed as above)
Reused 3D filaments.
Our Theme
Our team wished to have new interesting school activities in the STEAM week and after school, with the theme of "Steam Sports". We had the used UNOs, the used replays, and the used 3D filaments since our fellow schoolmates made the AI 5G water filter system in the instructables before. Here is the website "https://www.instructables.com/5G-AI-Water-Filter-System/". Then we reused and remade the components of the above project to make a new project in the STEAM WEEK "Steam Sports" in Po Leung Kuk Ma Kam Ming College. Students did the exercises and had more fun in the STEAM WEEK. In addition, we learned how to use Tinkercad to make the box holding the circuit, the racing track, the traffic safety cones, the grandstand, the lamp post, the Start Point and the racing car. We enjoyed playing the rc car racing and doing the exercise with an innovative idea. Remake the AI sports!!! Infinite possibilities!!
Reused the Components of the AI 5G Water Filter System
The UNO with the IO shield, relays and DuPont wires could be reused to make the new project, which was used in the project of "https://www.instructables.com/5G-AI-Water-Filter-System/" in the first-time author contest.
Design of the Box Holding the Circuit
The box holding the circuit was designed by using Tinkercad. The three holes in the box, allowed the wires to pass through. Two holes were for the UNO and the other for the transceiver of the remote control of the mini car.
Product of the Box
The box was made of old foam boards. Three holes:
- One for the charging wire of the mini-car
- One for the USB cable of UNO
- One for the power cable of UNO
Re-Design the Radio Control Circuit
Reused the UNO with the IO shield, the relay and the transceiver of the wireless car. We remade the transceiver by connecting the wires from UNO. Four control buttons in the remote of the wireless RC car were connected to four relays which could be controlled by UNO that the wireless cars could move forward, move backward, turn left and turn right. The soldering process were done.
Re-Soldering the Circuit
Remade the circuit in the RC car. The RC transceiver was connected with four digital relays. So, the UNO could control the RC car by writing python programs or block programs. Two cars (27Mhz and 40 MHz) and two RC transceivers (27Mhz and 40 MHz) were remade since two players could play together.
Testing the Redesigned Radio Communication Circuit!
The UNO pin 9, pin 10, pin 11 and pin 12 controlled the wireless car to move forward, move backward, turn left and turn right. The video showed that the wireless RC car moved forward and turned left, and moved backward and turned right. We controlled the wireless RC car to move more precisely, which was one of the improvements, by programming.
Re-Code the Python Program
We learnt how to write Python with google mediapipe library. Rewrote the python program, which was inspired by learning the website of Aryan Vij . We rewrote the python code by adding the initialisation of UNO and adding the control code of D9 and D11 to call the wireless car turning left and moving forward. The bold and italics codes was added and modified. Remade it again to meet our requirements. Push-up could drive the car to turn left and to move forward. Mediapipe and AI programs were applied to this system, which was the improvement of the single purpose of playing the RC car or the single purpose of doing push-ups.
The python program was below:
import cv2
import mediapipe as mp
import numpy as np
import PoseModule as pm
#from pinpong.board import Board
#from pinpong.board import Servo
import time
from pinpong.board import Board,Pin,Servo # Import Servo library
Board("uno").begin() # Initialization
pin1 = Pin(Pin.D9, Pin.OUT)
pin1.write_digital(0)
pin3 = Pin(Pin.D11, Pin.OUT)
pin3.write_digital(0)
.....
cap = cv2.VideoCapture(0)
detector = pm.poseDetector()
count = 0
direction = 0
form = 0
feedback = "Fix Form"
staight_angle = 140 # 160 is the best. hip angle is less than 160 will be easier.
right_angle = 90
shoulder_angle= 40
while cap.isOpened():
ret, img = cap.read() #640 x 480
#Determine dimensions of video - Help with creation of box in Line 43
width = cap.get(3) # float `width`
height = cap.get(4) # float `height`
# print(width, height)
img = detector.findPose(img, False)
lmList = detector.findPosition(img, False)
# print(lmList)
if len(lmList) != 0:
elbow = detector.findAngle(img, 11, 13, 15)
shoulder = detector.findAngle(img, 13, 11, 23)
hip = detector.findAngle(img, 11, 23,25)
#Percentage of success of pushup
per = np.interp(elbow, (right_angle, staight_angle), (0, 100))
#Bar to show Pushup progress
bar = np.interp(elbow, (right_angle, staight_angle), (380, 50))
#Check to ensure right form before starting the program
if elbow > staight_angle and shoulder > shoulder_angle and hip > staight_angle:
form = 1
#Check for full range of motion for the pushup
if form == 1:
if per == 0:
if elbow <= right_angle and hip > staight_angle:
feedback = "Up"
if direction == 0:
count += 0.5
direction = 1
pin1.write_digital(1)
pin3.write_digital(1)
time.sleep(0.5)
pin1.write_digital(0)
pin3.write_digital(0)
time.sleep(0.5)
else:
feedback = "Fix Form"
if per == 100:
if elbow > staight_angle and shoulder > shoulder_angle and hip > staight_angle:
feedback = "Down"
if direction == 1:
count += 0.5
direction = 0
pin1.write_digital(1)
pin3.write_digital(1)
time.sleep(0.5)
pin1.write_digital(0)
pin3.write_digital(0)
time.sleep(0.5)
else:
feedback = "Fix Form"
# form = 0
print(count)
#Draw Bar
if form == 1:
cv2.rectangle(img, (580, 50), (600, 380), (0, 255, 0), 3)
cv2.rectangle(img, (580, int(bar)), (600, 380), (0, 255, 0), cv2.FILLED)
cv2.putText(img, f'{int(per)}%', (565, 430), cv2.FONT_HERSHEY_PLAIN, 2,
(255, 0, 0), 2)
#Pushup counter
cv2.rectangle(img, (0, 380), (100, 480), (0, 255, 0), cv2.FILLED)
cv2.putText(img, str(int(count)), (25, 455), cv2.FONT_HERSHEY_PLAIN, 5,
(255, 0, 0), 5)
#Feedback
cv2.rectangle(img, (500, 0), (640, 40), (255, 255, 255), cv2.FILLED)
cv2.putText(img, feedback, (500, 40 ), cv2.FONT_HERSHEY_PLAIN, 2,
(0, 255, 0), 2)
cv2.imshow('Pushup counter', img)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Re-Code the Python Program Again.
Doing "Bicep curl" to drive the hot fire. Firstly, we did the initialization in the program. We added the pyautogui library into the python program. The bold and italics codes were added and modified. Students not only did "Bicep curls" but also played video games. All these features were the enhancement of the activity.
import pyautogui
cap = cv2.VideoCapture(0)
detector = pm.poseDetector()
lcount = 0
ldirection = 0
lform = 0
lfeedback = "left Fix Form"
rcount = 0
rdirection = 0
rform = 0
rfeedback = "Right Fix Form"
stop = 4 #4d : four hot fire!
Modify the Codes to Detect the Movement of the Left Hands and the Movement of the Right Hands
The bold and italics codes was added and modified. Sending the character "d" to control the scratch game to give the hot fire.
lper = np.interp(lelbow, (160, 30), (0, 100))
#Bar to show Pushup progress
lbar = np.interp(lelbow, (160, 30), (280, 50))
#Percentage of success of pushup
rper = np.interp(relbow, (160, 30), (0, 100))
#Bar to show Pushup progress
rbar = np.interp(relbow, (160, 30), (280, 50))
#Check to ensure right form before starting the program
if lelbow > 160 and lshoulder < 30:
lform = 1
lfeedback = "Correct Left Form"
if relbow > 160 and rshoulder < 30:
rform = 1
rfeedback = "Correct Right Form"
"""else:
form = 0
feedback = "Fix Form"
"""
#Check for full range of motion for the pushup
if lform == 1:
if lper == 0:
if lelbow <30 and lshoulder <30:
lfeedback = "l_down"
if ldirection == 0:
lcount += 0.5
ldirection = 1
else:
lfeedback = "Fix Left Form"
if lper == 100:
if lelbow >160 and lshoulder <30:
lfeedback = "l_Up"
if ldirection == 1:
lcount += 0.5
ldirection = 0
else:
lfeedback = "Fix Left Form"
if rform == 1:
if rper == 0:
if relbow <30 and rshoulder <30:
rfeedback = "r_down"
if rdirection == 0:
rcount += 0.5
rdirection = 1
else:
rfeedback = "Fix Right Form"
if rper == 100:
if relbow >160 and rshoulder <30:
rfeedback = "r_Up"
if rdirection == 1:
rcount += 0.5
rdirection = 0
else:
rfeedback = "Fix Right Form"
# form = 0
print("left: ", lcount)
print("right: ", rcount)
if (((lcount>4) or (rcount>4)) and (not(stop < 1))):
pyautogui.typewrite(['d'], 0.2)
stop = stop - 1
#Left Draw Bar
if lform == 1:
cv2.rectangle(img, (580, 50), (600, 280), (255, 255, 0), 3)
cv2.rectangle(img, (580, int(lbar)), (600, 280), (255, 255, 0), cv2.FILLED)
cv2.putText(img, f'{int(lper)}%', (565, 430), cv2.FONT_HERSHEY_PLAIN, 1,
(255, 255, 0), 1)
#Left Pullup counter
cv2.rectangle(img, (400, 380), (500, 480), (0, 255, 0), cv2.FILLED)
cv2.putText(img, str(int(lcount)), (425, 455), cv2.FONT_HERSHEY_PLAIN, 2,
(255, 0, 0), 5)
#Left Feedback
cv2.rectangle(img, (500, 0), (640, 40), (255, 255, 255), cv2.FILLED)
cv2.putText(img, lfeedback, (500, 40 ), cv2.FONT_HERSHEY_PLAIN, 2,
(0, 255, 0), 2)
#right Draw Bar
if rform == 1:
cv2.rectangle(img, (80, 50), (100, 280), (255, 255, 0), 3)
cv2.rectangle(img, (80, int(rbar)), (100, 280), (255, 255, 0), cv2.FILLED)
cv2.putText(img, f'{int(rper)}%', (10, 430), cv2.FONT_HERSHEY_PLAIN, 1,
(255, 255, 0), 1)
#Right Pullup counter
cv2.rectangle(img, (60, 380), (160, 480), (0, 255, 0), cv2.FILLED)
cv2.putText(img, str(int(rcount)), (85, 455), cv2.FONT_HERSHEY_PLAIN, 2,
(255, 0, 0), 5)
#Right Feedback
cv2.rectangle(img, (0, 0), (140, 40), (255, 255, 255), cv2.FILLED)
cv2.putText(img, rfeedback, (0, 40 ), cv2.FONT_HERSHEY_PLAIN, 2,
(0, 255, 0), 2)
Push-Up = Drive the Car. Amazing!!!
The Video showed that doing push-up could drive the RC car to move.
The boy did the push up.
https://youtu.be/gg_6U7yvDP8
In the STEAM week, more students liked doing the push-ups rather than in the PE lesson.
Bicep-Curl = Hot Fire. Terrific
The video showed that doing bicep curls could drive the street fighter to give the hot fire.
The teacher did the bicep curl.
https://youtube.com/shorts/mPqHURSTFSs?feature=share
The girl did the bicep curl.
https://youtube.com/shorts/WSQzZjlousI?feature=share
In the STEAM week, many students and teachers liked doing bicep curls.
Students Enjoyed to Do the Exercises.
More than a hundred students played the AI sports games and did the exercises.
Race Track Design I
The race track was designed by using Tinkercad.
Race Track Design II
The corners and the roads of the race track were drawn by using different objects in Tinkercad. The junctions of two blocks were also drawn.
Race Track Design III
The ramps were designed so that the car racing game was more fascinating. The mechanical locks were inserted to the ramps so that the The ramp structure was more solid.
Traffic Safety Cones
We used the Tinkercad to design the traffic safety cones and 3D print them.
Remake the Foam Board to Build the Race Track
After the STEAM week, we built the race track by reusing the unused foam boards. The foam boards could be obtained since many decorations were made on the School Information Day. We used toothpicks and glue to assemble the rack track parts. Since the impact of the racing car is large, both toothpicks and glue could provide the solid anti-collision structure. The race track could be decomposed into smaller pieces for storage. In addition, the race track could be transformed. The foam boards were priceless. After the remade process, the value was added to the unused foam boards.
Assembly the Race Track
We divided the race track into different parts and assembled the race track.
The Product of Race Track
We reassembled the race track in a different format. The clips were used to connect all the parts.
3D Print - the Grandstand
We used the Tinkercad to design the grandstand and 3D print it.
3D Print - the Lampstand
We used the Tinkercad to design the lamp post and 3D print it.
3D Print - the Start Point
We used the Tinkercad to design the Start Point and 3D print it.
We Were Playing the RC Car Racing Game
AI Sports - STEAM Week! We Remake It! More Fun! We reused the materials to make new games, push-ups (drive car), bicep curls (drive hot fire), and car racing competitions (the track). The innovative idea was the fusion of playing the games with doing the exercises. So, more students and teachers could have more fun. In addition, we could learn the technologies by doing exercises and playing games.
Improvement of Remake It
The Conclusion
Remake the Infinite Sports Game. More Fun! Infinite possibilities!