Project

General

Profile

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

Javier Huanca, 12/02/2024 10:55 PM

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