Power Bank 4000 3D model

Il Power Bank 4000 3D model è un articolo in cui leggerai come ho progettato il case 3D del progetto.

power bank 4000 3d model case

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:

power bank 4000 3D model components

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:

BS301CV small powerbank

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:

power bank 4000 3d model case

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.

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:

power bank 4000 3d model case top

o inferiore del case:

power bank 4000 3d model case bottom

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:

power bank 4000 3d model case bottom components

 

sia per il lato inferiore:

power bank 4000 3d model case top components

Nei prossimi articoli leggerai come è costruito il circuito e come assemblare tutte le parti elettroniche nel case stampato in 3D.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/make/power-bank-4000-3d-model.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.