from gpiozero import DigitalInputDevice rain_sensor = DigitalInputDevice(6) BUCKET_SIZE = 0.2794 count = 0 def bucket_tipped(): global count count = count + 1 print (count * BUCKET_SIZE) rain_sensor.when_activated = bucket_tipped
from gpiozero import DigitalInputDevice from time import sleep import math # Connect windspeed on one side to GND and another to GPIO pin # No resistor needed... Detection on LOW/FALSE pinReadSpeed = 26 # GPIO Pin for input count = 0 # Rotation Counter radius_cm = 9.0 # Radius of the anemometer interval = 1.0 # Duration to report on speed ADJUSTMENT = 2 # Adjustment for weight of cups CM_IN_A_KM = 100000.0 SECS_IN_AN_HOUR = 3600 wind_speed_sensor = DigitalInputDevice(pinReadSpeed,pull_up=True) def calculate_speed(time_sec): global count circumference_cm = (2 * math.pi) * radius_cm rotations = count / 2.0 dist_km = (circumference_cm * rotations) / CM_IN_A_KM km_per_sec = dist_km / time_sec km_per_hour = km_per_sec * SECS_IN_AN_HOUR return km_per_hour * ADJUSTMENT def spin(): global count count = count + 1
def main(): pi = np.math.pi i = 0 rightIRSensor = DigitalInputDevice(12) leftIRSensor = DigitalInputDevice(16) # IR_tracer 8 L # 7 R rightIRTracerSensor = DigitalInputDevice(7) leftIRTracerSensor = DigitalInputDevice(8) # DisatanceSensor pin 21 T # 20 E distanceSensor = DistanceSensor(21, 20) # Motors motor_left = Motor(18, 23) motor_right = Motor(24, 25) forwardpin = False def getDistance(): return distanceSensor.distance def forward(left=1.0, right=1.0): motor_left.forward(left) motor_right.forward(right) def back(left=1.0, right=1.0): motor_left.backward(left) motor_right.backward(right) def turnRight(x=1.0, y=1.0): motor_left.forward(x) motor_right.backward(y) def turnLeft(back=1.0, forward=1.0): motor_left.backward(back) motor_right.forward(forward) def stop(): motor_left.stop() motor_right.stop() def lIRsensor(): return rightIRSensor.value def rIRsensor(): return leftIRSensor.value def rIRTracerSensor(): return rightIRTracerSensor.value def lIRTracerSensor(): return leftIRTracerSensor.value def saveframe(name, frame): cv2.imwrite(str(name) + '/png', frame) def halfRightTurn(): turnRight(1, 0.5) time.sleep(0.6) stop() def hougeline(frame, i=0): kernel = np.ones((3, 3), np.uint8) localfram = frame # frame = cv2.dilate(frame, kernel,iterations=3) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) # blur = cv.GaussianBlur(frame, (5, 5), 0) blur = cv2.medianBlur(frame, 5) canny = cv2.Canny(blur, 150, 150, apertureSize=3) cv2.imshow('canny', canny) lines = cv2.HoughLines(canny, 1, pi / 180, 50) # srn=80, stn=200) if lines is not None: print("Len of lines:", len(lines)) if lines is not None: # sumtheta = 0 sumx1 = 0 sumx2 = 0 sumy1 = 0 sumy2 = 0 counter = len(lines) for line in lines: # print(line) rho, theta = line[0] # print(theta/pi*180) if line is not None: a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho scalar = 1000 x1 = int(x0 + scalar * (-b)) y1 = int(y0 + scalar * (a)) x2 = int(x0 - scalar * (-b)) y2 = int(y0 - scalar * (a)) if abs(y2 - y1) < scalar / 10: counter -= 1 continue if abs(x2 - x1) < scalar / 20: counter -= 1 continue sumy1 += y1 sumx1 += x1 sumx2 += x2 sumy2 += y2 cv2.line(localfram, (x1, y1), (x2, y2), (0, 0, 255), 2, 4) try: dely = (sumy2 - sumy1) / counter delx = (sumx2 - sumx1) / counter cv2.line(localfram, (int(sumx1 / counter), int(sumy1 / counter)), (int(sumx2 / counter), int(sumy2 / counter)), (0, 255, 0), 2, 4) print('dely=', dely) print('delx=', delx) font = cv2.FONT_HERSHEY_PLAIN cv2.putText(localfram, str(dely), (0, 50), font, 4, (255, 0, 0), 4) cv2.putText(localfram, str(delx), (0, 100), font, 4, (255, 255, 0), 4) angel = (np.math.asin(dely / delx) / (pi / 2) * 180) cv2.putText(localfram, str(angel), (0, 150), font, 4, (0, 255, 255), 4) i += 1 """WRITE TO FILE""" # cv2.imwrite((str(i) + '.png'), localfram) print(str(i) + '.png') except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except: print("Unexpected error:", sys.exc_info()[0]) # time.sleep(0.1) cv2.imshow('output', localfram) return localfram, i def hougelinep(frame, i=0): kernel = np.ones((3, 3), np.uint8) localfram = frame # frame = cv2.dilate(frame, kernel,iterations=3) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) # blur = cv.GaussianBlur(frame, (5, 5), 0) canny = cv2.Canny(frame, 200, 150, apertureSize=3) cv2.imshow('canny', canny) lines = cv2.HoughLinesP(canny, 1, pi / 180, 10, minLineLength=5, maxLineGap=5) # srn=80, stn=200) if lines is not None: print("Len of lines:", len(lines)) if lines is not None: sumx1 = 0 sumx2 = 0 sumy1 = 0 sumy2 = 0 counter = len(lines) for line in lines: if line is not None: x1, y1, x2, y2 = line[0] sumy1 += y1 sumx1 += x1 sumx2 += x2 sumy2 += y2 cv2.line(localfram, (x1, y1), (x2, y2), (0, 0, 255), 2, 4) try: cv2.line(localfram, (int(sumx1 / counter), int(sumy1 / counter)), (int(sumx2 / counter), int(sumy2 / counter)), (0, 255, 0), 2, 4) i += 1 except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except: print("Unexpected error:", sys.exc_info()[0]) # print('delx=', delx) # print(sumtheta / counter) # time.sleep(0.5) # pprint.pprint(lines) # time.sleep(1) time.sleep(0.1) cv2.imshow('output', localfram) return localfram, i # The video feed is read in as a VideoCapture object # cap = cv2.VideoCapture("outcpp.avi") red_val = 0 green_val = 65 stream = io.BytesIO() my_file = open('my_image.jpg', 'wb') cap = cv2.VideoCapture(0) with picamera.PiCamera() as camera: camera.resolution = (1920, 1080) camera.framerate = 32 camera.start_preview() time.sleep(2) # camera.capture(my_file) camera.capture(stream, format='jpeg') # define range of RED color in HSV halfRightTurn() while (True): # Capture frame-by-frame data = np.fromstring(stream.getvalue(), dtype=np.uint8) ret, frame = cap.read(data) try: frame2 = frame frame = cv2.resize(frame, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC) width, height = frame.shape[:2] frame = frame[int(width / 2):width, 0:height] except: continue hougelinefram, i = hougeline(frame, i) cv2.imshow('original', frame2) if cv2.waitKey(10) & 0xFF == ord('q'): cv2.waitKey(0) if cv2.waitKey(10) & 0xFF == ord('w'): print('w') cv2.waitKey(1) cv2.destroyAllWindows() cap.release()
if not PUMP_CALIBRATION: # get the session information (timeout, ratio, nexratio, etc...) from 'session_configuration.csv' file under python directory sessioninfo = get_sessioninfo(RatID) while (len(sessioninfo) == 0): RatID = input("command ID not found please rescan the id: ")[-8:] sessioninfo = get_sessioninfo(RatID) sessioninfo = sessioninfo[0] mover = PumpMove() forwardbtn = Button("GPIO5") backwardbtn = Button("GPIO27") BACKWARD_LIMIT_BTN = "GPIO23" BACKWARD_LIMIT = DigitalInputDevice(BACKWARD_LIMIT_BTN) def forward(): while forwardbtn.value == 1: mover.move("forward") def backward(): while BACKWARD_LIMIT.value != 1: mover.move("backward") forwardbtn.when_pressed = forward backwardbtn.when_pressed = backward #push syringe to wet spout mover.move("forward") mover.move("forward")
if __name__ == "__main__": # Tunables fps = 10 # Video Reader Initial Setup cap = cv2.VideoCapture(0) # Create video capture object with 0th camera frame_size = (int(cap.get(3)), int(cap.get(4))) # Video Writer Initial Setup fourcc = cv2.VideoWriter_fourcc( *'MJPG') # Create VideoWriter format object with smallest file size # PIR Setup PIRPinNum = 26 PIR = DigitalInputDevice(PIRPinNum, pull_up=False) # LED Setup LEDPinNum = 19 LED = OutputDevice(LEDPinNum) INACTIVE_THRESHOLD = 10 * fps # frames inactive_time = 10 * fps # frames rolling = False while (cap.isOpened()): # if there is movement and we're not rolling if PIR.is_active and not rolling: inactive_time = 0 rolling = True
def __init__(self, pin): self._value = 0 self.encoder = DigitalInputDevice(pin) self.encoder.when_activated = self._increment self.encoder.when_deactivated = self._increment
def __init__(self, nursery: trio.Nursery): self._nursery = nursery # type: trio.Nursery self._operation_mode = None self._system_state = None self._sensor_data = { 'temperature': None, 'pressure': None, 'humidity': None, 'slope': None, 'num_satellites': None, 'latitude': None, 'longitude': None, 'altitude': None, 'message': None, 'rssi': None, 'session_state': None, 'session_substate': None, 'battery': None, 'motor_current': None } # Traction system ---------------- self._tractor = TractionSystem( # type: TractionSystem forward_r=MOTOR_R_FORWARD_PIN, backward_r=MOTOR_R_BACKWARD_PIN, enable_r=MOTOR_R_ENABLE_PIN, forward_l=MOTOR_L_FORWARD_PIN, backward_l=MOTOR_L_BACKWARD_PIN, enable_l=MOTOR_L_ENABLE_PIN, enable_global=DRIVER_ENABLE_PIN) # ADC ----------------------------- alert_ready = DigitalInputDevice(ALERT_READY_PIN, pull_up=True) bus = smbus.SMBus(DEVICE_BUS) self._adc = ADS1015(bus, DEVICE_ADDRESS, alert_ready, channel=RADIO_CHANNEL) # type: ADS1015 # Radio System ------------------- self._radio_system = RadioDetection( self._adc, self._nursery, notification_callbacks=[self.radio_listener]) self._radio_system.subscribe(notification_callbacks=[radio_printer ]) # DEBUG ONLY # SenseHat ------------------------ self._sensors = SenseHatWrapper(nursery, data=self._sensor_data) # GPS ----------------------------- # Lat/long/alt data is updated automatically, the satellite list is not used for now self._gps = GPS(GPS_PORT, nursery, data=self._sensor_data) # Transceiver -------------------- self._transceiver = ReceptorSystem( RX_INTERRUPTION_PIN, TX_DEVICE, nursery, notification_callbacks=[self.transceiver_listener], data=self._sensor_data) # Battery & current measurements ----------- self._battery = BatteryMeasure(nursery, self._adc, BATTERY_CHANNEL, data=self._sensor_data) self._battery.subscribe(notification_callbacks=[self.battery_listener]) self._current_meas = CurrentMeasure(nursery, self._adc, CURRENT_CHANNEL, data=self._sensor_data) self._current_meas.subscribe( notification_callbacks=[self.current_listener]) # Server ------------------------- self._server = Server(SERVER_ADDRESS, SERVER_PORT, self._sensor_data, ROVER_ID, nursery, error_callbacks=[self.server_error]) # Command system ----------------- self._commands = CommandSystem( COMMAND_PORT, nursery, notification_callbacks=[self.command_listener]) # --------------- Start in idle mode ------------ self._change_mode(self.MODE_IDLE)