Código e Implementación » History » Version 24
« Previous -
Version 24/45
(diff) -
Next » -
Current version
Javier Huanca, 12/18/2023 12:12 AM
Índice:
- Panorama General
- Organización y Planificación
- Análisis y Diseño
- Código e Implementación
- Resultados
- Evolución del robot
Código e Implementación¶
Funciones¶
Código en linea
from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedRPM, MoveTank from ev3dev2.sound import Sound import math import os import sys from time import sleep #movimiento simultáneo de las ruedas(rueda izquierda, rueda derecha) movimiento_ruedas = MoveTank(OUTPUT_A, OUTPUT_B) #movimiento del palo del robot mPalo = LargeMotor(OUTPUT_C) #movimiento de rotación de las ruedas delanteras mRotar = MediumMotor(OUTPUT_D) #función para lanzar un objeto con el palo def lanzar(distancia): pi = math.pi vel_necesaria = math.sqrt((4.9*distancia)/math.cos(pi/4)*math.sin(pi/4)) vel_rpm = (60*vel_necesaria)/(2*pi*0.189) # Rotar el motor en -180 grados al 6% de velocidad mPalo.on_for_degrees(6,-180) # Rotar el motor en 225 grados al porcentaje de velocidad de vel_rpm mPalo.on_for_degrees(SpeedRPM(round(vel_rpm)),225) # Rotar el motor en -45 grados al 6% de la velocidad mPalo.on_for_degrees(6,-45) #función para mover el robot hacia adelante def mover_adelante(): movimiento_ruedas.on(-100, -100) #función para mover el robot hacia atras def mover_atras(): movimiento_ruedas.on(100, 100) #función para mover el robot hacia la izquierda def mover_izquierda(): mRotar.on(50) #función para mover el robot hacia la derecha def mover_derecha(): mRotar.on(-50) #función para detener el robot def detener(): movimiento_ruedas.stop()
Servidor¶
import socket from funciones import * #se crea un socket s = socket.socket() s.settimeout(5) print("Socket creado") port = 2222 #se asocia una dirección IP y un número de puerto al socket s.bind(("", port)) print("El socket se creo con puerto:{}".format(port)) #se comienza a escuchar conexiones entrantes (máximo 5 conexiones pendientes) s.listen(5) print("The socket is listening....") #se acepta la conexión, creando un nuevo socket a partir de la conexion entrante y la dirección del cliente connect, addr = s.accept() print("Se conecto a {}".format(addr)) while True: #se define el carácter que el socket del cliente recibe como dato rawByte = connect.recv(1) #se traduce el carácter recibido char = rawByte.decode('utf-8') if (char == 'w'): mover_adelante() if (char == 's'): mover_atras() if (char == 'a'): mover_izquierda() if (char == 'd'): mover_derecha() if (char == ' '): detener() if (char == 'l'): lanzar(2)
Interfaz¶
import tkinter as tk from tkinter import ttk from tkinter import messagebox from tkinter import * import socket import sys ev3_ip = "192.168.70.147" #Ventana root = tk.Tk() root.config(width=1000, height=500) root.config(bg="darkred") root.title("ANT-0T0") #Acciones del robot def irAdelante(): clientSocket.send(bytes([ord('w')])) def irAtras(): clientSocket.send(bytes([ord('s')])) def irIzquierda(): clientSocket.send(bytes([ord('a')])) def irDerecha(): clientSocket.send(bytes([ord('d')])) def inicioLanzar(): clientSocket.send(bytes([ord('l')])) def soltar(event): clientSocket.send(bytes([ord(' ')])) def conectar(address): try: clientSocket.connect((address,port)) messagebox.showinfo("Mensaje Servido","Cliente conectado al robot: {0} : {1}".format(address,port)) except socket.error: messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la ip {0}".format(address)) clientSocket.close() #Imagenes imgLogo = tk.PhotoImage(file="logo_ant0t0.png") imgFlechaIzq = tk.PhotoImage(file="flecha_izquierda.png") imgFlechaSup = tk.PhotoImage(file="flecha_superior.png") imgFlechaDer = tk.PhotoImage(file="flecha_derecha.png") imgFlechaInf = tk.PhotoImage(file="flecha_inferior.png") imgApagar = tk.PhotoImage(file="Boton_Apagar.png") imgLanzar = tk.PhotoImage(file="imgLanzar.png") etiqueta_logo = tk.Label(root, image=imgLogo, bg = "darkred").place(x=350,y=150) #Boton Flecha Izquierda Bt_FlechaIzq = Button(root, image=imgFlechaIzq, command=irIzquierda) Bt_FlechaIzq.place(x=50,y=190) #Boton Flecha Superior Bt_FlechaSup = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaSup, command=irAdelante) Bt_FlechaSup.place(x=150,y=100) Bt_FlechaSup.bind('<ButtonRelease-1>', soltar) #Boton Flecha Derecha Bt_FlechaDer = Button(root, image=imgFlechaDer, command=irDerecha) Bt_FlechaDer.place(x=250,y=190) #Boton Flecha Inferior Bt_FlechaInf = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaInf, command=irAtras) Bt_FlechaInf.place(x=150,y=280) Bt_FlechaInf.bind('<ButtonRelease-1>', soltar) #Boton Apagado Bt_Apagar = Button(root, image=imgApagar, command=root.destroy).place(x=440,y=370) #Boton Lanzar Bt_Lanzar = Button(root, image=imgLanzar, bg = "darkred", command=inicioLanzar) Bt_Lanzar.place(x=670, y=160) #Boton Conectar button_connect = tk.Button(root, text="Conectar", command= lambda: {conectar(ev3_ip)}, font=("Arial",12)).place(x=440,y=90) if len(sys.argv) > 2: print("usage:client-laptop,py [IP-addr-of-robot]") sys.exit(1) elif len(sys.argv) == 2: ipAddress = sys.argv[1] print("using specified IP address: {}".format(ipAddress)) else: print("using default IP address: {}".format(ev3_ip)) clientSocket = socket.socket() port = 2222 root.mainloop()