basisprints
|
|
@ -0,0 +1 @@
|
||||||
|
This thing was created by Thingiverse user alanjames1987, and is licensed under Creative Commons - Attribution
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
D1 Mini Lite + PIR (HC-SR501) Enclosure by alanjames1987 on Thingiverse: https://www.thingiverse.com/thing:3366814
|
||||||
|
|
||||||
|
Summary:
|
||||||
|
An enclosure to hold a D1 Mini Lite and HC-SR501 PIR sensor.The HC-SR501 can give a lot of false positives because of signals from the ESP8266. This enclosure can make that worse because the D1 Mini antenna sits right below the HC-SR501. For this reason you shouldn't use this enclosure as a motion sensor to control things like lights, but it works very well for triggering cameras to record security footage or other things where a false positive wouldn't be unwelcome.For light motion sensors I've heard the AM312 is a better sensor but I haven't tested it yet.
|
||||||
|
After Width: | Height: | Size: 520 KiB |
|
After Width: | Height: | Size: 602 KiB |
|
After Width: | Height: | Size: 269 KiB |
|
After Width: | Height: | Size: 236 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
This thing was created by Thingiverse user mauroalfieri, and is licensed under Creative Commons - Attribution - Non-Commercial - Share Alike
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
Wemos D1 mini pir home Assistant case by mauroalfieri on Thingiverse: https://www.thingiverse.com/thing:5842725
|
||||||
|
|
||||||
|
Summary:
|
||||||
|
The enclosure also fits a DHT22 and a pir motion sensor starting from the Wemos D1 mini enclosure project by Dendrowen ( https://www.thingiverse.com/thing:4905266 ).In my customization I wanted to put the motion sensor directly into the wemos case to have a compact, single case with no external cables.As done by the author I shared the modified .scad file for future customizations.Bill of materialsn.1 wemos D1 mini ( https://www.amazon.it/AZDelivery-D1-NodeMCU-ESP8266-12E-compatibile/dp/B01N9RXGHY?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2NM602FFYEGFM&keywords=wemos+di+mini&qid=1675956817&refinements=p_76:490210031&rnid=490209031&rps=1&sprefix=wemos+di+mini,aps,87&sr=8-6&linkCode=sl1&tag=mauroalfieri-21&linkId=7228cbc973656d77f3574fba8a44685d&language=it_IT&ref_=as_li_ss_tl )n.1 Pir motion sensor ( https://www.amazon.it/AZDelivery-D1-NodeMCU-ESP8266-12E-compatibile/dp/B01N9RXGHY?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2NM602FFYEGFM&keywords=wemos+di+mini&qid=1675956817&refinements=p_76:490210031&rnid=490209031&rps=1&sprefix=wemos+di+mini,aps,87&sr=8-6&linkCode=sl1&tag=mauroalfieri-21&linkId=7228cbc973656d77f3574fba8a44685d&language=it_IT&ref_=as_li_ss_tl )n.1 DHT22 temperature and humidity sensor ( https://www.amazon.it/AZDelivery-D1-NodeMCU-ESP8266-12E-compatibile/dp/B01N9RXGHY?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2NM602FFYEGFM&keywords=wemos+di+mini&qid=1675956817&refinements=p_76:490210031&rnid=490209031&rps=1&sprefix=wemos+di+mini,aps,87&sr=8-6&linkCode=sl1&tag=mauroalfieri-21&linkId=7228cbc973656d77f3574fba8a44685d&language=it_IT&ref_=as_li_ss_tl )n.1 10Kohm resistor ( https://www.amazon.it/AZDelivery-D1-NodeMCU-ESP8266-12E-compatibile/dp/B01N9RXGHY?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2NM602FFYEGFM&keywords=wemos+di+mini&qid=1675956817&refinements=p_76:490210031&rnid=490209031&rps=1&sprefix=wemos+di+mini,aps,87&sr=8-6&linkCode=sl1&tag=mauroalfieri-21&linkId=7228cbc973656d77f3574fba8a44685d&language=it_IT&ref_=as_li_ss_tl )n.1 0,1uF capacitor ( https://www.amazon.it/AZDelivery-D1-NodeMCU-ESP8266-12E-compatibile/dp/B01N9RXGHY?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2NM602FFYEGFM&keywords=wemos+di+mini&qid=1675956817&refinements=p_76:490210031&rnid=490209031&rps=1&sprefix=wemos+di+mini,aps,87&sr=8-6&linkCode=sl1&tag=mauroalfieri-21&linkId=7228cbc973656d77f3574fba8a44685d&language=it_IT&ref_=as_li_ss_tl )
|
||||||
|
|
@ -0,0 +1,452 @@
|
||||||
|
$fa = 0.5;
|
||||||
|
$fs = 0.5;
|
||||||
|
|
||||||
|
esp_w = 26;
|
||||||
|
esp_l = 34.5;
|
||||||
|
esp_t = 4.8;
|
||||||
|
esp_tt = 8;
|
||||||
|
|
||||||
|
|
||||||
|
wall = 2;
|
||||||
|
|
||||||
|
overlap = 9.5;
|
||||||
|
|
||||||
|
// Pir sizes
|
||||||
|
pirL = 33;
|
||||||
|
pirH = 25;
|
||||||
|
pirP = 15;
|
||||||
|
pirHole = 24;
|
||||||
|
|
||||||
|
|
||||||
|
screw_holes = [
|
||||||
|
[esp_w - overlap / 2, overlap / 2],
|
||||||
|
[overlap / 2, esp_l + overlap * 0.5]
|
||||||
|
];
|
||||||
|
|
||||||
|
// color("WHITE")
|
||||||
|
// entire_case();
|
||||||
|
|
||||||
|
rotate([180, 0, 0])
|
||||||
|
lid();
|
||||||
|
//case();
|
||||||
|
//entire_case();
|
||||||
|
//mount();
|
||||||
|
//pir();
|
||||||
|
|
||||||
|
module mount() {
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
|
||||||
|
minkowski() {
|
||||||
|
cube([esp_w, esp_l + overlap, 12]);
|
||||||
|
|
||||||
|
sphere(r = wall * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
minkowski() {
|
||||||
|
cube([esp_w, esp_l + overlap, 12]);
|
||||||
|
|
||||||
|
sphere(r = wall + 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([esp_w / 2, (esp_l + overlap) / 2 + 1.1, -4.08])
|
||||||
|
cylinder(d1 = 4.3, d2 = 7.3, h = 2);
|
||||||
|
|
||||||
|
|
||||||
|
// ================ 0.2
|
||||||
|
translate([-5, -5, 2])
|
||||||
|
cube([100, 100, 100]);
|
||||||
|
|
||||||
|
translate([-5, -5, -5])
|
||||||
|
cube([100, esp_l / 2 + 6, 100]);
|
||||||
|
|
||||||
|
translate([-5, esp_l / 2 + 10.7, -5])
|
||||||
|
cube([100, esp_l / 2 + 5, 100]);
|
||||||
|
|
||||||
|
|
||||||
|
// ================ 0.1
|
||||||
|
// translate([-0.5, -10, -wall])
|
||||||
|
// cube([esp_w + 1, esp_l + overlap, 30]);
|
||||||
|
|
||||||
|
// translate([-0.5, -10, -wall])
|
||||||
|
// cube([esp_w - 3, esp_l + overlap + 20, 30]);
|
||||||
|
|
||||||
|
// translate([-10, 4, -wall])
|
||||||
|
// cube([esp_w + 20, esp_l + overlap - 8, 30]);
|
||||||
|
|
||||||
|
// translate([5, 10, -wall])
|
||||||
|
// cube([esp_w + 20, esp_l + overlap - 10, 30]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// =================== 0.2
|
||||||
|
|
||||||
|
translate([-2, esp_l / 2 + 3, 2])
|
||||||
|
difference() {
|
||||||
|
scale([0.5, 1, 1])
|
||||||
|
sphere(r = 1.5);
|
||||||
|
|
||||||
|
translate([-5, -5, 0])
|
||||||
|
cube([10, 10, 10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([-2, esp_l / 2 + 8.7, 2])
|
||||||
|
difference() {
|
||||||
|
scale([0.5, 1, 1])
|
||||||
|
sphere(r = 1.5);
|
||||||
|
|
||||||
|
translate([-5, -5, 0])
|
||||||
|
cube([10, 10, 10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([esp_w + 2, esp_l / 2 + 3, 2])
|
||||||
|
difference() {
|
||||||
|
scale([0.5, 1, 1])
|
||||||
|
sphere(r = 1.5);
|
||||||
|
|
||||||
|
translate([-5, -5, 0])
|
||||||
|
cube([10, 10, 10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([esp_w + 2, esp_l / 2 + 8.7, 2])
|
||||||
|
difference() {
|
||||||
|
scale([0.5, 1, 1])
|
||||||
|
sphere(r = 1.5);
|
||||||
|
|
||||||
|
translate([-5, -5, 0])
|
||||||
|
cube([10, 10, 10]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module entire_case(){
|
||||||
|
case();
|
||||||
|
translate([0,0,20]) lid();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** tsl sensor **
|
||||||
|
color("GRAY")
|
||||||
|
translate([esp_w, esp_l + overlap, esp_t + 6 - 1.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
tsl2561();
|
||||||
|
/* */
|
||||||
|
|
||||||
|
/** dht sensor **
|
||||||
|
color("GRAY")
|
||||||
|
translate([15.4, 25.3 + pirH, esp_t + 6 - 1.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
dht22();
|
||||||
|
/* */
|
||||||
|
|
||||||
|
module lid(){
|
||||||
|
union(){
|
||||||
|
difference() {
|
||||||
|
// base
|
||||||
|
minkowski() {
|
||||||
|
cube([pirL, esp_l + overlap+pirH, 13]);
|
||||||
|
sphere(r = wall);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([-5, -5, -5])
|
||||||
|
cube([100, 100, esp_t + 6 + 5]);
|
||||||
|
|
||||||
|
|
||||||
|
//tsl sensor
|
||||||
|
difference(){
|
||||||
|
translate([esp_w, esp_l + overlap+pirH, esp_t + 6 - 0.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
tsl2561();
|
||||||
|
|
||||||
|
translate([esp_w, esp_l + overlap+pirH, esp_t + 6 - 0.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
cube([20, 11, 4]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([esp_w - 5.5, esp_l + overlap - 4.1+pirH, esp_t + 6 - 0.1])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
cube([3, 2, 0.9]);
|
||||||
|
|
||||||
|
//tsl sensor window
|
||||||
|
translate([esp_w - 8.3, esp_l + overlap - 9.1+pirH, esp_t + 6 - 0.1])
|
||||||
|
hull(){
|
||||||
|
cube([3, 2, 0.1]);
|
||||||
|
|
||||||
|
translate([-2.5, -3, 4])
|
||||||
|
cube([8, 8, 0.1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//dht sensor
|
||||||
|
translate([15.4, 25.3+pirH, esp_t + 6 - 1.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
hull(){
|
||||||
|
difference() {
|
||||||
|
dht22();
|
||||||
|
|
||||||
|
translate([0, 20.5, 0])
|
||||||
|
cube([20, 8, 5]);
|
||||||
|
}
|
||||||
|
sphere(r = 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//pir sensor
|
||||||
|
translate([16.5, 12, esp_t + 6 - 1.6 - pirP+5])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
pir();
|
||||||
|
|
||||||
|
translate([wall + 0.3, 25.2+pirH, esp_t + 6 - 0.1])
|
||||||
|
cube([13.1, 5.1, 1.5]);
|
||||||
|
|
||||||
|
//screws
|
||||||
|
translate([0, pirH, 10])
|
||||||
|
cylinders(d = 3.2, h = 5, pos = screw_holes);
|
||||||
|
|
||||||
|
translate([0, pirH, 13])
|
||||||
|
cylinders(d = 6, h = 5, pos = screw_holes);
|
||||||
|
|
||||||
|
translate([0, pirH, 12.41])
|
||||||
|
cylinders(d2 = 6, d1 = 3.2, h = 0.6, pos = screw_holes);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module case(){
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
// base
|
||||||
|
minkowski() {
|
||||||
|
cube([pirL, esp_l + overlap + pirH, 20]);
|
||||||
|
sphere(r = wall);
|
||||||
|
}
|
||||||
|
|
||||||
|
//slot for esp
|
||||||
|
translate([7, overlap+pirH, 0])
|
||||||
|
difference(){
|
||||||
|
cube([esp_w, esp_l, esp_t]);
|
||||||
|
|
||||||
|
cube([esp_w, 4, 2.7]);
|
||||||
|
|
||||||
|
translate([esp_w / 2 - 1.5, 0, 2.7])
|
||||||
|
cube([3, 1, 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//chamfered edge for inserting esp
|
||||||
|
translate([0, overlap+pirH, 0])
|
||||||
|
hull() {
|
||||||
|
translate([0, 10, 0])
|
||||||
|
cube([pirL, esp_l - overlap, esp_t]);
|
||||||
|
|
||||||
|
translate([0, 10, 0])
|
||||||
|
cube([pirL, esp_l - 10 - overlap, esp_t + 3.2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//hole to insert esp
|
||||||
|
translate([0, overlap+pirH, 4])
|
||||||
|
cube([pirL, esp_l - overlap, 20]);
|
||||||
|
|
||||||
|
//cut off the top
|
||||||
|
translate([-10, -10, esp_t + 6])
|
||||||
|
cube([100, 100, 100]);
|
||||||
|
|
||||||
|
//tsl sensor
|
||||||
|
translate([esp_w+7, esp_l + overlap+pirH, esp_t + 6 - 1.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
tsl2561();
|
||||||
|
|
||||||
|
//dht sensor
|
||||||
|
translate([15.4, 25.3+pirH, esp_t + 6 - 1.6])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
dht22();
|
||||||
|
|
||||||
|
//pir sensor
|
||||||
|
translate([16.5, 12, esp_t + 6 - 1.6 - pirP+5])
|
||||||
|
rotate([0, 0, 180])
|
||||||
|
pir();
|
||||||
|
|
||||||
|
translate([0, 0+pirH, esp_t + 1])
|
||||||
|
cylinders(4.6, 6, screw_holes);
|
||||||
|
|
||||||
|
//cross cut
|
||||||
|
//translate([-5, -5, -5])
|
||||||
|
//cube([esp_w / 2 + 5, 100, 100]);
|
||||||
|
|
||||||
|
|
||||||
|
//reset button
|
||||||
|
translate([esp_w - 0.1 + 7, esp_l + overlap - 10 - 2 +pirH, 0])
|
||||||
|
cube([5, 10, 0.4]);
|
||||||
|
|
||||||
|
translate([esp_w - 0.1 + 7, esp_l + overlap - 10 - 2 +pirH, 3.5])
|
||||||
|
cube([5, 10, 0.4]);
|
||||||
|
|
||||||
|
translate([esp_w - 0.1 + 7, esp_l + overlap - 2+pirH, 0])
|
||||||
|
cube([5, 0.4, 3.9]);
|
||||||
|
|
||||||
|
//usb port
|
||||||
|
translate([9.75 + 7, esp_l + overlap - 1+pirH, 1.5])
|
||||||
|
hull(){
|
||||||
|
translate([1.75, 5, 0])
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
cylinder(d = 3.5, h = 5);
|
||||||
|
|
||||||
|
translate([7.5-1.75, 5, 0])
|
||||||
|
rotate([90, 0, 0])
|
||||||
|
cylinder(d = 3.5, h = 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
//vents
|
||||||
|
translate([-5, esp_l / 2 + 3+pirH, 0])
|
||||||
|
rotate([45, 0, 0]){
|
||||||
|
translate([16, 0, 0])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([16, -4, 4])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([16, -4, 8])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0, 4, 0])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0,4, 4])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0, 0, 8])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([16, 0, 4])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0, 4, -4])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0, 8, -4])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
|
||||||
|
translate([0, 8, 0])
|
||||||
|
cube([100, 3, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//extra sensor cable guide
|
||||||
|
translate([7, -5+pirH, esp_t-1 ])
|
||||||
|
cube([4, 20, 3.6]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//extra wemos positiong block
|
||||||
|
translate([0, (pirH*2)+9, 0 ])
|
||||||
|
cube([7, 10, 3]);
|
||||||
|
|
||||||
|
|
||||||
|
//extra pin to positioning
|
||||||
|
translate([5, pirH + esp_l + overlap + 3, esp_t ]) rotate([90,0,0]) cylinder(r1=2,r2=3,h=4,center=true,$fn=96);
|
||||||
|
translate([5, -3, esp_t ]) rotate([90,0,0]) cylinder(r1=3,r2=2,h=4,center=true,$fn=96);
|
||||||
|
|
||||||
|
//reset button
|
||||||
|
translate([esp_w - 0.9 + 7, esp_l + overlap - 6.5+pirH, 0.5])
|
||||||
|
hull() {
|
||||||
|
translate([0, 0, 1])
|
||||||
|
cube([0.9, 4.5, 2]);
|
||||||
|
|
||||||
|
translate([0.9, 0, 0])
|
||||||
|
cube([0.1, 4.5, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([esp_w + wall + 7, esp_l + overlap - 3.5+pirH, 2])
|
||||||
|
scale([0.5, 1, 1])
|
||||||
|
sphere(d = 3);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module dht22() {
|
||||||
|
dht_w = 15.4;
|
||||||
|
dht_l = 20.3;
|
||||||
|
dht_t = 8;
|
||||||
|
dht_lip = 5;
|
||||||
|
dht_lip_t = 1.7;
|
||||||
|
|
||||||
|
union(){
|
||||||
|
cube([dht_w, dht_l, dht_t]);
|
||||||
|
|
||||||
|
translate([0, dht_l, 0])
|
||||||
|
difference() {
|
||||||
|
hull() {
|
||||||
|
translate([0, -0.1, 0])
|
||||||
|
cube([dht_w, 0.1, dht_lip_t]);
|
||||||
|
|
||||||
|
translate([(dht_w - 10.5) / 2, dht_lip - 0.1, 0])
|
||||||
|
cube([10.5, 0.1, dht_lip_t]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([dht_w / 2, 2.4, -1])
|
||||||
|
cylinder(d = 2.8, h = 3);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module tsl2561(){
|
||||||
|
tsl_w = 13.4;
|
||||||
|
tsl_l = 18.6;
|
||||||
|
tsl_t = 1.6;
|
||||||
|
tsl_hoh = 8.5;
|
||||||
|
difference() {
|
||||||
|
cube([tsl_w, tsl_l, tsl_t + 0.01]);
|
||||||
|
|
||||||
|
translate([(tsl_w - tsl_hoh) / 2, 3, -1])
|
||||||
|
cylinder(d = 2.9, h = 3);
|
||||||
|
|
||||||
|
translate([(tsl_w - tsl_hoh) / 2 + tsl_hoh, 3, -1])
|
||||||
|
cylinder(d = 2.9, h = 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module pir(){
|
||||||
|
difference(){
|
||||||
|
union() {
|
||||||
|
translate([0,0,pirP/2]) cube([pirL+1,pirH+1,pirP],center=true);
|
||||||
|
translate([0,0,pirP+1]) sphere(r=pirHole/2,$fn=25);
|
||||||
|
}
|
||||||
|
translate([(pirL/2)-2,0,pirP/2])cylinder(r=1,h=pirP*2,center=true,$fn=96);
|
||||||
|
translate([-(pirL/2)+2,0,pirP/2])cylinder(r=1,h=pirP*2,center=true,$fn=96);
|
||||||
|
|
||||||
|
translate([(pirL/2)-2,0,(pirP)-.4])cylinder(r1=1,r2=3,h=2,center=true,$fn=96);
|
||||||
|
translate([-(pirL/2)+2,0,(pirP)-.4])cylinder(r1=1,r2=3,h=2,center=true,$fn=96);
|
||||||
|
|
||||||
|
translate([(pirL/2)-2,0,2.4])cylinder(r1=2,r2=1,h=5,center=true,$fn=96);
|
||||||
|
translate([-(pirL/2)+2,0,2.4])cylinder(r1=2,r2=1,h=5,center=true,$fn=96);
|
||||||
|
}
|
||||||
|
// trimmer sensivity
|
||||||
|
translate([4,20,pirP-8]) rotate([90,0,0]) cylinder(r=3,h=15,center=true,$fn=96);
|
||||||
|
translate([-2.5,20,pirP-8]) rotate([90,0,0]) cylinder(r=3,h=15,center=true,$fn=96);
|
||||||
|
}
|
||||||
|
|
||||||
|
module cylinders(d, h, pos, d1, d2){
|
||||||
|
for(p = pos){
|
||||||
|
x = p[0];
|
||||||
|
y = p[1];
|
||||||
|
translate([x, y, 0])
|
||||||
|
if(d == undef){
|
||||||
|
cylinder(d1 = d1, d2 = d2, h = h);
|
||||||
|
} else {
|
||||||
|
cylinder(d = d, h = h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 420 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 467 KiB |
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 419 KiB |
|
After Width: | Height: | Size: 289 KiB |
|
After Width: | Height: | Size: 527 KiB |