from docx import Document
from docx.shared import Pt
# Crear documento
doc = Document()
doc.add_heading('Informe del Proyecto: Control de Servo desde Página Web con Raspberry Pi Pico W', 0)
# Objetivo General
doc.add_heading('Objetivo General', level=1)
doc.add_paragraph(
"Desarrollar una aplicación web que permita controlar un motor servo mediante una interfaz de usuario sencilla "
"(botones o barra deslizante), reemplazando un potenciómetro, e integrando una pantalla OLED SSD1306 para mostrar "
"información del sistema. Todo esto se debe simular correctamente en Wokwi."
)
# Componentes Utilizados
doc.add_heading('Componentes Utilizados', level=1)
componentes = [
("Raspberry Pi Pico W", "Microcontrolador con conectividad WiFi integrada."),
("Servo motor (SG90)", "Motor controlado por PWM, que gira entre 0° y 180°."),
("Pantalla OLED SSD1306", "Pantalla I2C de 128x64 píxeles para mostrar conexión y carátula."),
("Fuente externa (simulada)", "Alimentación independiente para el servo, conectada a VBUS y GND.")
]
table = doc.add_table(rows=1, cols=2)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Componente'
hdr_cells[1].text = 'Descripción'
for comp, desc in componentes:
row_cells = table.add_row().cells
row_cells[0].text = comp
row_cells[1].text = desc
# Descripción del Sistema
doc.add_heading('Descripción del Sistema', level=1)
doc.add_paragraph(
"El sistema consta de tres bloques principales:\n\n"
"1. Interfaz Web:\n"
"- Página HTML generada por el microcontrolador.\n"
"- Incluye un control deslizante (input range) para seleccionar un ángulo entre 0° y 180°.\n"
"- Al mover el control, se envía la nueva posición al servidor web embebido en el Pico W.\n\n"
"2. Control del Servo:\n"
"- El microcontrolador recibe el ángulo deseado vía HTTP GET.\n"
"- Convierte el ángulo a una señal PWM que posiciona el servo.\n\n"
"3. Pantalla OLED SSD1306:\n"
"- Al inicio muestra un mensaje de conexión a WiFi.\n"
"- Una vez conectado, despliega la IP asignada por la red.\n"
"- Esta información permite al usuario ingresar a la página desde el navegador."
)
# Funcionamiento del Servidor Web
doc.add_heading('Funcionamiento del Servidor Web', level=1)
doc.add_paragraph(
"El servidor HTTP escucha en el puerto 80.\n"
"- Al recibir una solicitud con GET /servo?angle=X, ajusta el servo al ángulo X.\n"
"- La interfaz no requiere recarga; utiliza fetch() para actualizar en tiempo real."
)
# Conexiones Eléctricas
doc.add_heading('Conexiones Eléctricas (Wokwi)', level=1)
conexiones = [
("Servo (PWM)", "GP15", "Control de señal PWM (frecuencia: 50Hz)"),
("Servo Vcc", "VBUS", "Simula fuente externa de 5V"),
("Servo GND", "GND", "Masa común con la Pico W"),
("OLED SDA", "GP0", "Canal de datos I2C"),
("OLED SCL", "GP1", "Canal de reloj I2C"),
("OLED VCC", "3.3V (3V3)", "Alimentación de la pantalla"),
("OLED GND", "GND", "Masa")
]
table = doc.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Componente'
hdr_cells[1].text = 'Pin Pico W'
hdr_cells[2].text = 'Detalles'
for comp, pin, detalle in conexiones:
row_cells = table.add_row().cells
row_cells[0].text = comp
row_cells[1].text = pin
row_cells[2].text = detalle
# Simulación en Wokwi
doc.add_heading('Simulación en Wokwi', level=1)
doc.add_paragraph(
"Se creó una simulación completa en la plataforma Wokwi que incluye:\n"
"- Raspberry Pi Pico W\n"
"- Pantalla OLED SSD1306\n"
"- Servo SG90\n"
"- Configuración diagram.json para conexiones\n\n"
"Nota: El control WiFi simulado en Wokwi funciona como red local, permitiendo pruebas completas del servidor web."
)
# Archivo del Código
doc.add_heading('Archivo del Código (MicroPython)', level=1)
doc.add_paragraph(
"- El código está completamente unificado.\n"
"- Incluye conexión a WiFi, control del PWM del servo y servidor web.\n"
"- Implementación directa de la pantalla SSD1306 con I2C."
)
# Resultados Obtenidos
doc.add_heading('Resultados Obtenidos', level=1)
doc.add_paragraph(
"- El sistema permite mover el servo a cualquier ángulo entre 0° y 180° desde un navegador web.\n"
"- El servo responde en tiempo real sin reiniciar la página.\n"
"- La pantalla OLED muestra correctamente el estado de conexión y la dirección IP.\n"
"- El diseño es limpio, claro y funcional."
)
# Posibles Mejoras Futuras
doc.add_heading('Posibles Mejoras Futuras', level=1)
doc.add_paragraph(
"- Mostrar el ángulo actual también en la pantalla OLED.\n"
"- Implementar una interfaz gráfica más amigable (con íconos o animaciones).\n"
"- Añadir seguridad básica (autenticación).\n"
"- Guardar el último ángulo en memoria (EEPROM) en caso de reinicio."
)
# Conclusión
doc.add_heading('Conclusión', level=1)
doc.add_paragraph(
"Este proyecto integra de manera efectiva el control de hardware desde una aplicación web, usando herramientas "
"modernas como MicroPython y Wokwi. Se logra reemplazar el uso de un potenciómetro por una interfaz gráfica que "
"facilita el control del servo, siendo útil para prototipos de sistemas mecatrónicos interactivos o IoT."
)
# Guardar el documento
doc_path = "/mnt/data/Informe_Control_Servo_Web_PicoW.docx"
doc.save(doc_path)
doc_path