SE5 ECEAI/eceai 2024/2025/wijsman-lefranc

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche

Git du projet:

https://gitlab.univ-lille.fr/louis.wijsman.etu/projet-ia-wijsman-lefranc

Séance 1 (09 Sept 2024):

Expérience :

L'objectif de l'expérience est de différencier des essences de bois à partir du spectre d'absorption et du temps de propagation d'un choc dans le bois.

Maquette :

La maquette est constituée de deux capteurs piézoélectriques fixés à une distance \( L \) l'un de l'autre. Une petite masse guidée permet de générer des chocs avec une amplitude variable.

Expérience :

L'expérimentation se fera en faisant varier plusieurs paramètres :

  • Amplitude des chocs
  • Forme de la planche de bois
  • Épaisseur de la planche de bois

Cela permettra de discriminer l'essence du bois.

Séance 2

  • Configuration du Raspberry Pi en Wi-Fi pour permettre la liaison SSH.

Séance 3 (23 Septembre 2024)

  • Le Raspberry Pi peut maintenant communiquer en TCP avec notre serveur VM sur Capbreton.
  • Création du code pour l'acquisition des données via le microcontrôleur.

Communication entre le Raspberry Pi et le serveur (SE5-WIJSMAN-LEFRANC-IA)

VM sur Capbreton : SE5-WIJSMAN-LEFRANC-IA ('172.26.145.111').

Contient un script Python ~/tcp_server/tcp_server.py permettant de récupérer des données depuis le Raspberry Pi.

import socket

# Set up the server IP and port
SERVER_IP = '0.0.0.0'  # Listens on all interfaces
SERVER_PORT = 12345

# Create a TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the server IP and port
server_socket.bind((SERVER_IP, SERVER_PORT))

# Start listening for incoming connections
server_socket.listen(1)
print(f"Server listening on {SERVER_IP}:{SERVER_PORT}")

while True:
    # Accept a connection
    client_socket, client_address = server_socket.accept()
    print(f"Connection from {client_address}")

    # Receive the message from the client
    message = client_socket.recv(1024).decode('utf-8')
    print(f"Received message: {message}")

    # Optionally, send a response back to the client
    client_socket.send("Message received".encode('utf-8'))

    # Close the connection
    client_socket.close()

Raspbery pi:

Contient un script Python tcp_com/send_data.py qui permet d'envoyer des donees vers la VM

import socket
import json

def send_dict_to_server(server_ip, server_port, data_dict):
    try:
        # Serialize the dictionary to a JSON string
        json_data = json.dumps(data_dict)

        # Create a TCP socket
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # Connect to the server
        client_socket.connect((server_ip, server_port))
        print(f"Connected to server {server_ip}:{server_port}")

        # Send the JSON data to the server
        client_socket.send(json_data.encode('utf-8'))
        print(f"Sent: {json_data}")

        # Receive and print the server's response
        response = client_socket.recv(1024).decode('utf-8')
        print(f"Server response: {response}")

    except Exception as e:
        print(f"Error: {e}")

    finally:
        # Close the connection
        client_socket.close()
        print("Connection closed.")

# Only run the following if this script is executed directly
if __name__ == "__main__":
    # Example dictionary to send
    data = {
        "name": "Raspberry Pi",
        "type": "client",
        "message": "Hello from the Pi!",
        "value": 3
    }

    # Call the function to send the dictionary to the server
    SERVER_IP = '172.26.145.111'  # VM's IP (SE5-WIJSMAN-LEFRANC-IA)
    SERVER_PORT = 12345            # The port the server is listening on
    send_dict_to_server(SERVER_IP, SERVER_PORT, data)



Système de Mesure

Pour effectuer les mesures, nous avons réalisé le montage suivant :

  • Un système de percussion par chute d'une masse le long d'un axe gradué.

Nous utilisons une graduation, car l'objectif est de réaliser des mesures variées en modifiant la force de l'impact (via la hauteur de chute).

En effet, si la hauteur de chute était constante, le modèle de machine learning risquerait d'apprendre uniquement à détecter les différences en fonction de l'intensité de l'impact. Cela le rendrait inutile, car notre objectif n'est pas de discriminer sur la base de la force d'impact, mais de différencier deux matériaux différents indépendamment de cette variable.


Un système de percussion par chute d'une masse le long d'un axe gradué
  • Un système de mesure avec des capteurs piézoélectriques.

Le système de mesure est équipé de plusieurs capteurs piézoélectriques, ce qui nous offre une plus grande flexibilité lors de l'entraînement du modèle.

Un système de mesure avec des capteurs piézoélectriques