diff --git a/Code/Barometer_Code/Barometer Readings 01.xlsx b/Code/Barometer_Code/Barometer Readings 01.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ac349e9970fe008da8de06d565080d87d2dd9ee7 Binary files /dev/null and b/Code/Barometer_Code/Barometer Readings 01.xlsx differ diff --git a/Code/Barometer_Code/Barometer_Code/Barometer_Code.ino b/Code/Barometer_Code/Barometer_Code/Barometer_Code.ino new file mode 100644 index 0000000000000000000000000000000000000000..8a42d2773ec6d7fd4d46e903224e17e67ae1969b --- /dev/null +++ b/Code/Barometer_Code/Barometer_Code/Barometer_Code.ino @@ -0,0 +1,33 @@ +// Install Adafruit MPL3115A2 Library +#include <Adafruit_MPL3115A2.h> + +Adafruit_MPL3115A2 baro; + +void setup() { + Serial.begin(115200); + while(!Serial); + Serial.println("Adafruit_MPL3115A2 test!"); + + if (!baro.begin()) { + Serial.println("Could not find sensor. Check wiring."); + while(1); + } + + // use to set sea level pressure for current location + // this is needed for accurate altitude measurement + // STD SLP = 1013.26 hPa + baro.setSeaPressure(1016); +} + +void loop() { + float pressure = baro.getPressure(); + float altitude = baro.getAltitude(); + float temperature = baro.getTemperature(); + + Serial.println("-----------------"); + Serial.print("pressure = "); Serial.print(pressure); Serial.println(" hPa"); + Serial.print("altitude = "); Serial.print(altitude); Serial.println(" m"); + Serial.print("temperature = "); Serial.print(temperature); Serial.println(" C"); + + delay(100); +} diff --git a/Code/OpenMV Code/Test_code/new_main.py b/Code/OpenMV Code/Test_code/new_main.py index 034ee9bf6c16c7e5679b4fdb532218543a20d083..4f2313a2b7376e511ce510925e2812dcd9f66854 100644 --- a/Code/OpenMV Code/Test_code/new_main.py +++ b/Code/OpenMV Code/Test_code/new_main.py @@ -25,182 +25,182 @@ f_y = (2.8 / 2.738) * YRES c_x = XRES * 0.5 c_y = YRES * 0.5 def draw_detections(img, dects): - for d in dects: - c = d.corners() - l = len(c) - for i in range(l): img.draw_line(c[(i+0)%l] + c[(i+1)%l], color = (0, 255, 0)) - img.draw_rectangle(d.rect(), color = (255, 0, 0)) + for d in dects: + c = d.corners() + l = len(c) + for i in range(l): img.draw_line(c[(i+0)%l] + c[(i+1)%l], color = (0, 255, 0)) + img.draw_rectangle(d.rect(), color = (255, 0, 0)) def face_detection(data): - sensor.set_pixformat(sensor.GRAYSCALE) - sensor.set_framesize(sensor.QVGA) - faces = sensor.snapshot().gamma_corr(contrast=1.5).find_features(image.HaarCascade("frontalface")) - if not faces: return struct.pack("<HHHH", 0, 0, 0, 0) - for f in faces: sensor.get_fb().draw_rectangle(f, color = (255, 255, 255)) - out_face = max(faces, key = lambda f: f[2] * f[3]) - return struct.pack("<HHHH", out_face[0], out_face[1], out_face[2], out_face[3]) + sensor.set_pixformat(sensor.GRAYSCALE) + sensor.set_framesize(sensor.QVGA) + faces = sensor.snapshot().gamma_corr(contrast=1.5).find_features(image.HaarCascade("frontalface")) + if not faces: return struct.pack("<HHHH", 0, 0, 0, 0) + for f in faces: sensor.get_fb().draw_rectangle(f, color = (255, 255, 255)) + out_face = max(faces, key = lambda f: f[2] * f[3]) + return struct.pack("<HHHH", out_face[0], out_face[1], out_face[2], out_face[3]) def find_position(box): - x = box[0] - y = box[1] - w = box[2] - h = box[3] - cx = x + w/2 - cy = y + h/2 - frame_cx = sensor.width()/2 - frame_cy = sensor.height()/2 - if cx < frame_cx: - if cy < frame_cy: - pos = "UL" - else: - pos = "LL" - else: - if cy < frame_cy: - pos = "UR" - else: - pos = "LR" - x_diff = cx - frame_cx - y_diff = cy - frame_cy - area = w*h - return pos + x = box[0] + y = box[1] + w = box[2] + h = box[3] + cx = x + w/2 + cy = y + h/2 + frame_cx = sensor.width()/2 + frame_cy = sensor.height()/2 + if cx < frame_cx: + if cy < frame_cy: + pos = "UL" + else: + pos = "LL" + else: + if cy < frame_cy: + pos = "UR" + else: + pos = "LR" + x_diff = cx - frame_cx + y_diff = cy - frame_cy + area = w*h + return pos def find_dist(box, w_actual, l_actual): - w_dist = w_actual*2.8/box[2] - l_dist = l_actual*2.8/box[3] - dist = (w_dist+l_dist)/2 - return dist*100 + w_dist = w_actual*2.8/box[2] + l_dist = l_actual*2.8/box[3] + dist = (w_dist+l_dist)/2 + return dist*100 ignore_blue = (0, 0, sensor.width(), sensor.height()) def color_detection(thresholds): - sensor.set_pixformat(sensor.RGB565) - sensor.set_framesize(sensor.QVGA) - sensor.set_auto_gain(False) - sensor.set_auto_whitebal(False) - thresholdss = struct.unpack("<bbbbbb", thresholds) - img = sensor.snapshot() - blobs = [0,0,0,0,0,0,0,0,0,0,0,0] - n_blobs = 0 - for blob in img.find_blobs([thresholdss], pixels_threshold=200, area_threshold=200, merge=True): - img.draw_edges(blob.min_corners(), color=(0,0,255)) - item = blob.rect() - area = item[2] * item[3] - if n_blobs < MAX_BLOBS: - blobs[0 + (n_blobs*3): 2 + (n_blobs*3)] = [int(blob.cx()), int(blob.cy()), int(area)] - n_blobs += 1 - print(blobs) - return struct.pack("<hhhhhhhhh", blobs[0], blobs[1], blobs[2], blobs[3], blobs[4], blobs[5], blobs[6], - blobs[7], blobs[8]) + sensor.set_pixformat(sensor.RGB565) + sensor.set_framesize(sensor.QVGA) + sensor.set_auto_gain(False) + sensor.set_auto_whitebal(False) + thresholdss = struct.unpack("<bbbbbb", thresholds) + img = sensor.snapshot() + blobs = [0,0,0,0,0,0,0,0,0,0,0,0] + n_blobs = 0 + for blob in img.find_blobs([thresholdss], pixels_threshold=200, area_threshold=200, merge=True): + img.draw_edges(blob.min_corners(), color=(0,0,255)) + item = blob.rect() + area = item[2] * item[3] + if n_blobs < MAX_BLOBS: + blobs[0 + (n_blobs*3): 2 + (n_blobs*3)] = [int(blob.cx()), int(blob.cy()), int(area)] + n_blobs += 1 + print(blobs) + return struct.pack("<hhhhhhhhh", blobs[0], blobs[1], blobs[2], blobs[3], blobs[4], blobs[5], blobs[6], + blobs[7], blobs[8]) def color_detection_single(data): - red_led.off() - green_led.on() - sensor.set_pixformat(sensor.RGB565) - sensor.set_framesize(sensor.QVGA) - thresholds = struct.unpack("<bbbbbb", data) - print(thresholds) - blobs = sensor.snapshot().find_blobs([thresholds], - pixels_threshold=500, - area_threshold=500, - merge=True, - margin=20) - if not blobs: return struct.pack("<HH", 0, 0) - for b in blobs: - sensor.get_fb().draw_rectangle(b.rect(), color = (255, 0, 0)) - sensor.get_fb().draw_cross(b.cx(), b.cy(), color = (0, 255, 0)) - out_blob = max(blobs, key = lambda b: b.density()) - red_led.on() - green_led.off() - return struct.pack("<HH", out_blob.cx() , out_blob.cy()) + red_led.off() + green_led.on() + sensor.set_pixformat(sensor.RGB565) + sensor.set_framesize(sensor.QVGA) + thresholds = struct.unpack("<bbbbbb", data) + print(thresholds) + blobs = sensor.snapshot().find_blobs([thresholds], + pixels_threshold=500, + area_threshold=500, + merge=True, + margin=20) + if not blobs: return struct.pack("<HH", 0, 0) + for b in blobs: + sensor.get_fb().draw_rectangle(b.rect(), color = (255, 0, 0)) + sensor.get_fb().draw_cross(b.cx(), b.cy(), color = (0, 255, 0)) + out_blob = max(blobs, key = lambda b: b.density()) + red_led.on() + green_led.off() + return struct.pack("<HH", out_blob.cx() , out_blob.cy()) def recalibration(): - img = sensor.snapshot() - for blob in img.find_blobs(thresholds[2], invert=True, pixels_threshold=200, area_threshold=200, merge=True): - img.draw_edges(blob.min_corners(), color=(0,0,255)) - ignore_blue = (blob.x(), blob.y(), blob.w(), blob.h()) + img = sensor.snapshot() + for blob in img.find_blobs(thresholds[2], invert=True, pixels_threshold=200, area_threshold=200, merge=True): + img.draw_edges(blob.min_corners(), color=(0,0,255)) + ignore_blue = (blob.x(), blob.y(), blob.w(), blob.h()) def change_tag_size(size): - TAG_SIZE = size + TAG_SIZE = size def degrees(radians): - return (180 * radians) / math.pi + return (180 * radians) / math.pi def dist_conversion(z): - z = z*100*2 - scale = TAG_SIZE/138 - res_scale = (240/X_RES + 240/Y_RES)/2 - return z*scale*res_scale + z = z*100*2 + scale = TAG_SIZE/138 + res_scale = (240/X_RES + 240/Y_RES)/2 + return z*scale*res_scale def xy_to_mm(tag1_cx, tag1_cy, tag2_cx, tag2_cy, tag3_cx, tag3_cy): - mm_distx = 590 - mm_disty = 1 - pixel_distx = tag1_cx - tag2_cx - pixel_disty = tag1_cy - tag2_cy - target_distx = tag1_cx - tag3_cx - target_disty = tag1_cy - tag3_cy - distx = target_distx*mm_distx/pixel_distx/2.8 - disty = target_disty*mm_disty/pixel_disty/2.8 - return (distx, disty) + mm_distx = 590 + mm_disty = 1 + pixel_distx = tag1_cx - tag2_cx + pixel_disty = tag1_cy - tag2_cy + target_distx = tag1_cx - tag3_cx + target_disty = tag1_cy - tag3_cy + distx = target_distx*mm_distx/pixel_distx/2.8 + disty = target_disty*mm_disty/pixel_disty/2.8 + return (distx, disty) def apriltags(data): - red_led.off() - green_led.on() - sensor.set_pixformat(sensor.RGB565) - sensor.set_framesize(sensor.QQVGA) - sensor.set_auto_gain(False) - sensor.set_auto_whitebal(False) - LENS_MM = 2.8 - LENS_TO_CAM_MM = 22 - datas = struct.unpack("<bb", data) - id1 = datas[0] - tagsize1 = 138 - if id1 == 0: - tagsize1 = 138 - img = sensor.snapshot() - f_x = (LENS_MM / 3.984) * X_RES - f_y = (LENS_MM / 2.952) * Y_RES - c_x = X_RES * 0.5 - c_y = Y_RES * 0.5 - tags = [0, 0, 0] - for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): - img.draw_rectangle(tag.rect(), color = (255, 0, 0)) - img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) - dist = dist_conversion(tag.z_translation()) - img.draw_string(tag.cx(), tag.cy(), str(dist)) - if tag.id() == id1: - print(tag.id()) - TAG_SIZE = tagsize1 - tags[0:2] = [int(tag.cx()), int(tag.cy()), int(degrees(tag.z_rotation()))] - red_led.on() - green_led.off() - return struct.pack("<hhh", tags[0], tags[1], tags[2]) + red_led.off() + green_led.on() + sensor.set_pixformat(sensor.RGB565) + sensor.set_framesize(sensor.QQVGA) + sensor.set_auto_gain(False) + sensor.set_auto_whitebal(False) + LENS_MM = 2.8 + LENS_TO_CAM_MM = 22 + datas = struct.unpack("<bb", data) + id1 = datas[0] + tagsize1 = 138 + if id1 == 0: + tagsize1 = 138 + img = sensor.snapshot() + f_x = (LENS_MM / 3.984) * X_RES + f_y = (LENS_MM / 2.952) * Y_RES + c_x = X_RES * 0.5 + c_y = Y_RES * 0.5 + tags = [0, 0, 0] + for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): + img.draw_rectangle(tag.rect(), color = (255, 0, 0)) + img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) + dist = dist_conversion(tag.z_translation()) + img.draw_string(tag.cx(), tag.cy(), str(dist)) + if tag.id() == id1: + print(tag.id()) + TAG_SIZE = tagsize1 + tags[0:2] = [int(tag.cx()), int(tag.cy()), int(degrees(tag.z_rotation()))] + red_led.on() + green_led.off() + return struct.pack("<hhh", tags[0], tags[1], tags[2]) def qrcode_detection(data): - sensor.set_pixformat(sensor.RGB565) - sensor.set_framesize(sensor.VGA) - sensor.set_windowing((320, 240)) - codes = sensor.snapshot().find_qrcodes() - if not codes: return bytes() - draw_detections(sensor.get_fb(), codes) - return str(codes).encode() + sensor.set_pixformat(sensor.RGB565) + sensor.set_framesize(sensor.VGA) + sensor.set_windowing((320, 240)) + codes = sensor.snapshot().find_qrcodes() + if not codes: return bytes() + draw_detections(sensor.get_fb(), codes) + return str(codes).encode() def ATDistance(val,size): - new_val = -10*val*size/16.3 - return new_val + new_val = -10*val*size/16.3 + return new_val def goalfinder(data): - green_led.on() - sensor.set_pixformat(sensor.RGB565) - sensor.set_framesize(sensor.QVGA) - sensor.set_auto_gain(False) - sensor.set_auto_whitebal(False) - goal_id = struct.unpack("<bbb", data) - nearest_tag = [0,0,0,10000,0,0,0] - img = sensor.snapshot() - for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): - img.draw_rectangle(tag.rect(), color = (255, 0, 0)) - img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) - for i in goal_id: - if tag.id() == i and ATDistance(tag.z_translation(),SIZE) < nearest_tag[3]: - nearest_tag[0] = int(tag.id()) - nearest_tag[1] = int(tag.cx()) - nearest_tag[2] = int(tag.cy()) - nearest_tag[3] = int(ATDistance(tag.z_translation(),SIZE)) - nearest_tag[4] = int(tag.x_rotation()) - nearest_tag[5] = int(tag.y_rotation()) - nearest_tag[6] = int(tag.z_rotation()) - red_led.on() - green_led.off() - return struct.pack("<hhhhhhh", nearest_tag[0],nearest_tag[1],nearest_tag[2],nearest_tag[3],nearest_tag[4],nearest_tag[5],nearest_tag[6]) + green_led.on() + sensor.set_pixformat(sensor.RGB565) + sensor.set_framesize(sensor.QVGA) + sensor.set_auto_gain(False) + sensor.set_auto_whitebal(False) + goal_id = struct.unpack("<bbb", data) + nearest_tag = [0,0,0,10000,0,0,0] + img = sensor.snapshot() + for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): + img.draw_rectangle(tag.rect(), color = (255, 0, 0)) + img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) + for i in goal_id: + if tag.id() == i and ATDistance(tag.z_translation(),SIZE) < nearest_tag[3]: + nearest_tag[0] = int(tag.id()) + nearest_tag[1] = int(tag.cx()) + nearest_tag[2] = int(tag.cy()) + nearest_tag[3] = int(ATDistance(tag.z_translation(),SIZE)) + nearest_tag[4] = int(tag.x_rotation()) + nearest_tag[5] = int(tag.y_rotation()) + nearest_tag[6] = int(tag.z_rotation()) + red_led.on() + green_led.off() + return struct.pack("<hhhhhhh", nearest_tag[0],nearest_tag[1],nearest_tag[2],nearest_tag[3],nearest_tag[4],nearest_tag[5],nearest_tag[6]) interface.register_callback(face_detection) interface.register_callback(color_detection) interface.register_callback(apriltags) interface.register_callback(color_detection_single) interface.register_callback(recalibration) interface.register_callback(goalfinder) -interface.loop() \ No newline at end of file +interface.loop()