Project

General

Profile

Código e Implementación » History » Version 39

Javier Huanca, 12/18/2023 12:24 AM

1 13 Javier Huanca
*Índice*:
2 13 Javier Huanca
3 13 Javier Huanca
* [[Panorama General| Panorama General]]
4 13 Javier Huanca
* [[Organización y Planificación | Organización y Planificación]]
5 13 Javier Huanca
* [[Análisis y Diseño | Análisis y Diseño ]]
6 13 Javier Huanca
* [[Código e Implementación | Código e Implementación]]
7 22 Javier Huanca
* [[Resultados | Resultados]]
8 23 Javier Huanca
* [[Evolución del robot | Evolución del robot]]
9 13 Javier Huanca
10 24 Javier Huanca
h1. Código e Implementación
11 1 Javier Huanca
12 35 Javier Huanca
h2. +Funciones+
13 35 Javier Huanca
14 29 Javier Huanca
<pre><code class="python">
15 28 Javier Huanca
from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedRPM, MoveTank
16 28 Javier Huanca
from ev3dev2.sound import Sound
17 28 Javier Huanca
import math 
18 28 Javier Huanca
import os 
19 38 Javier Huanca
import sys
20 1 Javier Huanca
from time import sleep
21 39 Javier Huanca
22 30 Javier Huanca
#movimiento simultáneo de las ruedas(rueda izquierda, rueda derecha)
23 30 Javier Huanca
movimiento_ruedas = MoveTank(OUTPUT_A, OUTPUT_B)
24 30 Javier Huanca
#movimiento del palo del robot
25 30 Javier Huanca
mPalo = LargeMotor(OUTPUT_C)
26 30 Javier Huanca
#movimiento de rotación de las ruedas delanteras
27 30 Javier Huanca
mRotar = MediumMotor(OUTPUT_D)
28 30 Javier Huanca
29 30 Javier Huanca
30 30 Javier Huanca
#función para lanzar un objeto con el palo
31 30 Javier Huanca
def lanzar(distancia):
32 30 Javier Huanca
    pi = math.pi
33 30 Javier Huanca
    vel_necesaria = math.sqrt((4.9*distancia)/math.cos(pi/4)*math.sin(pi/4))
34 30 Javier Huanca
    vel_rpm = (60*vel_necesaria)/(2*pi*0.189)
35 30 Javier Huanca
    # Rotar el motor en -180 grados al 6% de velocidad
36 30 Javier Huanca
    mPalo.on_for_degrees(6,-180)
37 30 Javier Huanca
    # Rotar el motor en 225 grados al porcentaje de velocidad de vel_rpm
38 30 Javier Huanca
    mPalo.on_for_degrees(SpeedRPM(round(vel_rpm)),225)
39 30 Javier Huanca
    # Rotar el motor en -45 grados al 6% de la velocidad
40 30 Javier Huanca
    mPalo.on_for_degrees(6,-45)
41 30 Javier Huanca
42 30 Javier Huanca
#función para mover el robot hacia adelante
43 30 Javier Huanca
def mover_adelante():
44 30 Javier Huanca
    movimiento_ruedas.on(-100, -100)
45 30 Javier Huanca
46 30 Javier Huanca
#función para mover el robot hacia atras
47 30 Javier Huanca
def mover_atras():
48 30 Javier Huanca
    movimiento_ruedas.on(100, 100)
49 30 Javier Huanca
50 30 Javier Huanca
#función para mover el robot hacia la izquierda
51 30 Javier Huanca
def mover_izquierda():
52 30 Javier Huanca
    mRotar.on(50)
53 30 Javier Huanca
54 30 Javier Huanca
#función para mover el robot hacia la derecha
55 30 Javier Huanca
def mover_derecha():
56 30 Javier Huanca
    mRotar.on(-50)
57 30 Javier Huanca
58 30 Javier Huanca
#función para detener el robot
59 30 Javier Huanca
def detener():
60 30 Javier Huanca
    movimiento_ruedas.stop()
61 28 Javier Huanca
</code></pre>
62 28 Javier Huanca
63 11 Javier Huanca
h2. +Servidor+
64 11 Javier Huanca
65 32 Javier Huanca
<pre><code class="python">
66 9 Javier Huanca
import socket
67 9 Javier Huanca
from funciones import *
68 9 Javier Huanca
69 9 Javier Huanca
#se crea un socket
70 9 Javier Huanca
s = socket.socket()
71 9 Javier Huanca
s.settimeout(5)
72 9 Javier Huanca
print("Socket creado")
73 9 Javier Huanca
port = 2222
74 9 Javier Huanca
#se asocia una dirección IP y un número de puerto al socket
75 9 Javier Huanca
s.bind(("", port))
76 9 Javier Huanca
print("El socket se creo con puerto:{}".format(port))
77 9 Javier Huanca
#se comienza a escuchar conexiones entrantes (máximo 5 conexiones pendientes)
78 9 Javier Huanca
s.listen(5)
79 9 Javier Huanca
print("The socket is listening....")
80 9 Javier Huanca
#se acepta la conexión, creando un nuevo socket a partir de la conexion entrante y la dirección del cliente
81 9 Javier Huanca
connect, addr = s.accept()
82 9 Javier Huanca
print("Se conecto a {}".format(addr))
83 9 Javier Huanca
while True:
84 9 Javier Huanca
    #se define el carácter que el socket del cliente recibe como dato
85 9 Javier Huanca
    rawByte = connect.recv(1)
86 9 Javier Huanca
    #se traduce el carácter recibido
87 9 Javier Huanca
    char = rawByte.decode('utf-8')
88 9 Javier Huanca
    if (char == 'w'):
89 9 Javier Huanca
        mover_adelante()
90 9 Javier Huanca
    if (char == 's'):
91 9 Javier Huanca
        mover_atras()
92 9 Javier Huanca
    if (char == 'a'):
93 9 Javier Huanca
        mover_izquierda()
94 9 Javier Huanca
    if (char == 'd'):
95 9 Javier Huanca
        mover_derecha()
96 9 Javier Huanca
    if (char == ' '):
97 9 Javier Huanca
        detener()
98 9 Javier Huanca
    if (char == 'l'):
99 9 Javier Huanca
        lanzar(2)
100 36 Javier Huanca
</code></pre>
101 12 Javier Huanca
102 12 Javier Huanca
h2. +Interfaz+
103 12 Javier Huanca
104 33 Javier Huanca
<pre><code class="python">
105 12 Javier Huanca
import tkinter as tk
106 12 Javier Huanca
from tkinter import ttk
107 12 Javier Huanca
from tkinter import messagebox
108 12 Javier Huanca
from tkinter import *
109 12 Javier Huanca
import socket
110 12 Javier Huanca
import sys
111 12 Javier Huanca
112 12 Javier Huanca
ev3_ip = "192.168.70.147"
113 12 Javier Huanca
114 12 Javier Huanca
#Ventana
115 12 Javier Huanca
root = tk.Tk()
116 12 Javier Huanca
root.config(width=1000, height=500)
117 12 Javier Huanca
root.config(bg="darkred")
118 12 Javier Huanca
root.title("ANT-0T0")
119 12 Javier Huanca
120 12 Javier Huanca
#Acciones del robot
121 12 Javier Huanca
def irAdelante():
122 12 Javier Huanca
    clientSocket.send(bytes([ord('w')]))
123 12 Javier Huanca
124 12 Javier Huanca
def irAtras():
125 12 Javier Huanca
    clientSocket.send(bytes([ord('s')]))
126 12 Javier Huanca
    
127 12 Javier Huanca
def irIzquierda():
128 12 Javier Huanca
    clientSocket.send(bytes([ord('a')]))
129 12 Javier Huanca
130 12 Javier Huanca
def irDerecha():
131 12 Javier Huanca
    clientSocket.send(bytes([ord('d')]))
132 12 Javier Huanca
133 12 Javier Huanca
def inicioLanzar():
134 12 Javier Huanca
    clientSocket.send(bytes([ord('l')]))
135 12 Javier Huanca
136 12 Javier Huanca
def soltar(event):
137 12 Javier Huanca
    clientSocket.send(bytes([ord(' ')]))
138 12 Javier Huanca
139 12 Javier Huanca
def conectar(address):
140 12 Javier Huanca
    try:
141 12 Javier Huanca
        clientSocket.connect((address,port))
142 12 Javier Huanca
        messagebox.showinfo("Mensaje Servido","Cliente conectado al robot: {0} : {1}".format(address,port))
143 12 Javier Huanca
    except socket.error:
144 12 Javier Huanca
        messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la ip {0}".format(address))
145 12 Javier Huanca
        clientSocket.close()
146 12 Javier Huanca
        
147 12 Javier Huanca
#Imagenes
148 12 Javier Huanca
imgLogo = tk.PhotoImage(file="logo_ant0t0.png")
149 12 Javier Huanca
imgFlechaIzq = tk.PhotoImage(file="flecha_izquierda.png")
150 12 Javier Huanca
imgFlechaSup = tk.PhotoImage(file="flecha_superior.png")
151 12 Javier Huanca
imgFlechaDer = tk.PhotoImage(file="flecha_derecha.png")
152 12 Javier Huanca
imgFlechaInf = tk.PhotoImage(file="flecha_inferior.png")
153 12 Javier Huanca
imgApagar = tk.PhotoImage(file="Boton_Apagar.png")
154 12 Javier Huanca
imgLanzar = tk.PhotoImage(file="imgLanzar.png")
155 12 Javier Huanca
156 12 Javier Huanca
etiqueta_logo = tk.Label(root, image=imgLogo, bg = "darkred").place(x=350,y=150)
157 12 Javier Huanca
#Boton Flecha Izquierda
158 12 Javier Huanca
Bt_FlechaIzq = Button(root, image=imgFlechaIzq, command=irIzquierda)
159 12 Javier Huanca
Bt_FlechaIzq.place(x=50,y=190)
160 12 Javier Huanca
#Boton Flecha Superior
161 12 Javier Huanca
Bt_FlechaSup = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaSup, command=irAdelante)
162 12 Javier Huanca
Bt_FlechaSup.place(x=150,y=100)
163 12 Javier Huanca
Bt_FlechaSup.bind('<ButtonRelease-1>', soltar)
164 12 Javier Huanca
#Boton Flecha Derecha
165 12 Javier Huanca
Bt_FlechaDer = Button(root, image=imgFlechaDer, command=irDerecha)
166 12 Javier Huanca
Bt_FlechaDer.place(x=250,y=190)
167 12 Javier Huanca
#Boton Flecha Inferior
168 12 Javier Huanca
Bt_FlechaInf = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaInf, command=irAtras)
169 12 Javier Huanca
Bt_FlechaInf.place(x=150,y=280)
170 12 Javier Huanca
Bt_FlechaInf.bind('<ButtonRelease-1>', soltar)
171 12 Javier Huanca
172 12 Javier Huanca
#Boton Apagado
173 12 Javier Huanca
Bt_Apagar = Button(root, image=imgApagar, command=root.destroy).place(x=440,y=370)
174 12 Javier Huanca
175 12 Javier Huanca
#Boton Lanzar
176 12 Javier Huanca
Bt_Lanzar = Button(root, image=imgLanzar, bg = "darkred", command=inicioLanzar)
177 12 Javier Huanca
Bt_Lanzar.place(x=670, y=160)
178 12 Javier Huanca
179 12 Javier Huanca
#Boton Conectar
180 12 Javier Huanca
button_connect = tk.Button(root, text="Conectar", command= lambda: {conectar(ev3_ip)}, font=("Arial",12)).place(x=440,y=90)
181 12 Javier Huanca
182 12 Javier Huanca
if len(sys.argv) > 2:
183 12 Javier Huanca
    print("usage:client-laptop,py [IP-addr-of-robot]")
184 12 Javier Huanca
    sys.exit(1)
185 12 Javier Huanca
186 12 Javier Huanca
elif len(sys.argv) == 2:
187 12 Javier Huanca
    ipAddress = sys.argv[1]
188 12 Javier Huanca
    print("using specified IP address: {}".format(ipAddress))
189 12 Javier Huanca
190 12 Javier Huanca
else:
191 12 Javier Huanca
    print("using default IP address: {}".format(ev3_ip))
192 12 Javier Huanca
    
193 12 Javier Huanca
clientSocket = socket.socket()
194 12 Javier Huanca
port = 2222
195 12 Javier Huanca
196 12 Javier Huanca
root.mainloop()
197 37 Javier Huanca
</code></pre>