DRIVER CONTROLLER SCHEDA PER MOTORI BRUSHLESS CON SENSORE HALL
CARATTERISTICHE Tensione di alimentazione: – scheda: 5 Vdc – motore: da 5 a 36 Vdc Corrente motore max. : 16 A Potenza max: 350 watt Regolazione della velocità: da 0-100% Protezione: sovracorrente Controllo inversione di fase: sì Collegamenti: MA/MB/MC: alle fasi del motore 5V e GND: alimentazione della scheda 5 VDC VCC e GND: alimentazione principale del motore da collegare a un alimentatore esterno Connettore tre pin 5V/VR (0-5V)/GND: al potenziometro esterno da 10 kohm incluso PWM input: per la regolazione della velocità (se si utilizza l’ingresso PWM è necessario scollegare il potenziometro da VR) Ha/Hb/Hc/+5V/GND: ingresso alimentazione e sensore Hall SC( pin su scheda): uscita segnale impulsi di velocità Dimensioni: 63x45x29 mm
Scriverò un vademecum molto sintetico su come si può produrre un’estensione per l’ambiente di sviluppo di Visual Studio (2019), nonché per SQL Server Management Studio, entrambi basati sulla stessa infrastruttura di base.
Utilizzerò per lo sviluppo dell’estensione Visual Studio 2019 e cerchcerò di aggiornare l’interfaccia di SQL Management Studio versione 18.
In Visual Studio è necessario creare un nuovo progetto di tipo “Extensibility“.
Una volta all’interno del progetto è necessario disinstallare l’SDK 16 di Microsoft.VisualStudio.dll in quanto il management di SQL è implementato ancora con la vecchia interfaccia di Visual Studio 2017.
Per farlo si può andare nel menu strumenti e cliccare sugli strumenti nuget:
Nella maschera che si apre ci si dovrà assicurare di avere la versione 15:
In caso negativo si potrà installare al posto della 16.
A questo punto il compilatore è a posto e si può procedere con la creazione di un comando (nuova voce di menu). Per farlo è sufficiente selezionare il progetto e cliccare su Aggiungi nuovo elemento.
Nel menu scegliere Extensibility e successivamente Custom Command.
Il template genererà un insieme di classi, tra cui command1.cs, all’interno del quale vi è un metodo “Execute” che contiene il codice che verrà eseguito quando verrà selezionata la voce di menu:
private void Execute(object sender, EventArgs e)
{
ThreadHelper.ThrowIfNotOnUIThread();
string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName);
string title = "Command1";
// Show a message box to prove we were here
VsShellUtilities.ShowMessageBox(
this.package,
message,
title,
OLEMSGICON.OLEMSGICON_INFO,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
}
In questo caso verrà semplicemente visualizzato un messaggio usando il metodo ShowMessageBox del framework.
Il menu all’interno del quale si presenta la nuova voce è indicato nel file che ha estensione .vsct, in particolare nel punto:
il valore dell’id=”IDM_VS_MENU_TOOLS” indica al sistema che il parent della nuova voce di menu sarà il menu “Strumenti” dell’applicativo.
Prima di eseguire il debug della nuova estensione si deve configurare quale sarà l’eseguibile oggetto della modifica. Per fare questo di deve accedere alla schermata delle properties del progetto e scegliere la scheda “Debug”. Qui va indicato il path dell’eseguibile di SQL Management Studio:
Se non si procede con questa operazione la nuova voce di menu verrà assegnata ad una nuova istanza dell’ambiente di Visual Studio stesso, consentendo di aggiungere funzionalità allo stesso ambiente.
Per completare la procedura è necessario indicare dove andranno rilasciati i file di installazione dell’estensione, selezionando la scheda VSIX; nel caso di SQL SERVER questa cartella si trova in C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions e andrà indicata nell’apposito spazio presente nella maschera:
Durante la compilazione, se dovesse presentarsi il messaggio d’errore
The VSIX manifest must contain element 'Prerequisites'
si dovranno aggiungere al file vsxmanifest le seguenti istruzioni:
Se ora si attiva il debug dell’applicazione, si dovrebbe aprire l’ambiente di SQL Studio con la nuova voce di menu nel menu strumenti. Ricordarsi di rieseguire il progetto di visual studio come amministratore, altrimenti il progetto non partirà.
Aggiunta del comando ad un menu contestuale
Per aggiungere il comando ad un altro menu dell’applicativo è necessario conoscerne il suo guid. Purtroppo gli id non sono ben documentati e quindi serve una scappatoia per determinarli a runtime.
Questo si può fare ed è ben documentato in questo link:
Tensorflow è un framework open source, realizzato da google, che viene utilizzato per il deep learning e che consente di implementare velocemente reti neurali di grande complessità.
Una delle caratteristiche che lo rende particolarmente diffuso è la sua capacità di utilizzare le schede grafiche Nvidia per il training delle reti, operazione molto gravosa anche per i moderni microprocessori.
Le operazioni di training possono essere multiplexate sui numerosi core presenti in una qualunque scheda grafica; infatti una scheda grafica può contenere migliaia di cores, che consentono di scalare i tempi di calcolo di qualche ordine di grandezza rispetto ai 4/8 cores di un comune microprocessore.
Normalmente Tensorflow viene implementato in Python. L’ambiente tipico è una macchina linux (ubuntu ?) su cui è molto facile installare i moduli richiesti per le elaborazioni.
Purtroppo l’utilizzo di Tensorflow all’interno di una virtual machine è limitato dal fatto che la virtual machine non consente l’accesso diretto alle risorse gpu della macchina ospite, di conseguenza non si possono utilizzare i moduli per l’elaborazione su scheda grafica. Pertanto il training in una macchine virtuale sarà sempre molto limitato.
Certo, si potrà sempre creare una seconda partizione sul disco fisso su cui installare in dual boot una macchina linux.
Questo comporta oneri che non sempre si giustificano, in termini di tempo di installazione, di spazio su disco, ecc. ecc. .
Esiste, tuttavia, una opportunità più semplice, per chi possiede una macchina windows: installare l’ambiente Tensorflow su windows e sfruttare le risorse della scheda grafica in maniera nativa.
Non ci si deve lasciar prendere dalla tentazione di installare la release di CUDA più recente in quanto Tensorflow è stato compilato per funzionare unicamente con la release 10.1.
Perciò è necessario accedere alle release legacy presenti nella pagina summenzionata e scaricare e installare la versione 10.1. Questa può essere installata anche sopra una precedente installazione di una versione più recente, senza problemi.
Ovviamente, per funzionare, Tensorflow necessita dell’ambiente python, quindi è necessario installare la release più recente della versione 3 dell’interprete Python, sulla relativa pagina python.org. Ricordarsi di installare anche l’ambiente pip, presente tra le opzioni.
Una volta installato Python, si può accedere al relativo ambiente da una finestra del dos, semplicemente scrivendo
python
Di qui si deve installare il modulo tensorflow
pip install tensorflow
e poi i datasets
pip install tensorflow-datasets
a questo punto si può verificare se funziona il tutto importando il relativo modulo
import tensorflow_datasets as tfds
Se il modulo CUDA è stato caricato correttamente non si dovrebbero presentare errori e il risultato dovrebbe essere il seguente:
I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll
Per programmare questa ottima schedina sono necessarie alcune precauzioni di base.
Dato che non sono presenti connettori usb, si rende indispensabile utilizzare un convertitore USB/UART, preferibilmente con la possibilità di scelta tra tensioni a 5V oppure a 3,3v.
Infatti, il modulo ESP32 necessita di una tensione di alimentazione a 5v, però accetta i comandi sui suoi terminali con tensioni a 3,3v. Questo vuol dire che se lo alimentassimo con un convertitore a 5v, si potrebbero bruciare i pin di ingresso del chip ftdi.
L’unica possibilità è utilizzare un modulo convertitore a 3,3v e una alimentazione separata dell’ESP32 a 5v, prelevata magari da un alimentatore per telefonini.
Il ponticello lo rende utilizzabile anche a 3,3v. Questo modulo va collegato all’ESP32-CAM unicamente con i terminali RX, TX, GND, rispettivamente ai piedini 10 (U0TXD), 11 (U0RXD), 2 (GND)
L’alimentazione va fornita al terminale 1 (5v) e 9 (GND) collegando i terminali di un piccolo alimentatore usb.
Dopo aver compilato il codice arduino, prima di caricarlo sulla scheda è necessario ponticellare il terminale 14 (GPIO0) verso massa e poi applicare il bottone di reset.
Successivamente al caricamento, se tutto sarà andato per il verso giusto, si dovrà fornire un altro reset (prima si dovrà rimuovere il ponticello del terminale 14) e visualizzare i parametri con cui è stato programmato collegando il monitor seriale con la velocità di 115200 baud.
Per la configurazione di Alphabot con Raspberry è preferibile adottare una modalità di accesso remoto, magari con openvnc.
Per utilizzarlo è necessario abilitarlo dal menu con
sudo raspi-config
Si deve scompattare la cartella compressa distribuita con Alphabot che ha la seguente struttura:
Arduino …
Raspberry
+ Alphabot
++mjpg-streamer
++python
++Web-Control
Le cose importanti si trovano dentro Web-Control, in particolare vi si trova il file main.py che contiene un semplice eseguibile che trasforma il raspberry in un server Web a tutti gli effetti.
Per farlo utilizza una libreria python che si chiama bottle. Si installa con:
pip install bottle
Successivamente sarà necessario dare i permessi di esecuzione (777) a mjpeg_streamer che si trova dentro mjpeg_streamer_experimental.
A questo punto è sufficiente eseguire
python main.py
Il server sarà raggiungibile all’indirizzo
http://192.168.xxx.xxx:8000
dal quale si potrà controllare il robot con dei semplici comandi direzionali. Lo streaming vero e proprio sarà disponibile alla porta 8080.
Ovviamente si potranno compilare anche in versione Release.
Prima di lanciare uno qualsiasi degli eseguibili generati è necessario impostare alcune variabili d’ambiente. E’ sufficiente eseguire il comando setupvars.bat che si trova in:
Dopo aver configurato OpenVino e scaricato tutte le dipendenze, incluso python3, per eseguire inferenze sui diversi modelli disponibili è necessario scaricare i modelli disponibili online.
Questo modelli sono file con estensione .xml e .bin e ve ne sono per ogni tipo di inferenza, come face detection, pose detection, car detection e così via.
Per scaricare questi documenti è necessario aprire una finestra del prompt e eseguire il comando: