Ejemplo n.º 1
0
def run():
    pwm_S = Servo()
    pwm_S.setServoPwm('0', SERVO_ORIZON)
    pwm_S.setServoPwm('1', SERVO_VERTIC)
    ultrasonic = Ultrasonic()
    cli = Redis('localhost')

    while True:
        M = ultrasonic.get_distance()
        cli.set('ultrasonic_M', M)
        time.sleep(0.2)
        """
Ejemplo n.º 2
0
import time
 
        
from Motor import *            
PWM=Motor()          


from Ultrasonic import *
ultrasonic=Ultrasonic()                

try:
   while True:
       data=ultrasonic.get_distance()   #Get the value
       print ("Obstacle distance is "+str(data)+"CM")
       
      if(data<10):
           PWM.setMotorModel(-1000,-1000,-1000,-1000)   #Back
           print ("The car is going backwards")  
           time.sleep(1)
      else:
           PWM.setMotorModel(1000,1000,1000,1000)       #Forward
           print ("The car is moving forward")
           time.sleep(1)
                
except KeyboardInterrupt:
  print ("\nEnd of program")
Ejemplo n.º 3
0
class Server:
    def __init__(self):
        self.PWM = Motor()
        self.servo = Servo()
        self.led = Led()
        self.ultrasonic = Ultrasonic()
        self.buzzer = Buzzer()
        self.adc = Adc()
        self.light = Light()
        self.infrared = Line_Tracking()
        self.tcp_Flag = True
        self.sonic = False
        self.Light = False
        self.Mode = 'one'
        self.endChar = '\n'
        self.intervalChar = '#'

    def get_interface_ip(self):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(
            fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s',
                                                        b'wlan0'[:15]))[20:24])

    def StartTcpServer(self):
        HOST = str(self.get_interface_ip())
        self.server_socket1 = socket.socket()
        self.server_socket1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT,
                                       1)
        self.server_socket1.bind((HOST, 5000))
        self.server_socket1.listen(1)
        self.server_socket = socket.socket()
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT,
                                      1)
        self.server_socket.bind((HOST, 8000))
        self.server_socket.listen(1)
        print('Server address: ' + HOST)

    def StopTcpServer(self):
        try:
            self.connection.close()
            self.connection1.close()
        except Exception as e:
            print('\n' + "No client connection")

    def Reset(self):
        self.StopTcpServer()
        self.StartTcpServer()
        self.SendVideo = Thread(target=self.sendvideo)
        self.ReadData = Thread(target=self.readdata)
        self.SendVideo.start()
        self.ReadData.start()

    def send(self, data):
        self.connection1.send(data.encode('utf-8'))

    def sendvideo(self):
        try:
            self.connection, self.client_address = self.server_socket.accept()
            self.connection = self.connection.makefile('wb')
        except:
            pass
        self.server_socket.close()
        try:
            with picamera.PiCamera() as camera:
                camera.resolution = (400, 300)  # pi camera resolution
                camera.framerate = 15  # 15 frames/sec
                time.sleep(2)  # give 2 secs for camera to initilize
                start = time.time()
                stream = io.BytesIO()
                # send jpeg format video stream
                print("Start transmit ... ")
                for foo in camera.capture_continuous(stream,
                                                     'jpeg',
                                                     use_video_port=True):
                    try:
                        self.connection.flush()
                        stream.seek(0)
                        b = stream.read()
                        length = len(b)
                        if length > 5120000:
                            continue
                        lengthBin = struct.pack('L', length)
                        self.connection.write(lengthBin)
                        self.connection.write(b)
                        stream.seek(0)
                        stream.truncate()
                    except Exception as e:
                        print(e)
                        print("End transmit ... ")
                        break
        except:
            #print "Camera unintall"
            pass

    def stopMode(self):
        try:
            stop_thread(self.infraredRun)
            self.PWM.setMotorModel(0, 0, 0, 0)
        except:
            pass
        try:
            stop_thread(self.lightRun)
            self.PWM.setMotorModel(0, 0, 0, 0)
        except:
            pass
        try:
            stop_thread(self.ultrasonicRun)
            self.PWM.setMotorModel(0, 0, 0, 0)
            self.servo.setServoPwm('0', 90)
            self.servo.setServoPwm('1', 90)
        except:
            pass

    def readdata(self):
        try:
            try:
                self.connection1, self.client_address1 = self.server_socket1.accept(
                )
                print("Client connection successful ! ---- SURE?")
            except:
                print("Client connect failed")
            restCmd = ""
            self.server_socket1.close()
            while True:
                try:
                    AllData = restCmd + self.connection1.recv(1024).decode(
                        'utf-8')
                except:
                    if self.tcp_Flag:
                        self.Reset()
                    break
                print('AllData is', AllData)
                if len(AllData) < 5:
                    restCmd = AllData
                    if restCmd == '' and self.tcp_Flag:
                        self.Reset()
                        break
                restCmd = ""
                if AllData == '':
                    break
                else:
                    cmdArray = AllData.split("\n")
                    if (cmdArray[-1] != ""):
                        restCmd = cmdArray[-1]
                        cmdArray = cmdArray[:-1]

                for oneCmd in cmdArray:
                    data = oneCmd.split("#")
                    if data == None:
                        continue
                    elif cmd.CMD_MODE in data:
                        if data[1] == 'one':
                            self.stopMode()
                            self.Mode = 'one'
                        elif data[1] == 'two':
                            self.stopMode()
                            self.Mode = 'two'
                            self.lightRun = Thread(target=self.light.run)
                            self.lightRun.start()
                        elif data[1] == 'three':
                            self.stopMode()
                            self.Mode = 'three'
                            self.ultrasonicRun = threading.Thread(
                                target=self.ultrasonic.run)
                            self.ultrasonicRun.start()
                        elif data[1] == 'four':
                            self.stopMode()
                            self.Mode = 'four'
                            self.infraredRun = threading.Thread(
                                target=self.infrared.run)
                            self.infraredRun.start()

                    elif (cmd.CMD_MOTOR in data) and self.Mode == 'one':
                        print('Data is', data)
                        try:
                            data1 = int(data[1])
                            data2 = int(data[2])
                            data3 = int(data[3])
                            data4 = int(data[4])
                            if data1 == None or data2 == None or data2 == None or data3 == None:
                                continue
                            self.PWM.setMotorModel(data1, data2, data3, data4)
                        except:
                            pass
                    elif cmd.CMD_SERVO in data:
                        try:
                            data1 = data[1]
                            data2 = int(data[2])
                            if data1 == None or data2 == None:
                                continue
                            self.servo.setServoPwm(data1, data2)
                        except:
                            pass

                    elif cmd.CMD_LED in data:
                        try:
                            data1 = int(data[1])
                            data2 = int(data[2])
                            data3 = int(data[3])
                            data4 = int(data[4])
                            if data1 == None or data2 == None or data2 == None or data3 == None:
                                continue
                            self.led.ledIndex(data1, data2, data3, data4)
                        except:
                            pass
                    elif cmd.CMD_LED_MOD in data:
                        self.LedMoD = data[1]
                        if self.LedMoD == '0':
                            try:
                                stop_thread(Led_Mode)
                            except:
                                pass
                            self.led.ledMode(self.LedMoD)
                            time.sleep(0.1)
                            self.led.ledMode(self.LedMoD)
                        else:
                            try:
                                stop_thread(Led_Mode)
                            except:
                                pass
                            time.sleep(0.1)
                            Led_Mode = Thread(target=self.led.ledMode,
                                              args=(data[1], ))
                            Led_Mode.start()
                    elif cmd.CMD_SONIC in data:
                        if data[1] == '1':
                            self.sonic = True
                            self.ultrasonicTimer = threading.Timer(
                                0.5, self.sendUltrasonic)
                            self.ultrasonicTimer.start()
                        else:
                            self.sonic = False
                    elif cmd.CMD_BUZZER in data:
                        try:
                            self.buzzer.run(data[1])
                        except:
                            pass
                    elif cmd.CMD_LIGHT in data:
                        if data[1] == '1':
                            self.Light = True
                            self.lightTimer = threading.Timer(
                                0.3, self.sendLight)
                            self.lightTimer.start()
                        else:
                            self.Light = False
                    elif cmd.CMD_POWER in data:
                        ADC_Power = self.adc.recvADC(2) * 3
                        try:
                            self.send(cmd.CMD_POWER + '#' + str(ADC_Power) +
                                      '\n')
                        except:
                            pass
        except Exception as e:
            print(e)
        self.StopTcpServer()

    def sendUltrasonic(self):
        if self.sonic == True:
            ADC_Ultrasonic = self.ultrasonic.get_distance()
            if ADC_Ultrasonic == self.ultrasonic.get_distance():
                try:
                    self.send(cmd.CMD_SONIC + "#" + str(ADC_Ultrasonic) + '\n')
                except:
                    self.sonic = False
            self.ultrasonicTimer = threading.Timer(0.13, self.sendUltrasonic)
            self.ultrasonicTimer.start()

    def sendLight(self):
        if self.Light == True:
            ADC_Light1 = self.adc.recvADC(0)
            ADC_Light2 = self.adc.recvADC(1)
            try:
                self.send(cmd.CMD_LIGHT + '#' + str(ADC_Light1) + '#' +
                          str(ADC_Light2) + '\n')
            except:
                self.Light = False
            self.lightTimer = threading.Timer(0.17, self.sendLight)
            self.lightTimer.start()

    def Power(self):
        while True:
            ADC_Power = self.adc.recvADC(2) * 3
            time.sleep(3)
            if ADC_Power < 6.8:
                for i in range(4):
                    self.buzzer.run('1')
                    time.sleep(0.1)
                    self.buzzer.run('0')
                    time.sleep(0.1)
            elif ADC_Power < 7:
                for i in range(2):
                    self.buzzer.run('1')
                    time.sleep(0.1)
                    self.buzzer.run('0')
                    time.sleep(0.1)
            else:
                self.buzzer.run('0')
Ejemplo n.º 4
0
class SPUG:
    def run(self):

        self.Ultrasonic = Ultrasonic()

        self.Pwm = Servo()

        credentials = pika.PlainCredentials('newuser1', 'password')

        connection = pika.BlockingConnection(
            pika.ConnectionParameters('192.168.1.12', 5672, '/', credentials))

        channel = connection.channel()

        channel.exchange_declare(exchange='PC2Pi.topic',
                                 exchange_type='topic',
                                 durable=True,
                                 auto_delete=False)

        channel.queue_declare(queue='PC2Pi.Processed_Data')

        channel.queue_bind(queue='PC2Pi.Processed_Data',
                           exchange='PC2Pi.topic',
                           routing_key='Processed_Data')

        while True:
            self.LMR = 0x00
            if GPIO.input(IR01) == True:
                self.LMR = (self.LMR | 4)
            if GPIO.input(IR02) == True:
                self.LMR = (self.LMR | 2)
            if GPIO.input(IR03) == True:
                self.LMR = (self.LMR | 1)

            self.Pwm.setServoPwm('0', 90)
            self.Pwm.setServoPwm('1', 90)
            distance = self.Ultrasonic.get_distance()
            IRSensor1 = (GPIO.input(IR01) == True)
            IRSensor2 = (GPIO.input(IR02) == True)
            IRSensor3 = (GPIO.input(IR03) == True)

            if distance > 10:

                if self.LMR == 2:
                    PWM.setMotorModel(575, 575, 575, 575)
                elif self.LMR == 4:
                    PWM.setMotorModel(-1500, -1500, 2500, 2500)
                elif self.LMR == 6:
                    PWM.setMotorModel(-2000, -2000, 4000, 4000)
                elif self.LMR == 1:
                    PWM.setMotorModel(2500, 2500, -1500, -1500)
                elif self.LMR == 3:
                    PWM.setMotorModel(4000, 4000, -2000, -2000)
                elif self.LMR == 7:
                    pass

            else:
                PWM.setMotorModel(0, 0, 0, 0)

            message1 = time.ctime() + " Distance to Obstacle: "+ str(distance)+ \
            "%" + "IR Sensor1: %"+ str(IRSensor1)+"%"+ "IR Sensor2: %"+ str(IRSensor2)+"%" \
             + "IR Sensor3: %"+ str(IRSensor3)+"%"

            channel.basic_publish(
                exchange='Pi2PC.topic',
                routing_key='Cart101.ShoppingMall.DistanceIRSensorVal',
                body=message1)

            print('Sent_1' + message1)
            time.sleep(timeout)
Ejemplo n.º 5
0
class SPUG:
    def Initialize_Values(self):

        #Itial position
        self.x_init = 0
        self.y_init = 0

        #Product Location Positions
        self.x_pro_des = 3  #Test Initialization
        self.y_pro_des = 3  #Test Initialization

        #Intermediate Destination Positions
        self.x_inter_des = 3  #Test Initialization
        self.y_inter_des = 3  #Test Initialization

        #Local Position of the SPUG
        self.l_x = 0
        self.l_y = 0

        #SPUG Starts at Coordinate [0 ,0] facing North
        self.Orientation = "North"

        #SPUG Number
        self.Cart_Number = 4

        #Variable to calculate the Position of SPUG after movement
        self.Moved_Straight_New = 0
        self.Moved_Straight_Old = 0

        self.Moved_Reverse_New = 0
        self.Moved_Reverse_Old = 0

        self.Moved_Left_New = 0
        self.Moved_Left_Old = 0

        self.Moved_Right_New = 0
        self.Moved_Right_Old = 0

        #Total moves made by SPUG
        self.Total_Moves = 0

        #Intermediate Position Reached by SPUG
        self.Inter_Target_Reached = 0

        #Product Location Reached by SPUG
        self.Product_Des_Reached = 0

        #SPUG presesnt at junction
        self.Junction = 0

        #SPUG at [0 ,0] coordinate:
        # 0 - Present at [0,0] coordinate
        # 1 - Not pressent at [0,0] coordinate
        self.IntialJunction = 0

    #Function to set the intermediate coordinates to navigate SPUG
    def Set_intermediate_destnation_position(self, x_destination,
                                             y_destnation):
        self.x_inter_des = x_destination
        self.y_inter_des = y_destnation

        self.Inter_Target_Reached = 0

    #Function to set the Product locations to message the server if the product location is reached
    def Set_product_destnation_position(self, x_destination, y_destnation):
        self.x_pro_des = x_destination
        self.y_pro_des = y_destnation

        self.Product_Des_Reached = 0

    #Function to get the current coordinates of SPUG
    def Get_curent_position(self):
        return self.l_x, self.l_y

    #Function to get if Intermediate position is reached
    def Is_Intermediate_DestinTion_Reached(self):
        return self.Inter_Target_Reached

    #Function to get if Product location is reached
    def Is_Product_DestinTion_Reached(self):
        return self.Product_Des_Reached

    #Function to update the coordinates and get the direction to move
    def Mov_According_To_Specified_position(self):

        #Intial Position Before Movement
        self.x_init = self.l_x
        self.y_init = self.l_y

        #Do not update the coordinates for the first junction
        if (self.IntialJunction != 0):

            Coordinates_Updated = 0

            #Code for updating the co-ordinates
            if (self.Moved_Straight_New != self.Moved_Straight_Old):
                if (self.Orientation == "North"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y + 1

                elif (self.Orientation == "South"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y - 1

                elif (self.Orientation == "East"):
                    self.l_x = self.l_x + 1
                    self.l_y = self.l_y

                elif (self.Orientation == "West"):
                    self.l_x = self.l_x - 1
                    self.l_y = self.l_y

                Coordinates_Updated = 1

            elif (self.Moved_Reverse_New != self.Moved_Reverse_Old):
                if (self.Orientation == "North"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y - 1

                elif (self.Orientation == "South"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y + 1

                elif (self.Orientation == "East"):
                    self.l_x = self.l_x - 1
                    self.l_y = self.l_y

                elif (self.Orientation == "West"):
                    self.l_x = self.l_x + 1
                    self.l_y = self.l_y

                Coordinates_Updated = 1

            elif (self.Moved_Left_New != self.Moved_Left_Old):
                if (self.Orientation == "North"):
                    self.l_x = self.l_x - 1
                    self.l_y = self.l_y
                    self.Orientation = 'West'

                elif (self.Orientation == "South"):
                    self.l_x = self.l_x + 1
                    self.l_y = self.l_y
                    self.Orientation = 'East'

                elif (self.Orientation == "East"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y + 1
                    self.Orientation = 'North'

                elif (self.Orientation == "West"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y - 1
                    self.Orientation = 'South'

                Coordinates_Updated = 1

            elif (self.Moved_Right_New != self.Moved_Right_Old):
                if (self.Orientation == "North"):
                    self.l_x = self.l_x + 1
                    self.l_y = self.l_y
                    self.Orientation = 'East'

                elif (self.Orientation == "South"):
                    self.l_x = self.l_x - 1
                    self.l_y = self.l_y
                    self.Orientation = 'West'

                elif (self.Orientation == "East"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y - 1
                    self.Orientation = 'South'

                elif (self.Orientation == "West"):
                    self.l_x = self.l_x
                    self.l_y = self.l_y + 1
                    self.Orientation = 'North'

                Coordinates_Updated = 1

            if (Coordinates_Updated != 0):
                self.Total_Moves = self.Total_Moves + 1

            self.Moved_Straight_New = self.Moved_Straight_Old
            self.Moved_Reverse_New = self.Moved_Reverse_Old
            self.Moved_Left_New = self.Moved_Left_Old
            self.Moved_Right_New = self.Moved_Right_Old

        #Calculate the next move
        if (self.Orientation == "North"):
            if ((self.y_inter_des - self.l_y) > 0):
                self.Moved_Straight_New = self.Moved_Straight_Old + 1
                ret = 5  #Straight

            elif ((self.x_inter_des - self.l_x) > 0):
                self.Moved_Right_New = self.Moved_Right_Old + 1
                ret = 9  #Right

            elif ((self.x_inter_des - self.l_x) < 0):
                self.Moved_Left_New = self.Moved_Left_Old + 1
                ret = 1  #Left

            elif ((self.y_inter_des - self.l_y) < 0):
                self.Moved_Reverse_New = self.Moved_Reverse_Old + 1
                ret = 11  #Reverse

            elif ((self.y_inter_des == self.l_y)
                  and (self.x_inter_des == self.l_x)):
                ret = 0  #Stop

        elif (self.Orientation == "South"):
            if ((self.y_inter_des - self.l_y) < 0):
                self.Moved_Straight_New = self.Moved_Straight_Old + 1
                ret = 5  #Straight

            elif ((self.x_inter_des - self.l_x) < 0):
                self.Moved_Right_New = self.Moved_Right_Old + 1
                ret = 9  #Right

            elif ((self.x_inter_des - self.l_x) > 0):
                self.Moved_Left_New = self.Moved_Left_Old + 1
                ret = 1  #Left

            elif ((self.y_inter_des - self.l_y) > 0):
                self.Moved_Reverse_New = self.Moved_Reverse_Old + 1
                ret = 11  #Reverse

            elif ((self.y_inter_des == self.l_y)
                  and (self.x_inter_des == self.l_x)):
                ret = 0  #Stop

        elif (self.Orientation == "East"):
            if ((self.x_inter_des - self.l_x) > 0):
                self.Moved_Straight_New = self.Moved_Straight_Old + 1
                ret = 5  #Straight

            elif ((self.y_inter_des - self.l_y) < 0):
                self.Moved_Right_New = self.Moved_Right_Old + 1
                ret = 9  #Right

            elif ((self.y_inter_des - self.l_y) > 0):
                self.Moved_Left_New = self.Moved_Left_Old + 1
                ret = 1  #Left

            elif ((self.x_inter_des - self.l_x) < 0):
                self.Moved_Reverse_New = self.Moved_Reverse_Old + 1
                ret = 11  #Reverse

            elif ((self.y_inter_des == self.l_y)
                  and (self.x_inter_des == self.l_x)):
                ret = 0  #Stop

        elif (self.Orientation == "West"):
            if ((self.x_inter_des - self.l_x) < 0):
                self.Moved_Straight_New = self.Moved_Straight_Old + 1
                ret = 5  #Straight

            elif ((self.y_inter_des - self.l_y) > 0):
                self.Moved_Right_New = self.Moved_Right_Old + 1
                ret = 9  #Right

            elif ((self.y_inter_des - self.l_y) < 0):
                self.Moved_Left_New = self.Moved_Left_Old + 1
                ret = 1  #Left

            elif ((self.x_inter_des - self.l_x) > 0):
                self.Moved_Reverse_New = self.Moved_Reverse_Old + 1
                ret = 11  #Reverse

            elif ((self.y_inter_des == self.l_y)
                  and (self.x_inter_des == self.l_x)):
                ret = 0  #Stop

        #Set the inital junction value to 1
        self.IntialJunction = 1

        #Update if the intermediate position is reached
        if ((self.y_inter_des == self.l_y) and (self.x_inter_des == self.l_x)):
            self.Inter_Target_Reached = 1
        else:
            self.Inter_Target_Reached = 0

        #Update if the product location coordinate is reached
        if ((self.y_pro_des == self.l_y) and (self.x_pro_des == self.l_x)):
            self.Product_Des_Reached = 1
        else:
            self.Product_Des_Reached = 0
        #------------------------------------------------------------------------------------------------------------------------

        #--------------------Print data for debugging-------------------------------------------------------------------------
        print("Orientation - %s" % self.Orientation)
        print("X Coordinate - %d " % self.l_x)
        print("Y Coordinate - %d " % self.l_y)
        print("Intermediate Destination Reached - %d " %
              self.Inter_Target_Reached)
        print("Product Destination Reached - %d " % self.Product_Des_Reached)
        print("Total Moves - %d " % self.Total_Moves)
        #------------------------------------------------------------------------------------------------------------------------

        #----------------------Write data into Google Firebase Cloud Database-------------------------------------------------
        # Create a dictionary to store the data before sending to the database
        data_to_upload = {
            'Time': time.ctime(),
            'Current X Coordinate': self.l_x,
            'Current Y Coordinate': self.l_y,
            'Intermed Destination X': self.x_inter_des,
            'Intermed Destination Y': self.y_inter_des,
            'Product Destination X': self.x_pro_des,
            'Product Destination Y': self.y_pro_des,
            'Movement': ret,
            'Orientation': self.Orientation,
            'Intermed Destination Reached': self.Inter_Target_Reached,
            'Product Destination Reached': self.Product_Des_Reached,
            'Total Moves': self.Total_Moves
        }
        #Post the data to the appropriate folder/branch within your database
        result = FBConn.post('/Cart4/SPUG_PI2PC_Coordinates_Data/',
                             data_to_upload)
        #------------------------------------------------------------------------------------------------------------------------

        #----------------------------------------Send MQTT Path Occupy Message-------------------------------------------------
        client = mqtt.Client("RaspBerry_PI_1")  #create new instance

        client.connect('192.168.1.9', 1883, 70)  #connect to broker

        client.loop_start()

        message1 = {
            "X": str(self.x_inter_des),
            "Y": str(str(self.y_inter_des))
        }

        msg1 = json.dumps(message1)

        client.publish("pointOccupy/", msg1, 2)

        time.sleep(0.1)

        print("Point Occupy message Sent from Pi :" + time.ctime() + " " +
              msg1)
        #------------------------------------------------------------------------------------------------------------------------

        #----------------------------------------Send MQTT Path Un-Occupy Message-------------------------------------------------
        if (self.Is_Intermediate_DestinTion_Reached()):
            client = mqtt.Client("RaspBerry_PI_2")  #create new instance

            client.connect('192.168.1.9', 1883, 70)  #connect to broker

            client.loop_start()

            message2 = {
                "X": str(self.x_inter_des),
                "Y": str(str(self.y_inter_des))
            }

            msg2 = json.dumps(message2)

            client.publish("pointUnoccupy/", msg2, 2)

            time.sleep(0.1)

            print("Point Un-Occupy message Sent from Pi :" + time.ctime() +
                  " " + msg2)
        #-------------------------------------------------------------------------------------------------------------------------

        #----------------------------------------Send MQTT Item Purchased Message-------------------------------------------------
        if (self.Is_Product_DestinTion_Reached()):
            client = mqtt.Client("RaspBerry_PI_3")  #create new instance

            client.connect('192.168.1.9', 1883, 70)  #connect to broker

            client.loop_start()

            message3 = { "itemPurchasedX" : str(self.l_x), "itemPurchasedY" : str(self.l_y), \
                         "cartName" : "cart"+str(self.Cart_Number)}

            msg3 = json.dumps(message3)

            client.publish("item/", msg3, 2)

            time.sleep(0.1)

            print("Item Purchased message Sent from Pi :" + time.ctime() +
                  " " + msg3)

            self.LED.ledIndex(0xFF, 0, 0, 0)  # Switch off all LED's
            self.Buzzer.run('1')
            time.sleep(0.5)
            self.Buzzer.run('0')
        #---------------------------------------------------------------------------------------------------------------------

        #Return Value from the Calculations
        return int(ret)

    def Move_Cart(self, l_Movement_Type):

        if (l_Movement_Type == 5):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0xF0, 0, 255, 0)  #Green
            #PWM.setMotorModel(800,800,800,800)
            #time.sleep(0.1)
            #PWM.setMotorModel(0,0,0,0)

        elif (l_Movement_Type == 1):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0x3C, 0, 255, 0)  #Green
            #PWM.setMotorModel(-2000,-2000,4000,4000)
            #time.sleep(0.2)

        elif (l_Movement_Type == 3):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0x3C, 0, 0, 0)  #Green
            #PWM.setMotorModel(-1200,-1200,2000,2000)
            #time.sleep(0.2)

        elif (l_Movement_Type == 7):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0xC3, 0, 0, 0)  #Green
            #PWM.setMotorModel(2000,2000,-1200,-1200)
            #time.sleep(0.2)

        elif (l_Movement_Type == 9):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0xC3, 0, 255, 0)  #Green
            #PWM.setMotorModel(4000,4000,-2000,-2000)
            #time.sleep(0.5)

        elif (l_Movement_Type == 11):
            self.LED.ledIndex(0xFF, 0, 0, 0)  #Turn Off
            self.LED.ledIndex(0x0F, 0, 255, 0)  #Green
            #PWM.setMotorModel(-600,-600,-600,-600)

        elif (l_Movement_Type == 0):
            time.sleep(0.001)
            #PWM.setMotorModel(0,0,0,0)

    def Run_Cart4(self):

        #------------------------------------------Ultrasonic sensor and Servo Motor Class
        self.Ultrasonic = Ultrasonic()

        self.LED = Led()

        self.Buzzer = Buzzer()

        self.Junction = 0

        #--------------------------------------------------------------------------------------
        while True:

            self.Movement_Type = 0

            Distance = self.Ultrasonic.get_distance()

            IR_Left = GPIO.input(IR01)

            IR_Mid = GPIO.input(IR02)

            IR_Right = GPIO.input(IR03)

            if (Distance > 15.0):

                if ((IR_Left == 0) and (IR_Mid == 1) and (IR_Right == 0)):
                    if (self.Moved_Reverse_New != self.Moved_Reverse_Old):
                        self.Movement_Type = 11  #Move Reverse
                    else:
                        self.Movement_Type = 5  #Move Forward
                    self.Junction = 0  #Clear the Junction Variable

                elif ((IR_Left == 1) and (IR_Mid == 0) and (IR_Right == 0)):
                    self.Movement_Type = 3  #Take Slight Left

                elif ((IR_Left == 1) and (IR_Mid == 1) and (IR_Right == 0)):
                    self.Movement_Type = 3  #Take Slight Left

                elif ((IR_Left == 0) and (IR_Mid == 0) and (IR_Right == 1)):
                    self.Movement_Type = 7  #Take Slight Right

                elif ((IR_Left == 0) and (IR_Mid == 1) and (IR_Right == 1)):
                    self.Movement_Type = 7  #Take Slight Right

                elif ((IR_Mid == 1) and (IR_Left == 1) and (IR_Right == 1)):
                    if (self.Junction == 0):
                        self.Movement_Type = self.Mov_According_To_Specified_position(
                        )
                    self.Junction = 1

                else:
                    pass

            else:
                self.Movement_Type = 0  #Stop Movement
                self.LED.ledIndex(0x20, 255, 125, 0)  #Orange
                self.LED.ledIndex(0x40, 255, 125, 0)  #Orange
                time.sleep(1)
                self.LED.ledIndex(0x60, 0, 0, 0)

            #Actuate the motors to move cart to the specific Coordinate
            self.Move_Cart(self.Movement_Type)

            if (self.Is_Intermediate_DestinTion_Reached()):
                break
Ejemplo n.º 6
0
def dist():
    ultrasonic = Ultrasonic()  # create an object
    data = ultrasonic.get_distance()  # Get the value
    print("Obstacle distance is " + str(data) + "CM")
    return data
Ejemplo n.º 7
0
    def run_ultrasonic(self):
        IR01 = 14
        IR02 = 15
        IR03 = 23
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(IR01, GPIO.IN)
        GPIO.setup(IR02, GPIO.IN)
        GPIO.setup(IR03, GPIO.IN)
        self.LMR0 = 0x00
        if GPIO.input(IR01) == False:
            self.LMR0 = (self.LMR0 | 4)
        if GPIO.input(IR02) == False:
            self.LMR0 = (self.LMR0 | 2)
        if GPIO.input(IR03) == False:
            self.LMR0 = (self.LMR0 | 1)
        if self.LMR0 > 0:
            self.LMR0 = 7
        ttable = [[1, 0], [2, 4], [3, 5], [1, 1], [0, 0], [0, 0]]
        x = 40
        ultra = Ultrasonic()
        print "Auto drive Start!"

        cur_state = 0

        while self.automode:
            if cur_state == 0:
                self.display.show(1, "FORWARD")
                self.PWM.slowforward()
                ultra.look_forward()
            elif cur_state == 1:
                self.display.show(1, "LOOKLEFT")
                self.PWM.stopMotor()
                ultra.look_left()
            elif cur_state == 2:
                self.display.show(1, "LOOKRITE")
                self.PWM.stopMotor()
                ultra.look_right()
            elif cur_state == 3:
                self.display.show(1, "GOBACK")
                self.PWM.backup()
            elif cur_state == 4:
                self.display.show(1, "TURNLEFT")
                self.PWM.turnLeft()
                time.sleep(0.2)
            elif cur_state == 5:
                self.display.show(1, "TURNRITE")
                self.PWM.turnRight()
                time.sleep(0.2)
            else:
                print "Wrong state?"
                cur_state = 0

            time.sleep(0.1)
            d = ultra.get_distance()
            self.LMR = 0x00
            if GPIO.input(IR01) == False:
                self.LMR = (self.LMR | 4)
            if GPIO.input(IR02) == False:
                self.LMR = (self.LMR | 2)
            if GPIO.input(IR03) == False:
                self.LMR = (self.LMR | 1)
            if (self.LMR <> self.LMR0):
                cur_state = 3
            else:
                e = 0 if d < x else 1
                cur_state = ttable[cur_state][e]

        print "Auto drive End!"