Il Power Bank 4000 3D model è un articolo in cui leggerai come ho progettato il case 3D del progetto.
Per la realizzazione di case come questo ti consiglio di utilizzare openScad un software di disegno 3D parametrico via codice open source,
Hai già visto in altri progetti 3D che ho pubblicato uso spesso questo cad 3D in quanto lo trovo davvero semplice e potente per la realizzazione di modelli 3D.
La sua specificità in progeddi come questo risiede nel fatto che puoi disegnare i modelli dei componenti che dovranno essere inseriti nel case 3D e successivamente “scavarli” virtualmente ( sottrarli ) al case stesso.
Andando con ordine il primo passo è il disegno dei componenti che hai a disposizione
Componenti del power bank 4000 3D model
Ecco i componenti che userai per il progetto:
come hai già letto nel precedente articolo dedicato al progetto sono:
- LiPo battery 3,7v 4000mAh
- LiPo charger BS301CV small powerbank
- Micro Usb breakout
- Multi Usb port ( USB tipo A, USB-C, micro usb )
- Power switch ( on/off )
- 3D printed case
analizziamo uno per uno i componenti che servono.
LiPo battery 3,7v 4000mAh
il codice per la realizzazione dell’ingombro della batteria è il seguente:
module battery4000() { dimX=49; dimY=16; dimZ=140; rotate([90,0,0]) hull() { cylinder(r=dimY/2,h=dimZ,center=true,$fn=96); translate([dimX/2-4,0,0]) cylinder(r=4,h=dimZ,center=true,$fn=96); translate([(dimX/2+4)/2,0,0]) cylinder(r=dimY-9,h=dimZ,center=true,$fn=96); translate([-dimX/2+4,0,0]) cylinder(r=4,h=dimZ,center=true,$fn=96); translate([-(dimX/2+4)/2,0,0]) cylinder(r=dimY-9,h=dimZ,center=true,$fn=96); } }
essendo un cad parametrico puoi modificare le dimensioni della batteria ( dimX, dimY, dimZ ) che hai ed adattare in questo modo il progetto ai tuoi componenti;
LiPo charger BS301CV small powerbank
Il lipo charger che ho selezionato è il seguente:
come hai letto nell’articolo dedicato al lipo charger svolge da solo sia la fase di carica sia quella di scarica e output a 5v 2.4Ah
Il codice degli ingombri del LiPo Charger è il seguente:
module LiPoCharger() { cube([25.5,16.5,3],center=true); translate([(25.5/2)-8.85,0,1.2]) cube([7.5,7.5,5],center=true); translate([-(25.5/2)+1.25,0,5.2]) cube([2.5,6.5,10],center=true); translate([-(25.5/2)+4.55,-(16.5/2)+2.3,2.5]) { cube([4.5,3.2,4.5],center=true); hull() { translate([0,-6,0]) rotate([90,0,0]) cylinder(r=1.4,h=10,center=true,$fn=96); translate([0,-6,-3]) rotate([90,0,0]) cylinder(r=1.4,h=10,center=true,$fn=96); } } if (print) translate([0,-6.25,3.5])cube([25.5,4,4.2],center=true); if (print) translate([0,6.25,3.5])cube([25.5,4,4.2],center=true); }
in cui ho tenuto conto delle tolleranze di ingombro in funzione della stampa 3D
Micro Usb breakout
anche per questa scheda ho scritto un apposito modulo in openscad:
module microUSB() { difference() { union() { cube([14.5,15.5,1.6],center=true); translate([0,10,2.1]) rotate([90,0,0]) hull() { translate([4,0,0]) cylinder(r=1.5,h=10,center=true,$fn=96); translate([-4,0,0]) cylinder(r=1.5,h=10,center=true,$fn=96); } } translate([4.85,-2.1,0]) cylinder(r=1.3,h=8,center=true,$fn=96); translate([-4.85,-2.1,0]) cylinder(r=1.3,h=8,center=true,$fn=96); } translate([0,-6.5,-1.5]) cube([14.5,2.5,1.6],center=true); }
in cui il connettore usb è più sporgente in modo che durante la fase di sottrazione lasci spazio a sufficienza per collegarci il connettore da cui eseguirai la carica.
Multi Usb port ( USB tipo A, USB-C, micro usb )
un componente come questo ti permette di avere, in modo semplice ed immediato, più porte USB in formati differenti che userai come output per connettere e caricare i dispositivi che collgherai.
Il codice che ti serve è il seguente:
module usbPorts() { difference() { union() { translate([0,0,5]) cube([33.5,21,8.5],center=true); translate([13,5,2.5]) hull() { translate([0,3,0]) rotate([0,90,0]) cylinder(r=3.5/2,h=60,center=true,$fn=96); translate([0,-3,0]) rotate([0,90,0]) cylinder(r=3.5/2,h=60,center=true,$fn=96); } } translate([14.95,-8.5,0]) cylinder(r=.7,h=25,center=true,$fn=96); translate([-14.95,-8.5,0]) cylinder(r=.7,h=25,center=true,$fn=96); } translate([0,12,5]) cube([15,30,8.5],center=true); }
anche in questo caso ho tenuto più ampi gli ingombri dei connettori che devono sporgere dal case.
Power switch ( on/off )
il power switch avrei potuto evitarlo a fronte della protezione, sleep mode, di cui il caricatore LiPo è dotato, tuttavia ho voluto mantenere questo componente per isolare la batteria dal circuito quando non usi il power bank.
il codice del componente è:
module powerSwitch() { if (print) { translate([0,0,2.3]) cube([8,5,6],center=true); difference() { hull() { translate([-5.25,0,-3]) cylinder(r=4.1,h=7.7,center=true,$fn=96); translate([5.25,0,-3]) cylinder(r=4.1,h=7.7,center=true,$fn=96); } translate([-5.45,0,0]) cylinder(r=1,h=15,center=true,$fn=96); translate([5.45,0,0]) cylinder(r=1,h=15,center=true,$fn=96); } } else { translate([0,0,2.3]) cube([8,5,6],center=true); difference() { hull() { translate([-5.25,0,0]) cylinder(r=4,h=1.7,center=true,$fn=96); translate([5.25,0,0]) cylinder(r=4,h=1.7,center=true,$fn=96); } translate([-5.45,0,0]) cylinder(r=1.25,h=5,center=true,$fn=96); translate([5.45,0,0]) cylinder(r=1.25,h=5,center=true,$fn=96); } } }
in cui l’unica parte sporgente riguarda lo switch vedo e proprio.
In ultimo è rimasta la parte non descritta nei precedenti articoli e che è oggetto di questo articolo, il case 3D.
3D printed case
Il power bank 4000 3D model non sarebbe completo se non avessi disegnato il modulo principale: il case di collegamento di tutte le parti:
il codice per disegnarle è:
// MAIN section1=true; section2=false; print=true; //TP4056(); //usbPorts(); //battery4000(); //LiPoCharger(); //microUSB(); //powerSwitch(); //incastri(1); //main(); module main() { difference() { hull() { hull() { translate([26.5,97,-6]) sphere(r=4,$fn=96); translate([-26.5,97,-6]) sphere(r=4,$fn=96); translate([26,-68,-6]) sphere(r=4,$fn=96); translate([-26.5,-68,-6]) sphere(r=4,$fn=96); } hull() { translate([26.5,97,6]) sphere(r=4,$fn=96); translate([-26.5,97,6]) sphere(r=4,$fn=96); translate([26,-68,6]) sphere(r=4,$fn=96); translate([-26.5,-68,6]) sphere(r=4,$fn=96); } } components(); translate([0.2,75,-1]) cube([40,15,7],center=true); if (section1) incastri(1.2); if (section1) translate([0,20,5]) cube([70,200,10],center=true); if (section2) translate([0,20,-5]) cube([70,200,10],center=true); } if (section2) incastri(1); } // MODULES module incastri( dim ) { hull() { translate([27.5,65,-1.5]) cylinder(r=dim,h=3,center=true,$fn=96); translate([27.5,-63,-1.5]) cylinder(r=dim,h=3,center=true,$fn=96); } hull() { translate([-27.5,65,-1.5]) cylinder(r=dim,h=3,center=true,$fn=96); translate([-27.5,-63,-1.5]) cylinder(r=dim,h=3,center=true,$fn=96); } translate([-8,96,-1.5]) cylinder(r=dim*1.3,h=3,center=true,$fn=96); } module components() { scale(1.03) translate([0,1.5,0]) battery4000(); translate([13,88,-6]) usbPorts(); translate([-22,85,-5]) rotate([0,0,90]) microUSB(); translate([-17,85,-2]) cube([24.5,15.5,6],center=true); translate([-21,86,.5]) rotate([0,0,-90]) LiPoCharger(); translate([10,79,7]) powerSwitch(); } module powerSwitch() { if (print) { translate([0,0,2.3]) cube([8,5,6],center=true); difference() { hull() { translate([-5.25,0,-3]) cylinder(r=4.1,h=7.7,center=true,$fn=96); translate([5.25,0,-3]) cylinder(r=4.1,h=7.7,center=true,$fn=96); } translate([-5.45,0,0]) cylinder(r=1,h=15,center=true,$fn=96); translate([5.45,0,0]) cylinder(r=1,h=15,center=true,$fn=96); } } else { translate([0,0,2.3]) cube([8,5,6],center=true); difference() { hull() { translate([-5.25,0,0]) cylinder(r=4,h=1.7,center=true,$fn=96); translate([5.25,0,0]) cylinder(r=4,h=1.7,center=true,$fn=96); } translate([-5.45,0,0]) cylinder(r=1.25,h=5,center=true,$fn=96); translate([5.45,0,0]) cylinder(r=1.25,h=5,center=true,$fn=96); } } } module microUSB() { difference() { union() { cube([14.5,15.5,1.6],center=true); translate([0,10,2.1]) rotate([90,0,0]) hull() { translate([4,0,0]) cylinder(r=1.5,h=10,center=true,$fn=96); translate([-4,0,0]) cylinder(r=1.5,h=10,center=true,$fn=96); } } translate([4.85,-2.1,0]) cylinder(r=1.3,h=8,center=true,$fn=96); translate([-4.85,-2.1,0]) cylinder(r=1.3,h=8,center=true,$fn=96); } translate([0,-6.5,-1.5]) cube([14.5,2.5,1.6],center=true); } module TP4056() { cube([17.5,28,3],center=true); translate([0,12,1.2]) cube([8,6,3],center=true); translate([7.5,6.75,3]) cylinder(r=1,h=6,center=true,$fn=96); translate([7.5,2.5,3]) cylinder(r=1,h=6,center=true,$fn=96); } module LiPoCharger() { cube([25.5,16.5,3],center=true); translate([(25.5/2)-8.85,0,1.2]) cube([7.5,7.5,5],center=true); translate([-(25.5/2)+1.25,0,5.2]) cube([2.5,6.5,10],center=true); translate([-(25.5/2)+4.55,-(16.5/2)+2.3,2.5]) { cube([4.5,3.2,4.5],center=true); hull() { translate([0,-6,0]) rotate([90,0,0]) cylinder(r=1.4,h=10,center=true,$fn=96); translate([0,-6,-3]) rotate([90,0,0]) cylinder(r=1.4,h=10,center=true,$fn=96); } } if (print) translate([0,-6.25,3.5])cube([25.5,4,4.2],center=true); if (print) translate([0,6.25,3.5])cube([25.5,4,4.2],center=true); } module usbPorts() { difference() { union() { translate([0,0,5]) cube([33.5,21,8.5],center=true); translate([13,5,2.5]) hull() { translate([0,3,0]) rotate([0,90,0]) cylinder(r=3.5/2,h=60,center=true,$fn=96); translate([0,-3,0]) rotate([0,90,0]) cylinder(r=3.5/2,h=60,center=true,$fn=96); } } translate([14.95,-8.5,0]) cylinder(r=.7,h=25,center=true,$fn=96); translate([-14.95,-8.5,0]) cylinder(r=.7,h=25,center=true,$fn=96); } translate([0,12,5]) cube([15,30,8.5],center=true); } module battery4000() { dimX=49; dimY=16; dimZ=140; rotate([90,0,0]) hull() { cylinder(r=dimY/2,h=dimZ,center=true,$fn=96); translate([dimX/2-4,0,0]) cylinder(r=4,h=dimZ,center=true,$fn=96); translate([(dimX/2+4)/2,0,0]) cylinder(r=dimY-9,h=dimZ,center=true,$fn=96); translate([-dimX/2+4,0,0]) cylinder(r=4,h=dimZ,center=true,$fn=96); translate([-(dimX/2+4)/2,0,0]) cylinder(r=dimY-9,h=dimZ,center=true,$fn=96); } }
in cui la funzione main() si occupa sia di disegnare il case vero e proprio sia includere e sottrarre i singoli moduli visti fino a questo punto.
Warning!
Nel codice è presente anche un modulo TP4056 componente che inizialmente doveva servire per la gestione dell’output e che poi è stato sostituito dal modulo Lipo Charger BS301CV.
Analizzando le prime linee dello sketch ci sono i parametri che puoi utilizzare per cambiare la visualizzazione del modello:
// MAIN section1=true; section2=false; print=true;
in cui mettendo a true o false i due primi parametri puoi visualizzare la sola parte superiore:
o inferiore del case:
per ottenerli ho riunito tutti i componenti interni un un modulo:
module components() { scale(1.03) translate([0,1.5,0]) battery4000(); translate([13,88,-6]) usbPorts(); translate([-22,85,-5]) rotate([0,0,90]) microUSB(); translate([-17,85,-2]) cube([24.5,15.5,6],center=true); translate([-21,86,.5]) rotate([0,0,-90]) LiPoCharger(); translate([10,79,7]) powerSwitch(); }
ognuno nella posizione esatta in cui deve essere collocato all’interno del power bank 4000 3D model e se li rendi semitrasparenti puoi vedere il risultato della sottrazione sia nella parte superiore:
sia per il lato inferiore:
Nei prossimi articoli leggerai come è costruito il circuito e come assemblare tutte le parti elettroniche nel case stampato in 3D.