Project

General

Profile

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

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