Proyecto IA del IB: Detección de Objetos y Control de Arduino con Base de Datos

 

Proyecto IA del IB: Detección de Objetos y Control de Arduino con Base de Datos



Descripción del Proyecto

Este sistema utiliza Python y OpenCV para detectar un color u objeto específico mediante una cámara. Al detectar el objeto, se envía una señal a Arduino para activar un dispositivo, como un LED o un motor. Además, se registra en una base de datos SQLite cada vez que se detecta el objeto.

📌 Ejemplo de Aplicación:

  • Seguridad: Encender una alarma si se detecta un objeto sospechoso.

  • Industria: Activar una máquina si se detecta un producto específico en una cinta transportadora.


Criterio A: Análisis del Problema

Contexto y Problema

Las fábricas necesitan sistemas automatizados para identificar objetos en movimiento y activar mecanismos sin intervención humana. Actualmente, muchas empresas dependen de operadores humanos para tareas de clasificación, lo que puede generar errores y retrasos.

Objetivo del Proyecto

Diseñar un sistema que detecte objetos de un color específico, registre la detección en una base de datos SQLite y active un mecanismo físico mediante Arduino.


Criterio B: Diseño del Sistema

Diagrama de Flujo

[Inicio] --> Capturar imagen con cámara --> Procesar imagen con OpenCV 

  --> Detectar color/objeto --> Si se detecta, guardar en base de datos y activar Arduino

  --> Mostrar resultados en pantalla --> [Repetir]


Tecnologías Utilizadas

Python + OpenCV (procesamiento de imagen)
SQLite (base de datos para almacenar detecciones)
PySerial (comunicación con Arduino)
Arduino + LED o Servo (acción física tras detección)


Criterio C: Desarrollo del Producto

1. Configuración de la Base de Datos (SQLite)

import sqlite3


# Conectar a la base de datos

conn = sqlite3.connect('detecciones.db')

cursor = conn.cursor()


# Crear tabla si no existe

cursor.execute('''CREATE TABLE IF NOT EXISTS registros (

                    id INTEGER PRIMARY KEY AUTOINCREMENT,

                    objeto_detectado TEXT,

                    fecha_hora DATETIME DEFAULT CURRENT_TIMESTAMP

                )''')


conn.commit()

conn.close()



2. Código en Python (OpenCV + SQLite + Arduino)

import cv2

import serial

import sqlite3

import time

import numpy as np


# Configurar comunicación con Arduino (ajustar el puerto según corresponda)

arduino = serial.Serial('COM3', 9600)  # Cambia 'COM3' según tu sistema

time.sleep(2)  # Esperar conexión


# Conectar a la base de datos SQLite

def registrar_deteccion(objeto):

    conn = sqlite3.connect('detecciones.db')

    cursor = conn.cursor()

    cursor.execute("INSERT INTO registros (objeto_detectado) VALUES (?)", (objeto,))

    conn.commit()

    conn.close()


# Capturar video desde la cámara

cap = cv2.VideoCapture(0)


while True:

    ret, frame = cap.read()

    if not ret:

        break


    # Convertir a formato HSV

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)


    # Definir el rango de color a detectar (ejemplo: Rojo)

    lower_red = np.array([0, 120, 70])

    upper_red = np.array([10, 255, 255])

    mask = cv2.inRange(hsv, lower_red, upper_red)


    # Si hay suficiente área de detección, activar Arduino y guardar en la base de datos

    if np.sum(mask) > 50000:

        arduino.write(b'1')  # Enviar señal a Arduino

        registrar_deteccion("Objeto Rojo")

    else:

        arduino.write(b'0')  # Apagar el LED


    # Mostrar imagen en tiempo real

    cv2.imshow("Detección de Color", mask)


    # Salir con la tecla 'q'

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break


cap.release()

cv2.destroyAllWindows()

arduino.close()



3. Código en Arduino (Recibir Señal y Activar LED o Motor)

int ledPin = 13;  // LED conectado al pin 13


void setup() {

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);

}


void loop() {

  if (Serial.available() > 0) {

    char data = Serial.read();  // Leer datos de Python


    if (data == '1') {

      digitalWrite(ledPin, HIGH);  // Encender LED

    } else if (data == '0') {

      digitalWrite(ledPin, LOW);  // Apagar LED

    }

  }

}



Criterio D: Evaluación

Pruebas Realizadas

Prueba de detección de color: Se probó con objetos de diferentes colores y tamaños.
Registro en base de datos: Se verificó que cada detección se almacene correctamente.
Comunicación con Arduino: Se comprobó que el LED responde según la detección.


Conclusión

Este proyecto demuestra cómo Python, OpenCV y Arduino pueden integrarse para desarrollar un sistema de detección automatizado. Se aplicaron técnicas de procesamiento de imagen, manejo de bases de datos y control de hardware, lo que cumple con los requisitos del IA del IB en Ciencias de la Computación.


¿Por qué este proyecto es ideal para el IA del IB?

Interdisciplinario: Combina visión por computadora, bases de datos y hardware.
Uso de algoritmos avanzados: Aplica procesamiento de imagen y control de hardware.
Innovador y práctico: Tiene aplicaciones en seguridad, robótica e industria.
Cumple con el formato del IA: Incluye análisis, diseño, desarrollo y evaluación.



Desarrollo:

Voy a proporcionarte un paso a paso detallado para construir el proyecto, incluyendo la integración de una interfaz gráfica (GUI) con Tkinter para visualizar las detecciones en tiempo real y gestionar la base de datos.


🚀 Proyecto IA del IB: Detección de Objetos con OpenCV, Arduino y Base de Datos

Este proyecto permite detectar un objeto de color específico usando OpenCV, registrarlo en una base de datos SQLite y activar un dispositivo con Arduino. Además, incluye una interfaz gráfica (GUI) con Tkinter para visualizar las detecciones y consultar los registros guardados.


📌 Requisitos del Proyecto

Antes de empezar, asegúrate de tener instaladas las siguientes herramientas y bibliotecas.

1️⃣ Materiales Necesarios

  • Computadora con Python y OpenCV

  • Arduino (UNO, Mega, Nano, etc.)

  • LED o Servo Motor

  • Cámara Web o Raspberry Pi Camera

  • Cables de conexión

2️⃣ Instalación de Librerías en Python

Abre la terminal y ejecuta:

pip install opencv-python numpy pyserial sqlite3 tkinter



📖 Paso a Paso del Proyecto

🔹 Paso 1: Crear la Base de Datos SQLite

La base de datos registrará cada detección con la fecha y el tipo de objeto detectado.

📌 Código: database.py

import sqlite3


# Conectar a la base de datos o crearla si no existe

conn = sqlite3.connect('detecciones.db')

cursor = conn.cursor()


# Crear la tabla si no existe

cursor.execute('''CREATE TABLE IF NOT EXISTS registros (

                    id INTEGER PRIMARY KEY AUTOINCREMENT,

                    objeto_detectado TEXT,

                    fecha_hora DATETIME DEFAULT CURRENT_TIMESTAMP

                )''')


conn.commit()

conn.close()



🔹 Paso 2: Código en Python (Detección de Color, Arduino y Base de Datos)

📌 Código: detector.py

import cv2

import serial

import sqlite3

import time

import numpy as np


# Configuración de la conexión con Arduino

arduino = serial.Serial('COM3', 9600)  # Cambia 'COM3' según tu sistema

time.sleep(2)  # Esperar conexión


# Conectar a la base de datos

def registrar_deteccion(objeto):

    conn = sqlite3.connect('detecciones.db')

    cursor = conn.cursor()

    cursor.execute("INSERT INTO registros (objeto_detectado) VALUES (?)", (objeto,))

    conn.commit()

    conn.close()


# Captura de video

cap = cv2.VideoCapture(0)


while True:

    ret, frame = cap.read()

    if not ret:

        break


    # Convertir a formato HSV

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)


    # Definir el rango de color a detectar (Ejemplo: Rojo)

    lower_red = np.array([0, 120, 70])

    upper_red = np.array([10, 255, 255])

    mask = cv2.inRange(hsv, lower_red, upper_red)


    # Si se detecta suficiente rojo, activar Arduino y guardar en base de datos

    if np.sum(mask) > 50000:

        arduino.write(b'1')  # Enviar señal a Arduino

        registrar_deteccion("Objeto Rojo")

    else:

        arduino.write(b'0')  # Apagar LED


    # Mostrar imagen procesada

    cv2.imshow("Detección de Color", mask)


    # Salir con 'q'

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break


cap.release()

cv2.destroyAllWindows()

arduino.close()



🔹 Paso 3: Código en Arduino (Activar LED/Motor según la detección)

📌 Código: arduino.ino

int ledPin = 13;  // LED conectado al pin 13


void setup() {

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);

}


void loop() {

  if (Serial.available() > 0) {

    char data = Serial.read();  // Leer datos desde Python


    if (data == '1') {

      digitalWrite(ledPin, HIGH);  // Encender LED

    } else if (data == '0') {

      digitalWrite(ledPin, LOW);  // Apagar LED

    }

  }

}



🔹 Paso 4: Crear la Interfaz Gráfica (GUI) con Tkinter

📌 Código: gui.py

import tkinter as tk

from tkinter import ttk

import sqlite3


# Función para obtener los registros de la base de datos

def obtener_registros():

    conn = sqlite3.connect('detecciones.db')

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM registros ORDER BY fecha_hora DESC")

    registros = cursor.fetchall()

    conn.close()

    return registros


# Función para actualizar la tabla en la GUI

def actualizar_tabla():

    for row in tabla.get_children():

        tabla.delete(row)


    for registro in obtener_registros():

        tabla.insert("", "end", values=registro)


# Crear la ventana principal

root = tk.Tk()

root.title("Detecciones de Objetos")


# Crear la tabla

columnas = ("ID", "Objeto Detectado", "Fecha y Hora")

tabla = ttk.Treeview(root, columns=columnas, show="headings")


for col in columnas:

    tabla.heading(col, text=col)

    tabla.column(col, width=200)


tabla.pack(pady=20)


# Botón para actualizar la tabla

boton_actualizar = tk.Button(root, text="Actualizar", command=actualizar_tabla)

boton_actualizar.pack()


# Inicializar la tabla con los datos actuales

actualizar_tabla()


# Ejecutar la GUI

root.mainloop()



📌 Conclusión y Resultados

Detección de color con OpenCV en tiempo real.
Interacción con Arduino para encender o apagar un LED.
Almacenamiento en SQLite de cada detección con fecha y hora.
Interfaz gráfica (GUI) con Tkinter para visualizar los registros.


📌 Resumen del Proyecto IA del IB

1️⃣ Análisis (Criterio A)

  • Problema: Automatizar la detección de objetos en la industria o seguridad.

  • Objetivo: Crear un sistema que detecte colores, registre eventos y active un dispositivo.

2️⃣ Diseño (Criterio B)

  • Uso de OpenCV para procesamiento de imagen.

  • Base de datos SQLite para almacenamiento.

  • Tkinter para interfaz gráfica.

  • Arduino para el control de hardware.

3️⃣ Desarrollo (Criterio C)

  • Implementación del código en Python, SQLite y Arduino.

  • Pruebas de detección de color y comunicación serial.

4️⃣ Evaluación (Criterio D)

  • Se realizaron pruebas exitosas con distintos objetos.

  • La base de datos registra correctamente cada detección.

  • La interfaz gráfica permite visualizar registros en tiempo real.



Comments

Popular posts from this blog

Te cuento mi aventura como mestra IB de Design y STEM

Cómo enseñar a mover motores con Arduino (RECOMENDABLE PARA COLLEGIOS, GOOGLE REFERENCE SCHOOL QUE USEN CHROMEBOOKS!)

Python con Arduino + Interfaz