diff --git a/readme.md b/readme.md index 34e76de..616c1fb 100644 --- a/readme.md +++ b/readme.md @@ -48,6 +48,36 @@ A list of changes classified as breaking, additions or fixes is maintained in [C Hygrometer Pulleys Zipties Strap_handle +--- + +## 7_segments +7 Segment displays + +[vitamins/7_segments.scad](vitamins/7_segments.scad) Object definitions. + +[vitamins/7_segment.scad](vitamins/7_segment.scad) Implementation. + +[tests/7_segments.scad](tests/7_segments.scad) Code for this example. + +### Properties +| Function | Description | +|:--- |:--- | +| `7_segment_digit_size(type)` | Size of the actual digit and segemnt width and angle | +| `7_segment_pin_pitch(type)` | x and y pin pitches and pin diameter | +| `7_segment_pins(type)` | None | +| `7_segment_size(type)` | Size of the body | + +### Modules +| Module | Description | +|:--- |:--- | +| `7_segment_digit(type, colour = grey(95)` | Draw the specified 7 segment digit | +| `7_segment_digits(type, n, colour = grey(70)` | Draw n digits side by side | + +![7_segments](tests/png/7_segments.png) + + +Top + --- ## Axials diff --git a/tests/7_segments.scad b/tests/7_segments.scad new file mode 100644 index 0000000..d01c4f9 --- /dev/null +++ b/tests/7_segments.scad @@ -0,0 +1,29 @@ +// +// NopSCADlib Copyright Chris Palmer 2021 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// +include <../core.scad> +use <../utils/layout.scad> + +include <../vitamins/7_segments.scad> + +module 7_segments() + layout([for(s = 7_segments) 7_segment_size(s).x * 2], 5) let(s = 7_segments[$i]) + 7_segment_digits(s, 2); + +if($preview) + 7_segments(); diff --git a/tests/PCB.scad b/tests/PCB.scad index ee378fa..d1aef4e 100644 --- a/tests/PCB.scad +++ b/tests/PCB.scad @@ -22,6 +22,8 @@ include <../vitamins/d_connectors.scad> include <../vitamins/leds.scad> include <../vitamins/axials.scad> include <../vitamins/smds.scad> +include <../vitamins/7_segments.scad> +include <../vitamins/potentiometers.scad> use <../vitamins/pcb.scad> @@ -46,7 +48,7 @@ TMC2130 = ["TMC2130", "TMC2130", [] ]; -test_pcb = ["TestPCB", "Test PCB", +test_pcb = ["test_pcb", "Test PCB", 100, 250, 1.6, // length, width, thickness 3, // Corner radius 2.75, // Mounting hole diameter @@ -138,6 +140,7 @@ test_pcb = ["TestPCB", "Test PCB", [ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54], [ 50, 240, 0, "potentiometer"], [ 75, 240, 0, "potentiometer", 7, 8], + [ 30, 85, -90, "7seg", WT5011BSR, 2], ], // accessories [] diff --git a/tests/png/7_segments.png b/tests/png/7_segments.png new file mode 100644 index 0000000..80e1390 Binary files /dev/null and b/tests/png/7_segments.png differ diff --git a/vitamins/7_segment.scad b/vitamins/7_segment.scad new file mode 100644 index 0000000..2111a80 --- /dev/null +++ b/vitamins/7_segment.scad @@ -0,0 +1,107 @@ +// +// NopSCADlib Copyright Chris Palmer 2021 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// + +// +//! 7 Segment displays +// +include <../utils/core/core.scad> + + +function 7_segment_size(type) = type[1]; //! Size of the body +function 7_segment_digit_size(type) = type[2]; //! Size of the actual digit and segemnt width and angle +function 7_segment_pins(type) = type[3]; //! [x, y] array of pins +function 7_segment_pin_pitch(type) = type[4]; //! x and y pin pitches and pin diameter + +module 7_segment_digit(type, colour = grey(95), pin_length = 6.4) { //! Draw the specified 7 segment digit + size = 7_segment_size(type); + digit = 7_segment_digit_size(type); + pins = 7_segment_pins(type); + pin_pitch = 7_segment_pin_pitch(type); + + color(grey(95)) + linear_extrude(size.z) + square([size.x - 0.1, size.y], center = true); + + color(grey(15)) + translate_z(size.z) + cube([size.x - 0.1, size.y, eps], center = true); + + color(colour) + translate_z(size.z) + linear_extrude(2 * eps) { + t = digit[2]; + a = digit[3]; + sq = [digit.x - 2 * t, (digit.y - 3 * t) / 2]; + + multmatrix([ // Skew + [1, tan(a), 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]) + difference() { + square([digit.x, digit.y], center = true); + + for(y = [-1, 1], x = [-1, 1]) { + translate([0, y * (t + sq.y) / 2]) + square(sq, center = true); + + + translate([x * digit.x / 2, y * digit.y / 2]) + rotate(-45 * x * y) { + square([10, t], center = true); + + square([t / 5, 10], center = true); + } + + translate([x * (digit.x - t) / 2, 0]) + rotate(45) { + square([t / 5, t * 2], center = true); + + square([t * 2, t / 5], center = true); + + translate([x * t / 2, -x * t / 2]) + square([t, t], center = true); + } + } + } + r = 1.25 * t / 2; + translate([digit.x / 2 - r + digit.y / 2 * tan(a), -digit.y / 2 + r]) + circle(r); + } + + color(silver) + translate_z(-pin_length) + linear_extrude(pin_length) + for(x = [0 : 1 : pins.x - 1], y = [0 : 1 : pins.y - 1]) + translate([(x - (pins.x - 1) / 2) * pin_pitch.x, (y - (pins.y - 1) / 2) * pin_pitch.y]) + circle(d = pin_pitch[2], $fn = 16); +} + +module 7_segment_digits(type, n, colour = grey(70), pin_length = 6.4, cutout = false) { //! Draw n digits side by side + size = 7_segment_size(type); + + if(cutout) + linear_extrude(100) + square([n * size.x, size.y], center = true); + else + for(i = [0 : 1 : n - 1]) + translate([(i - (n - 1) / 2) * size.x, 0]) + 7_segment_digit(type, colour, pin_length); +} diff --git a/vitamins/7_segments.scad b/vitamins/7_segments.scad new file mode 100644 index 0000000..3a30c3c --- /dev/null +++ b/vitamins/7_segments.scad @@ -0,0 +1,28 @@ +// +// NopSCADlib Copyright Chris Palmer 2021 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// + +// +//! 7 Segment displays +// + +WT5011BSR = ["WT5011BSR", [12.7, 19, 8.2], [7.2, 12.7, 1.2, 10], [5, 2], [inch(0.1), inch(0.6), 0.4]]; + +7_segments = [ WT5011BSR ]; + +use <7_segment.scad> diff --git a/vitamins/pcbs.scad b/vitamins/pcbs.scad index 90dbed1..98a1c2a 100644 --- a/vitamins/pcbs.scad +++ b/vitamins/pcbs.scad @@ -22,6 +22,8 @@ include include include include +include <7_segments.scad> +include // // l w t r h l c b h