Skip to content

Changed the whole system #39

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions py/src/drive.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@


class Drive():

angle = 90

def __init__(self, motors: tuple, dimensions: tuple):
leftMotor, rightMotor = motors
wheelDiameter, axleTrack = dimensions
Expand All @@ -22,11 +25,11 @@ def forward(self, speed):
def backward(self, speed):
self.driveBase.drive(-abs(speed), 0 )

def left(self, speed):
self.driveBase.drive(speed, 90)
def setTurnAngle(self, value: int):
self.angle = value

def right(self, speed):
self.driveBase.turn(90)
def turn(self, direction):
self.driveBase.turn(self.angle * direction)

def stop(self, brakeType):
self.driveBase.drive(0,0)
Expand Down
19 changes: 12 additions & 7 deletions py/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,23 @@
wait(50)


# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.

"""FIN JUSTER DISSE VERDIENE"""
dimensions = ( 47, # Wheel diamter
140 ) #Axle track
145 ) #Axle track

motors = (Motor(port=Port.D), # Left motor for the drive base
Motor(port=Port.C)) # Right motor for the drive base

sensors = (Port.S3, # Lyssensor for å måle fargen på jorda
Port.S1) # Ultrasonisksensor for å sjekke for potensielle hindringer robotten må navigere unna
motors = (Motor(port=Port.C), # Left motor for the drive base
Motor(port=Port.D)) # Right motor for the drive base

bucketPort = Port.B # Port spec for the bucket motor

sensors = (Port.S4, # Lyssensor for å måle fargen på jorda
Port.S3) # Ultrasonisksensor for å sjekke for potensielle hindringer robotten må navigere unna

robotDrive = Drive(motors, dimensions) # Robottens kjørefunksjonalitet
robot = Robot(robotDrive, *sensors) # EV3 robot

robot.initWaterBucketMotor(bucketPort)
robot.setBucketAngle(125)
robot.start()
50 changes: 45 additions & 5 deletions py/src/robot.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,77 @@

from drive import Drive
from sensors import UltraSonic, Colour
from water_bucket import WaterBucket

class Robot():

waterBucket = None
controlDistance = 100
requiredReflection = 7
nextDirection = 1

def __init__(self, drive: Drive, colorPort, ultrsonicPort):
self.hub = EV3Brick()
self.drive = drive
self.color = Colour(colorPort)
self.ultrasonic = UltraSonic(ultrsonicPort)


def initWaterBucketMotor(self, motorPort, rotationDirection=Direction.CLOCKWISE):
self.waterBucket = WaterBucket(motorPort, rotationDirection)

def setControlDistance(self, value: int):
self.controlDistance = value

def setRequiredReflection(self, value: int):
self.requiredReflection

def setBucketSpeed(self, value: int):
self.waterBucket.setSpeed(value)

def setBucketAngle(self, value: int):
self.waterBucket.setTargetAngle(value)


def say(self, string: str):
self.hub.speaker.say(string)

def start(self):
self.speed = 150
self.drive.forward(self.speed)

while True:
wait(50)


print(self.waterBucket.motor.angle())

if self.ultrasonic.distanceLessThan(100):
self.drive.stop(0)
self.hub.speaker.beep()
wait(1000)
self.drive.backward(self.speed)
wait(1000)
self.drive.right(self.speed)
self.drive.turn(self.nextDirection)
wait(1000)
self.drive.forward(self.speed)
wait(1000)
self.drive.right(self.speed)
self.drive.turn(self.nextDirection)
wait(1000)
self.nextDirection *= -1
self.drive.forward(self.speed)




if self.color.reflectionGreaterThan(self.requiredReflection) and not self.waterBucket.checkIfOpen():
if self.waterBucket is not None:
self.waterBucket.releaseWater()
print("Opening...")
else:
self.say("Releasing water")
elif not self.color.reflectionGreaterThan(self.requiredReflection) and self.waterBucket.checkIfOpen():
if self.waterBucket is not None:
print("Closing...")
self.waterBucket.close()



def stop(self):
Expand Down
5 changes: 0 additions & 5 deletions py/src/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,6 @@

from pybricks.nxtdevices import TemperatureSensor

"""
GAMMEL SENSOR FUNKSJONALITET
BEHOLDES FREM TIL NY FUNKSJONALITET ER IMPLEMENTERT
"""


"""
NY SENSOR FUNKSJONALITET
Expand Down
31 changes: 29 additions & 2 deletions py/src/water_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,32 @@


class WaterBucket:
def __init__(self):
pass

speed = 100
angle = 45

def __init__(self, motorPort, rotationDirection):
self.motor = Motor(port=motorPort, positive_direction=rotationDirection)
self.isOpen = False

def releaseWater(self):
if not self.isOpen:
self.motor.run_angle(self.speed, self.angle)
self.isOpen = True

def close(self):
if self.isOpen:
self.motor.run_angle(self.speed, -self.getAngle())
self.isOpen = False

def setSpeed(self, value: int):
self.speed = value

def setTargetAngle(self, value: int):
self.angle = value

def checkIfOpen(self):
return self.isOpen

def getAngle(self):
return self.motor.angle()