Índice:
- Introducción
- Organización de Personal
- Planificación del Proyecto
- Análisis y diseño
- Código e implementación
Codigo e Implementación¶
#!/usr/bin/env python3
import evdev
import ev3dev.auto as ev3
import time
import socket
from ev3dev.ev3 import *
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
from ev3dev2.motor import LargeMotor
motorA=LargeMotor("outA")
motorD=LargeMotor("outD")
motorB=LargeMotor("outB")
## Funciones
def avanzar():
motorA.on(-50)
motorD.on(-50)
time.sleep(1)
motorA.stop()
motorD.stop()
def golpear_1():
motorB.on(-5)
time.sleep(0.5)
motorB.stop()
def golpear_2():
mototB.on(70)
motorB.stop()
time.sleep(0.5)
def golpear_3():
motorB.on(5)
time.sleep(0.5)
motorB.stop()
def retroceder():
motorD.on(50,False)
motorA.on(50,False)
time.sleep(1)
motorA.stop()
motorD.stop()
def derecha():
motorA.on(-20)
motorD.on(20)
time.sleep(0.5)
motorA.stop()
motorD.stop()
def izquierda():
motorD.on(-20)
motorA.on(20)
time.sleep(0.5)
motorD.stop()
motorA.stop()
#funciones de inclinacion del angulo
def angulo_30():
motorB.on_for_degrees(30,10)
def angulo_45():
motorB.on_for_degrees(45.10)
def angulo_60():
motorB.on_for_degrees(60,10)
def angulo_90():
motorB.on_for_degrees(90,10)
#obtener ip de la conexion
def obtener_ip():
try:
# Conectarse a un servicio que devuelva la dirección IP pública.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80)) # Conectar a un servidor DNS (Google DNS en este caso).
ip = s.getsockname()[0]
s.close()
return ip
except Exception as e:
print(f"Error al obtener la dirección IP: {e}")
return None
host = obtener_ip()
port = 12345
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(1)
print("Listening at port 12345")
print(host)
client_socket, addr = server_socket.accept()
print("Connection from: " + str(addr))
client_socket.send("Bienvenido".encode())
while True:
data = client_socket.recv(1024).decode()
if data=="avanzar":
avanzar()
elif data == "golpear":
golpear_2()
elif data=="atras":
golpear_3()
elif data=="adelante":
golpear_1()
elif data=="retroceder":
retroceder()
elif data=="derecha":
derecha()
elif data=="izquierda":
izquierda()
elif data=="desconectar":
server_socket.close()
print("Disconect")
elif data=="30°":
angulo_30()
elif data=="45°":
angulo_45()
elif data=="60°":
angulo_60()
elif data=="90°":
angulo_90()
INTERFAZ Y FUNCIONESINTERFAZ Y FUNCIONES
import socket
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import tkinter.font as font
from tkinter import PhotoImage
import os
from tkinter import *
AVANZAR = 'avanzar'
RETROCEDER = 'retroceder'
CLOSE = 'close'
DERECHA='derecha'
IZQUIERDA='izquierda'
GOLPEAR='golpear'
ATRAS='atras'
ADELANTE='adelante'
DESCONECTAR='desconectar'
ANGULO_30='30°'
ANGULO_45='45°'
ANGULO_60='60°'
ANGULO_90='90°'
MOVER='mover'
def conectar(ventana):
try:
port=12345
host=direccion_ip.get()
global client
client = socket.socket()
client.connect((host, port))
print(client.recv(1024).decode())
estado_label.config(text="Estado: Conectado")
boton_conectar.config(state=tk.DISABLED)
ventana.destroy()
except socket.error:
estado_label.config(text="Estado: Fallo al conectar")
boton_conectar.config(state=tk.NORMAL)
ventana.destroy()
messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la IP")
def ventana_ip():
boton_conectar.config(state=tk.DISABLED)
ventana_2 = tk.Toplevel(ventana)
ventana_2.title("Conexión a servidor")
ventana_2.configure(bg="#ABDBD8")
ventana_2.geometry("150x120")
etiqueta_ip = tk.Label(ventana_2, fg=a,text="Ingresar dirección de IP:", bg="#567E8B")
etiqueta_ip.pack(pady=10)
global direccion_ip
direccion_ip= tk.Entry(ventana_2,bg=a)
direccion_ip.pack(pady=10)
estado_label.config(text="Estado: Conectando")
boton_ingresar = tk.Button(ventana_2, text="Ingresar",fg=a, command=lambda:conectar(ventana_2),bg="#567E8B")
boton_ingresar.pack(pady=10)
# funciones
def avanzar():
client.send(AVANZAR.encode())
estado_label.config(text="Estado: Avanzando")
print("Avanzando")
def retroceder():
client.send(RETROCEDER.encode())
print("Retrocediendo")
estado_label.config(text="Estado: Retrocediendo")
def girar_der():
client.send(DERECHA.encode())
estado_label.config(text="Estado: Girando hacia la Derecha")
print("Girando derecha")
def girar_izq():
client.send(IZQUIERDA.encode())
estado_label.config(text="Estado: Girando hacia la Izquierda")
print("Girando izquierda")
def rotar_brazo_Atras():
client.send(ATRAS.encode())
estado_label.config(text="Estado: Ajustando brazo hacia Atras")
def rotar_brazo_Adelante():
client.send(ADELANTE.encode())
estado_label.config(text="Estado: Ajustando brazo hacia Adelante")
def angulo():
angulo_seleccinado=etiquetas_angulo.get()
if(angulo_seleccinado=="30°"):
etiquetas_angulo.set('')
client.send(ANGULO_30.encode())
estado_label.config(text="Estado: Inclinado angulo 30°")
elif(angulo_seleccinado=="45°"):
etiquetas_angulo.set('')
client.send(ANGULO_45.encode())
estado_label.config(text="Estado: Inclinado angulo 45°")
elif(angulo_seleccinado=="60°"):
etiquetas_angulo.set('')
client.send(ANGULO_60.encode())
estado_label.config(text="Estado: Inclinado angulo 60°")
elif(angulo_seleccinado=="90°"):
etiquetas_angulo.set('')
client.send(ANGULO_90.encode())
estado_label.config(text="Estado: Inclinado angulo 90°")
else:
estado_label.config(text="Estado: Angulo no encontrado")
def golpear():
client.send(GOLPEAR.encode())
estado_label.config(text="Estado: Golpeando")
def desconectar():
client.send(DESCONECTAR.encode())
estado_label.config(text="Estado: Desconectado")
client.close()
ventana.destroy()
def mover():
client.send(MOVER.encode())
estado_label.config(text="Estado: Realizando Movimientos")
# Crear la ventana principal de Tkinter
ventana = tk.Tk()
ventana.title("Control de Robot con Palo de Golf")
ventana.config(bg="#ABDBD8")
a="white"
b="light goldenrod yellow"
buttonFont = font.Font(family='Helvetica', size=24, weight='bold')
buttonFontSec = font.Font(family='Helvetica', size=15, weight='bold')
boton_avanzar = tk.Button(ventana, text="^", command=avanzar, height=1, width=3, font=buttonFont,bg=a)
boton_retroceder = tk.Button(ventana, text="v", command=retroceder, height=1, width=3, font=buttonFont,bg=a)
boton_izquierda = tk.Button(ventana, text="<", command=girar_izq, height=1, width=3, font=buttonFont,bg=a)
boton_derecha = tk.Button(ventana, text=">", command=girar_der, height=1, width=3, font=buttonFont,bg=a)
imagen_abajo=PhotoImage(file="C:/Users/nombre/Desktop/abajo.png")
boton_rotar_atras = tk.Button(ventana,image=imagen_abajo, command=rotar_brazo_Atras, height=60, width=53, font=buttonFontSec,bg=a)
imagen_arriba=PhotoImage(file="C:/Users/nombre/Desktop/arriba.png")
boton_rotar_adelante = tk.Button(ventana,image=imagen_arriba, command=rotar_brazo_Adelante, height=60, width=53, font=buttonFontSec,bg=a)
imagen_golpe=PhotoImage(file="C:/Users/nombre/Desktop/golpe.png")
boton_golpear = tk.Button(ventana,image=imagen_golpe, command=golpear, height=60, width=53, font=buttonFontSec)
imagen_angulo=PhotoImage(file="C:/Users/nombre/Desktop/angulo.png")
boton_angulo= tk.Button(ventana, image=imagen_angulo, command=angulo, height=45 ,width=75,fg="white" ,font=buttonFontSec,bg="#567E8B")
imagen_apagar=PhotoImage(file="C:/Users/nombre/Desktop/apagar.png")
boton_apagar = tk.Button(ventana, image=imagen_apagar, command=desconectar, height=60, width=53, font=buttonFontSec,bg=a)
boton_conectar = tk.Button(ventana, text="Conectar", command=ventana_ip, height=1, width=8,fg="white" ,font=buttonFontSec,bg="#567E8B")
boton_conectar.grid(column=4, row=6, padx=10, pady=8, rowspan=1)
# Agrega la etiqueta para "Seleccionar Ángulo" y la caja desplegable
etiqueta_angulo = tk.Label(ventana, text="Seleccionar Ángulo", fg="white" , font=buttonFontSec,bg="#567E8B")
etiquetas_angulo = ttk.Combobox(ventana, values=["30°", "45°", "60°","90°"], font=buttonFontSec)
etiqueta_angulo.grid(column=3, row=0, padx=8, pady=8, columnspan=2, rowspan=1)
etiquetas_angulo.grid(column=3, row=1, padx=8, pady=8, columnspan=2, rowspan=1)
boton_angulo.grid(column=3, row=2, padx=8, pady=8, columnspan=2, rowspan=1)
imagen = PhotoImage(file="C:/Users/fabian/Desktop/KIKIS.png")
logo = tk.Button(ventana, image=imagen,command=mover, height=64, width=64, font=buttonFontSec,bg=a)
boton_rotar_adelante.grid(column=0, row=0, padx=8, pady=8)
boton_avanzar.grid(column=1, row=0, padx=8, pady=8)
boton_rotar_atras.grid(column=2, row=0, padx=8, pady=8)
boton_izquierda.grid(column=0, row=1, padx=8, pady=8)
logo.grid(column=1, row=1, padx=8, pady=8)
boton_derecha.grid(column=2, row=1, padx=8, pady=8)
boton_golpear.grid(column=0, row=2, padx=8, pady=8)
boton_retroceder.grid(column=1, row=2, padx=8, pady=8)
# Agrega el botón "Mover" debajo del botón de la flecha hacia la derecha
boton_apagar.grid(column=2, row=2, padx=8, pady=8)
estado_label = tk.Label(ventana, text="Estado: Desconectado", fg="white" , font=buttonFontSec,bg="#567E8B")
estado_label.grid(row=6, column=0, columnspan=4, pady=8)
ventana.mainloop()
KIKIS PROJECT.jpeg (146 KB) Andrea Navia, 09/14/2023 07:01 PM