Project

General

Profile

Código e implementación » History » Version 11

Esteban Gutierrez, 12/26/2023 10:10 PM

1 2 Esteban Gutierrez
h1. ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤWikipedia
2 2 Esteban Gutierrez
3 4 Esteban Gutierrez
{{thumbnail(LogoPASCALITO.png, size=180, title=Thumbnail)}}
4 2 Esteban Gutierrez
5 2 Esteban Gutierrez
----
6 2 Esteban Gutierrez
7 2 Esteban Gutierrez
+*Grupo 3B:*+
8 2 Esteban Gutierrez
> Integrantes: Denis Condori, Ignacio Gallardo, Esteban Gutierrez, Fernando Klinger, Martin Salinas
9 2 Esteban Gutierrez
> Nombre del Producto: PASCALITO
10 2 Esteban Gutierrez
> Modulo: Proyecto I
11 2 Esteban Gutierrez
> Docente: Humberto Urrutia
12 7 Esteban Gutierrez
> Fecha de Inicio: 2023-08-15
13 7 Esteban Gutierrez
> Fecha de Termino: 2023-12-29
14 2 Esteban Gutierrez
15 2 Esteban Gutierrez
----
16 2 Esteban Gutierrez
17 2 Esteban Gutierrez
18 2 Esteban Gutierrez
19 2 Esteban Gutierrez
*ㅤㅤㅤㅤㅤㅤㅤÍndice:*
20 2 Esteban Gutierrez
* [[Introducción]]
21 6 Esteban Gutierrez
* [[Objetivos]]
22 2 Esteban Gutierrez
* [[Organización y planificación]]
23 2 Esteban Gutierrez
* [[Análisis y diseño]]
24 2 Esteban Gutierrez
* [[Código e implementación]]
25 2 Esteban Gutierrez
26 2 Esteban Gutierrez
---
27 2 Esteban Gutierrez
28 1 Esteban Gutierrez
h1. Código e implementación
29 1 Esteban Gutierrez
30 2 Esteban Gutierrez
---
31 5 Esteban Gutierrez
32 11 Esteban Gutierrez
h2. Funciones
33 1 Esteban Gutierrez
34 11 Esteban Gutierrez
{{collapse(Código de las funciones: )
35 11 Esteban Gutierrez
<pre><code class="python"> 
36 11 Esteban Gutierrez
#!/usr/bin/env python3
37 11 Esteban Gutierrez
from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedPercent, MoveTank
38 11 Esteban Gutierrez
from ev3dev2.sensor import INPUT_1
39 11 Esteban Gutierrez
from ev3dev2.sensor .lego import UltrasonicSensor
40 11 Esteban Gutierrez
from ev3dev2.sound import Sound
41 11 Esteban Gutierrez
from ev3dev2.led import Leds
42 11 Esteban Gutierrez
43 11 Esteban Gutierrez
motor_angle= LargeMotor(OUTPUT_A)
44 11 Esteban Gutierrez
cannon = MediumMotor(OUTPUT_D)
45 11 Esteban Gutierrez
sonido = Sound()
46 11 Esteban Gutierrez
sensor = UltrasonicSensor(INPUT_1)
47 11 Esteban Gutierrez
sensor.mode = "US-DIST-CM"
48 11 Esteban Gutierrez
tankmoves = MoveTank(OUTPUT_B,OUTPUT_C)
49 11 Esteban Gutierrez
50 11 Esteban Gutierrez
def moveUp():
51 11 Esteban Gutierrez
    print("Moving up...")
52 11 Esteban Gutierrez
    tankmoves.on(SpeedPercent(100),SpeedPercent(100))
53 11 Esteban Gutierrez
def moveDown():
54 11 Esteban Gutierrez
    print("Moving down...")
55 11 Esteban Gutierrez
    tankmoves.on(SpeedPercent(-100),SpeedPercent(-100))
56 11 Esteban Gutierrez
def moveRight():
57 11 Esteban Gutierrez
    print("Moving right...")
58 11 Esteban Gutierrez
    tankmoves.on(SpeedPercent(100),SpeedPercent(-100))
59 11 Esteban Gutierrez
def moveLeft():
60 11 Esteban Gutierrez
    print("Moving left...")
61 11 Esteban Gutierrez
    tankmoves.on(SpeedPercent(-100),SpeedPercent(100))
62 11 Esteban Gutierrez
63 11 Esteban Gutierrez
def Stop():
64 11 Esteban Gutierrez
    tankmoves.stop()
65 11 Esteban Gutierrez
66 11 Esteban Gutierrez
</code></pre>
67 11 Esteban Gutierrez
}} 
68 11 Esteban Gutierrez
69 11 Esteban Gutierrez
70 11 Esteban Gutierrez
h2. Servidor
71 11 Esteban Gutierrez
72 11 Esteban Gutierrez
{{collapse(Código del servidor: )
73 11 Esteban Gutierrez
<pre><code class="python"> 
74 11 Esteban Gutierrez
import socket
75 11 Esteban Gutierrez
from ev3dev2.motor import MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, SpeedPercent, MoveTank
76 11 Esteban Gutierrez
77 11 Esteban Gutierrez
tankmoves = MoveTank(OUTPUT_B,OUTPUT_C)
78 11 Esteban Gutierrez
brazo = MediumMotor(OUTPUT_A)
79 11 Esteban Gutierrez
80 11 Esteban Gutierrez
ip_host = input("Ingrese la ip que muestra el robot: ")
81 11 Esteban Gutierrez
host = ip_host
82 11 Esteban Gutierrez
port = 8000
83 11 Esteban Gutierrez
server = socket.socket()
84 11 Esteban Gutierrez
server.bind((host, port))
85 11 Esteban Gutierrez
server.listen(5)
86 11 Esteban Gutierrez
conexion, addr = server.accept()
87 11 Esteban Gutierrez
print("Nueva conexion establecida")
88 11 Esteban Gutierrez
print("conectado a ", addr)
89 11 Esteban Gutierrez
90 11 Esteban Gutierrez
running = True
91 11 Esteban Gutierrez
92 11 Esteban Gutierrez
while running:
93 11 Esteban Gutierrez
    mensaje = conexion.recv(1024).decode("utf-8")
94 11 Esteban Gutierrez
    print(mensaje)
95 11 Esteban Gutierrez
    if mensaje == 'arriba':
96 11 Esteban Gutierrez
        tankmoves.on(SpeedPercent(10), SpeedPercent(10))
97 11 Esteban Gutierrez
    elif mensaje == 'abajo':
98 11 Esteban Gutierrez
        tankmoves.on(SpeedPercent(-10), SpeedPercent(-10))
99 11 Esteban Gutierrez
    elif mensaje == 'izquierda':
100 11 Esteban Gutierrez
        tankmoves.on(SpeedPercent(20), SpeedPercent(-20))
101 11 Esteban Gutierrez
    elif mensaje == 'derecha':
102 11 Esteban Gutierrez
        tankmoves.on(SpeedPercent(-20), SpeedPercent(20))
103 11 Esteban Gutierrez
    elif mensaje == 'detener':
104 11 Esteban Gutierrez
        tankmoves.on(SpeedPercent(0), SpeedPercent(0))
105 11 Esteban Gutierrez
    elif mensaje == 'apagar':
106 11 Esteban Gutierrez
        running = False
107 11 Esteban Gutierrez
        conexion.close()
108 11 Esteban Gutierrez
        print("La conexion termino!")
109 11 Esteban Gutierrez
    elif mensaje == 'golpear':
110 11 Esteban Gutierrez
        brazo.on_for_degrees(SpeedPercent(30), 45)
111 11 Esteban Gutierrez
        brazo.on_for_degrees(SpeedPercent(100), -95)
112 11 Esteban Gutierrez
113 11 Esteban Gutierrez
114 11 Esteban Gutierrez
115 11 Esteban Gutierrez
</code></pre>
116 11 Esteban Gutierrez
}} 
117 11 Esteban Gutierrez
118 11 Esteban Gutierrez
h2. Interfaz Gráfica
119 11 Esteban Gutierrez
120 11 Esteban Gutierrez
{{collapse(Código interfaz gráfica: )
121 8 Esteban Gutierrez
<pre><code class="python"> 
122 8 Esteban Gutierrez
import tkinter as tk
123 8 Esteban Gutierrez
import socket
124 1 Esteban Gutierrez
125 8 Esteban Gutierrez
def mover(direccion):
126 8 Esteban Gutierrez
    global mi_socket
127 8 Esteban Gutierrez
    if direccion == "arriba":
128 8 Esteban Gutierrez
        mi_socket.send("arriba".encode("utf-8"))
129 8 Esteban Gutierrez
    elif direccion == "abajo":
130 8 Esteban Gutierrez
        mi_socket.send("abajo".encode("utf-8"))
131 8 Esteban Gutierrez
    elif direccion == "izquierda":
132 8 Esteban Gutierrez
        mi_socket.send("izquierda".encode("utf-8"))
133 8 Esteban Gutierrez
    elif direccion == "derecha":
134 8 Esteban Gutierrez
        mi_socket.send("derecha".encode("utf-8"))
135 1 Esteban Gutierrez
136 8 Esteban Gutierrez
def conectar():
137 8 Esteban Gutierrez
    global mi_socket
138 8 Esteban Gutierrez
    # Función para manejar la conexión con la dirección IP ingresada
139 8 Esteban Gutierrez
    ip = entrada_ip.get()
140 8 Esteban Gutierrez
    host = str(ip)
141 8 Esteban Gutierrez
    port = 8000
142 8 Esteban Gutierrez
    mi_socket = socket.socket()
143 8 Esteban Gutierrez
    mi_socket.connect((host, port))
144 8 Esteban Gutierrez
145 8 Esteban Gutierrez
def detener():
146 8 Esteban Gutierrez
    global mi_socket
147 8 Esteban Gutierrez
    mi_socket.send("detener".encode("utf-8"))
148 8 Esteban Gutierrez
149 8 Esteban Gutierrez
def apagar():
150 8 Esteban Gutierrez
    global mi_socket
151 8 Esteban Gutierrez
    mi_socket.send("apagar".encode("utf-8"))
152 8 Esteban Gutierrez
153 8 Esteban Gutierrez
def disparar():
154 8 Esteban Gutierrez
    global mi_socket
155 8 Esteban Gutierrez
    mi_socket.send("disparar".encode("utf-8"))
156 8 Esteban Gutierrez
157 8 Esteban Gutierrez
# Crear la ventana principal
158 8 Esteban Gutierrez
ventana = tk.Tk()
159 8 Esteban Gutierrez
ventana.title("Interfaz gráfica de PASCALITO")
160 8 Esteban Gutierrez
ventana.geometry("900x600")
161 8 Esteban Gutierrez
ventana.config(bg="grey85")
162 8 Esteban Gutierrez
163 8 Esteban Gutierrez
# Etiqueta y entrada para la dirección IP
164 8 Esteban Gutierrez
etiqueta_ip = tk.Label(ventana, text="Dirección IP", font=("Arial",18,"bold"),bg="grey85")
165 8 Esteban Gutierrez
etiqueta_ip.place(x=100, y=50)
166 8 Esteban Gutierrez
167 8 Esteban Gutierrez
entrada_ip = tk.Entry(ventana, font=("bold",18))
168 8 Esteban Gutierrez
entrada_ip.place(x=250, y=50)
169 8 Esteban Gutierrez
170 8 Esteban Gutierrez
img_boton_conectar= tk.PhotoImage(file="connect.png")
171 8 Esteban Gutierrez
boton_conectar = tk.Button(ventana, text="Conectar",image=img_boton_conectar,bg="grey85", command=conectar)
172 8 Esteban Gutierrez
boton_conectar.place(x=250, y=100)
173 8 Esteban Gutierrez
174 8 Esteban Gutierrez
img_boton_desconectar= tk.PhotoImage(file="disconnect.png")
175 8 Esteban Gutierrez
boton_desconectar = tk.Button(ventana, text="Desconectar",image=img_boton_desconectar,bg="grey85", command=apagar)
176 8 Esteban Gutierrez
boton_desconectar.place(x=420, y=100)
177 8 Esteban Gutierrez
178 8 Esteban Gutierrez
179 8 Esteban Gutierrez
# Botones de disparo y detener
180 8 Esteban Gutierrez
img_boton_45grados= tk.PhotoImage(file="45grados.png")
181 8 Esteban Gutierrez
boton_45grados= tk.Button(ventana, text="45°",image=img_boton_45grados ,bg="grey85",command=disparar)
182 8 Esteban Gutierrez
boton_45grados.place(x=400, y=280)
183 8 Esteban Gutierrez
184 8 Esteban Gutierrez
img_boton_60grados= tk.PhotoImage(file="60grados.png")
185 8 Esteban Gutierrez
boton_60grados= tk.Button(ventana, text="60°",image=img_boton_60grados ,bg="grey85",command=disparar)
186 8 Esteban Gutierrez
boton_60grados.place(x=550, y=200)
187 8 Esteban Gutierrez
188 8 Esteban Gutierrez
img_boton_90grados= tk.PhotoImage(file="90grados.png")
189 8 Esteban Gutierrez
boton_90grados= tk.Button(ventana, text="90°",image=img_boton_90grados ,bg="grey85",command=disparar)
190 8 Esteban Gutierrez
boton_90grados.place(x=700, y=280)
191 8 Esteban Gutierrez
192 8 Esteban Gutierrez
img_boton_disparar= tk.PhotoImage(file="shot.png")
193 8 Esteban Gutierrez
boton_disparar= tk.Button(ventana, text="Disparar",image=img_boton_disparar ,command=disparar)
194 8 Esteban Gutierrez
boton_disparar.place(x=540, y=300)
195 8 Esteban Gutierrez
196 8 Esteban Gutierrez
img_boton_stop= tk.PhotoImage(file="STOP.png")
197 8 Esteban Gutierrez
boton_detener = tk.Button(ventana, text="Detener",image=img_boton_stop,bg="grey85",command=detener)
198 8 Esteban Gutierrez
boton_detener.place(x=530, y=480)
199 8 Esteban Gutierrez
200 8 Esteban Gutierrez
201 8 Esteban Gutierrez
# Botones de movimiento
202 8 Esteban Gutierrez
img_boton_arriba = tk.PhotoImage(file="flecha-up1.png")
203 8 Esteban Gutierrez
boton_arriba = tk.Button(ventana, image=img_boton_arriba,bg="grey85",command=lambda: mover("arriba"))
204 8 Esteban Gutierrez
boton_arriba.place(x=145, y=240)
205 8 Esteban Gutierrez
206 8 Esteban Gutierrez
img_boton_izquierda = tk.PhotoImage(file="flecha-izquierda.png")
207 8 Esteban Gutierrez
boton_izquierda = tk.Button(ventana, text="Izquierda",image=img_boton_izquierda,bg="grey85" ,command=lambda: mover("izquierda"))
208 8 Esteban Gutierrez
boton_izquierda.place(x=25, y=315)
209 8 Esteban Gutierrez
210 8 Esteban Gutierrez
211 8 Esteban Gutierrez
img_boton_derecha = tk.PhotoImage(file="flecha-derecha.png")
212 8 Esteban Gutierrez
boton_derecha = tk.Button(ventana, text="Derecha",image=img_boton_derecha,bg="grey85", command=lambda: mover("derecha"))
213 8 Esteban Gutierrez
boton_derecha.place(x=240, y=315)
214 8 Esteban Gutierrez
215 8 Esteban Gutierrez
img_boton_abajo = tk.PhotoImage(file="flecha-abajo.png")
216 8 Esteban Gutierrez
boton_abajo = tk.Button(ventana, text="Abajo",image=img_boton_abajo,bg="grey85", command=lambda: mover("abajo"))
217 8 Esteban Gutierrez
boton_abajo.place(x=145, y=360)
218 8 Esteban Gutierrez
219 8 Esteban Gutierrez
220 8 Esteban Gutierrez
# Iniciar el bucle principal
221 8 Esteban Gutierrez
ventana.mainloop()
222 8 Esteban Gutierrez
223 8 Esteban Gutierrez
</code></pre>
224 8 Esteban Gutierrez
}} 
225 9 Esteban Gutierrez
226 9 Esteban Gutierrez
---
227 9 Esteban Gutierrez
228 9 Esteban Gutierrez
*Ficheros*