Convertire file gerber in gcode

Da qualche tempo sto realizzando un progetto per disegnare il circuito stampato direttamente su basetta ramata.

A differenza di quello che si fa normalmente con una cnc questo consente di realizzare il pcb con il metodo classico, saltando però il complicato passaggio del bromografo e delle problematiche legate all’impressione con gli UV e l’incisione del photoresist.

In pratica si disegna direttamente sul rame e poi si passa all’incisione con il cloruro ferrico.

Per farlo si può utilizzare questo comodissimo tool che si trova su github che crea un file gcode a partire dal disegno gerber delle tracce dello stampato.

L’applicazione si trova al seguente link github:

GerberToGcode

Esiste anche una mia versione perfezionata al seguente indirizzo github:

GerberToGcode di Paride Zavoli

Visualizzazione percorsi gcode online

Esiste un ottimo sito online che consente la visualizzazione dei percorsi contenuti all’interno di un file gcode.
Il link è il seguente:

p.gcode – NCViewer

E’ sufficiente copiare e incollare un testo gcode oppure trasferire un file gcode e l’interfaccia farà immediatamente vedere il percorso della fresa (o della penna nel mio caso).

Tutto realizzato in Javascript sul browser.

Comodissimo e consigliatissimo.

Accedere come Admininistrator in windows 11 Home

Se si possiede Windows in versione Home alcune funzionalità sono limitate.
In particolare, si potrebbe trovare qualche difficoltà a rimuovere, per esempio l’antivirus installato di default con l’acquisto della macchina.

Nel mio caso specifico, avendo acquistato un ASUS Zenbook 14 con processore Intel Ultra 7 255H, ho trovato preinstallato la suite di antivirus McAfee.

Durante l’update di tutti gli aggiornamenti del sistema iniziali e di tutti i drivers della macchina, il sistema operativo è andato in tilt: non rispondeva più ai click del mouse, e tutto era estremamente lento.

Analizzando il registro attività sembrava che il problema fosse dovuto all’invasività dell’antivirus, pertanto ho tentato, inutilmente, la sua disinstallazione.

Disinstallazione non riuscita in quanto il bottone “Disinstalla” presente nella maschera “Installazione Applicazioni” non funzionava.

In questi casi è necessario operare come amministratore ma questa modalità è disabilitata di default nell’ambiente Home di Windows.

La si può attivare lanciando il prompt dei comandi (selezionando “Esegui come amministratore”) ed inserendo il seguente comando:

net user administrator /active:yes

A quel punto è sufficiente disconnettere l’utente corrente e magicamente comparirà il bottone per accedere con il ruolo da “Amministratore” nella maschera di logon di Windows. L’accesso iniziale sarà un po’ più lungo del normale.

Questa modalità non prevede l’inserimento di alcuna password e consente una rapida disinstallazione delle applicazioni più tenaci, come McAfee.

Al termine, se necessario si può disabilitare la modalità “Administrator” lanciando il prompt dei comandi:

net user administrator /active:no

C++ creare un array di oggetti usando std::vector

Creare array di oggetti in c++ crea sempre qualche problema nella gestione della memoria e nella chiamata ai costruttori.

Infatti una definizione del tipo

Oggetto array[100];

creerà un array di puntatori a 100 oggetti del tipo Oggetto richiamando per ciascuno di essi il costruttore senza parametri. Questo non è sempre corretto. Un’alternativa sarebbe definire l’array come array di puntatori, come di seguito:

Oggetto *array[100]

Questa istruzione creerà un array di puntatori a aree di memoria non inizializzate con nessun oggetto. Con un ciclo si dovranno poi costruire gli oggetti a uno a uno.

Questo schema prevede una gestione della memoria manuale, con il rischio di leak di memoria.

Le nuove specifiche richiedono di utilizzare i contenitori standard, in particolare std::vector. Questo contenitore richiede un po’ di gestione in più, con i relativi costruttori di copie e gli operatori move.

Ovviamente si potrà usare un’istruzione del tipo:

std::vector<Oggetto> array;

creando poi i vari oggetti a uno a uno. In alternativa si può usare un contenitore di puntatori, facendo attenzione che siano puntatori smart.

Suggerimenti per evitare in modo sicuro perdite di memoria

Piuttosto che utilizzare un std::vector di puntatori nudi, utilizzare una raccolta di oggetti std::unique_ptr:
//THIS CREATES VECTOR
std::vector<std::unique_ptr<combustion_car>> combustion_car_list;

  1. Creare l’oggetto temporaneo utilizzando una chiamata a std::make_unique e trasferirne la proprietà al contenitore utilizzando std::move:
    //THIS IS CREATING AND PUSHING THE OBJECT
    std::unique_ptr<combustion_car> temporary=std::make_unique<combustion_car>(); temporary->create();
    combustion_car_list.push_back(std::move(temporary));
    std::cout<<"Object added"<<std::endl;
  2. Rimuovere l’elemento in combustion_car_list[choice] (choice-1 non è corretto, ma anche pericoloso perché potrebbe produrre un valore dell’iteratore che è precedente )
    combustion_car_list.begin();
    //THIS DELETES OBJECT FROM VECTOR combustion_car_list.erase(combustion_car_list.begin() + choice);

Programmare Raspberry PI Pico con Arduino IDE

La programmazione di Raspberry pico può essere fatta dall’IDE arduino.

Per farlo è necessario predisporre il modulo nella modalità bootloader. Infatti, di default il modulo è predisposto per funzionare con python e quindi va resettato.

Per farlo è sufficiente tenere premuto il pulsante bootloader mentre si fornisce alimentazione e così facendo si aprirà una scheda di risorse del computer con il contenuto della memoria del raspberry.

Per fare l’upload del codice è necessario selezionare la porta che incomincia con u2f. Non va scelta la porta com4.