Realizzare un robot

Era il mio sogno quando ero bambino, costruire un robot, non avrei pensato che 40 anni dopo avrei avuto i mezzi per realizzarlo.

Ho intenzione di costruire i vari pezzi con la stampante 3D, mettere nel robot un nodemcu (probabilmente ESP8266 con micropython) e usare il computer per il controllo manuale a magari un programma di machine learning per gestire automaticamente il movimento.

Come sempre cominciamo a risolvere un problema per volta. Il robot lo sto facendo volontariamente stupido (per ora), avrà le capacità di muoversi con zampe tipo ragno e sarà dotato di sensori.

Comunicazioni TCP

Prima fase, fare comunicare un microcontrollore Esp8266 con un computer, in pratica sul robot ci sarà un server tcp che attende le connessioni, il computer si connetterà periodicamente mandando una richiesta, il robot eseguirà la richiesta e darà una risposta.

La richiesta può essere un ordine di movimento per le zampe o un ordine di lettura per un sensore, la risposta sarà un conferma del movimento o il valore del sensore. Al momento non prevedo altri tipi di comunicazione ma il sistema resto aperto a tutto.

Vediamo subito il codice per il server in micropython

import network
import socket

def connetti_rete():
  rete = network.WLAN(network.STA_IF)
  rete.disconnect()
  if not rete.isconnected():
    print('connessione in corso...')
    rete.active(True)
    rete.connect('nomerete', 'sssssssssssssssss')
    while not rete.isconnected():
      pass
  print('connesso alla rete:', rete.ifconfig())
  
connetti_rete()  
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 50000))
server.listen(1)
while 1:
  connessione, indirizzo = server.accept()
  data = connessione.recv(1024)
  print(data)
  connessione.sendall('risposta')
  connessione.close()

I print che vedete servono solo in fase di test e possono restare anche una volta terminata la fase. Il codice è molto semplice, il microcontrollore si collega alla rete wifi e si mette in ascolto, ogni volta che riceve una domanda manda la risposta. Naturalmente il codice va completato con le istruzioni di gestione dei motori e dei sensori, lo vedremo più avanti.

Il programma che gira sul computer invece è un client TCP, quando serve si collega al robot, gli da un ordine e riceve la risposta. Considerando che con il tempo il programma diventerà più complesso e dovrà gestire parecchie informazioni, ho utilizzato la libreria TKINTER per realizzare un programma con interfaccia grafica che utilizza bottoni e vari controlli a cui siamo abituati. Questo è il codice in python:

import tkinter as tk
from tkinter import messagebox
import traceback
import socket

def connetti():
    HOST = testo.get()
    PORT = 50000
    try:
        s = socket.socket()
        s.connect((HOST, PORT))
        print(s)
        s.sendall(b'domanda')
        dati = s.recv(1024)
        print('risposta ricevuta:', repr(dati))
        s.close()
    except Exception:
        traceback.print_exc()
        print("problema di connessione, riprova")

finestra = tk.Tk()
finestra.geometry('600x900')
pannello1 = tk.Frame(finestra, bg="yellow", width=350, height=200)
pannello1.place(x=10,y=10)
etichetta = tk.Label(pannello1, text = "IP del ragno", bg="yellow")
etichetta.config(font=("Courier", 10))
etichetta.pack()
etichetta.place(x=10,y=10)
testo = tk.Entry(pannello1)
testo.config(font =("Courier", 10))
testo.pack()
testo.place(x=140,y=10)
bottone1 = tk.Button(pannello1, text="Collegati", command=connetti)
bottone1.pack()
bottone1.place(x=280,y=10)
bottone2 = tk.Button(finestra, text="Fine programma",command=finestra.destroy)
bottone2.pack()
bottone2.place(x=480,y=10)
testo.insert(tk.END,"192.168.1.91")

finestra.mainloop()

Fate partire il server e attendete che sia connesso, poi fate partire l’applicazione sul pc, aggiustate l’indirizzo ip nel campo se diverso e cliccate su connetti. L’applicazione sul pc visualizza la risposta del ESP8266 mentre quest’ultimo visualizza la domanda dell’applicazione.

Io utilizzo sul pc il programma PyCharm che potete scaricare da QUI (la versione community è free), mentre per le fasi di test programmazione del microcontrollore utilizzo upycraft che potete scaricare da QUI da GitHub.

Il progetto continua nel prossimo articolo, vedremo come collegare dei motori sg90 al ESP8266, utilizzeremo due motori per ogni zampa, otto in totale.

Maurizio

Lascia un commento