Skip to content

Commit

Permalink
Changed the whole system
Browse files Browse the repository at this point in the history
  • Loading branch information
martaron committed Nov 7, 2025
1 parent f3b22ff commit 5f780f4
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 23 deletions.
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(90)
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()

0 comments on commit 5f780f4

Please sign in to comment.