ADD Files

This commit is contained in:
XPS\Micro 2026-01-26 01:39:16 +01:00
parent 23e6f0970f
commit 18cf682079
5 changed files with 339 additions and 0 deletions

Binary file not shown.

16
openscad/GoticFour.svg Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:odm="http://product.corel.com/CGS/11/cddns/" viewBox="0 0 978 1078.2">
<defs>
<style>
.cls-1 {
fill: #1f1a17;
fill-rule: evenodd;
stroke: #1f1a17;
stroke-miterlimit: 8.7;
stroke-width: 2.2px;
}
</style>
</defs>
<!-- Generator: Rainer Wieland -->
<path class="cls-1" d="M0,952.6c114.7-36.8,227.3-75.8,331.2-138.6-108.2-164.5-192.7-337.7-236-528.3C266.3,207.8,428.7,116.9,569.4,0c125.6,142.9,259.8,279.3,407,402.7-93.1,168.9-236,313.9-383.2,450.3l168.9,123.4-108.2,99.6-210-151.5c-108.2,60.6-225.2,110.4-346.4,151.5L0,952.6ZM281.4,368l253.3-158c73.6,80.1,155.9,155.9,249,223-88.8,125.6-194.8,223-313.9,303.1-80.1-112.6-145.1-236-188.4-368Z"/>
</svg>

After

Width:  |  Height:  |  Size: 815 B

297
openscad/model.scad Normal file
View File

@ -0,0 +1,297 @@
clock_text_default =
"ESHISTRBALDFÜNFASTZEHNVIERTELSVORJNACHWHALBKOSECHSIEBEN-----------ZEHNEUNACHTDREIELFVIERZWÖLFÜNFACWIZWEINSAUHR";
echo("SCAD-Script V0.1");
echo(clock_text_default = clock_text_default);
echo(clock_text_override = clock_text_override);
echo(thickness_override = thickness_override);
echo(frame_override = frame_override);
$fn = 120; // number of fragments. usually 0. >100 not advisable.
// Parameter
panel_length = 178.5;
panel_width = 178.5;
frame_thickness = 0.5;
echo(panel_length = panel_length);
echo(panel_width = panel_width);
FontFaktor = 22;
cols = 11;
rows = 10;
// texts and minute holes
use <./Fonts/CharGraphFont2.ttf>;
Font = "WordclockFont2:style=Regular";
FONT = "WordclockFontBold:style=Regular";
// fp_size = [panel_length, panel_width, panel_thickness];
// Font_size = fp_size/FontFaktor; // 8 seems to be a good value
Font_size_min = 8;
Font_size_max = 8;
// shift everything down by a bit:
tanslatedown = 4;
min_hole_dia = 3;
// minute LEDs spacing on the strip
minute_led_period = 2;
// LED Strips
led_distance = 13.9;
led_distance_min_holes = minute_led_period*(led_distance);
// this is special because the PCB has already been built and the entire set of letters and minute LEDs
// needs to fit into a centered square which is 11 x 11 pixels
textarea = [(cols-1)*led_distance, (cols-1)*led_distance];
// vertical position of 4 minutes LEDs
//row below the letters...
min_row_fp = (panel_width-textarea[1])/2 + textarea[1]/(cols-1) - textarea[1]/(cols-1) ;
// Template
//clock_text = "
//ESHISTAFÜNF
//ZEHNVIERTEL
//VORBALDNACH
//HALBIZWEINS
//DG6MSMARTIN
//DREINSIEBEN
//ELFZWÖLFÜNF
//USECHSVIERQ
//ZEHNEUNACHT
//RWDFACWEUHR";
module GoticFour()
{
difference() {
scale([9/1078.2, 9/1078.2, 0])
import("/app/scripts/GoticFour.svg",
center = true, dpi = 25.4, $fn = 120);
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 36]) // 60° Winkel der Geraden
translate([1.4, 1.2, 0])
square([2, 0.8]); // Rechteck als "Gerade"
}
}
module LettersAndMinutes2D()
{
// hier wird clock_text zur Renderzeit aus Default/Override gebaut
clock_text =
is_undef(clock_text_override)
? clock_text_default
: clock_text_override;
echo(clock_text = clock_text);
// the letterblock
echo("-------> horizontal pitch = ",textarea[0]/(cols-1));
echo("-------> vertical pitch = ",textarea[1]/(cols-1));
// alles ein bisschen nach unten schieben
translate([0,-tanslatedown])
{
translate([(panel_length-textarea[0])/2, (panel_width-textarea[1])/2,0])
{
//square(size = [textarea[0],textarea[1]], center = false);
for (col=[0:cols-1])
{
for (row=[0:rows-1])
{
letter = clock_text[row*cols+col];
variable_font_size = Font_size_min + (row/(rows-1))*(Font_size_max-Font_size_min);
translate([col * textarea[0]/(cols-1), (cols-1-row) * textarea[1]/(cols-1), 0])
if (letter == "&")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 60]) // 60° Winkel der Geraden
{
translate([-20, 0.4, 0])
square([18, 1]); // Rechteck als "Gerade"
translate([2, 0.4, 0])
square([20, 1]); // Rechteck als "Gerade"
}
}
}
else if (letter == ".")
{
translate([0, -3.3, 0]) // negative Y-Verschiebung nach unten
circle(min_hole_dia/5);
}
else if (letter == "W")
{
scale([0.9, 1.0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
}
else if (letter == "Q")
{
translate([0,-0.4,0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
}
else if (letter == "Ä" || letter == "Ö" || letter == "Ü")
{
translate([0,0.6,0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
}
else if (letter == "0")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 60]) // 60° Winkel der Geraden
translate([-4, -1, 0])
square([40, 1]); // Rechteck als "Gerade"
}
}
else if (letter == "4")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 60]) // 60° Winkel der Geraden
translate([-0.5, -0.33, 0])
square([10, 1]); // Rechteck als "Gerade"
}
}
else if (letter == "6")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 91]) // 60° Winkel der Geraden
translate([-0.6, 0.42, 0])
square([1.7, 1]); // Rechteck als "Gerade"
}
}
else if (letter == "8")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 50]) // 60° Winkel der Geraden
translate([1, 0.1, 0])
square([5, 1]); // Rechteck als "Gerade"
rotate([0, 0, 50]) // 60° Winkel der Geraden
translate([-5, -1, 0])
square([5, 1]); // Rechteck als "Gerade"
}
}
else if (letter == "9")
{
difference() {
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
// Schräge Gerade zum Unterbrechen
rotate([0, 0, 90]) // 60° Winkel der Geraden
translate([-1.0, -1.6, 0])
square([2, 1]); // Rechteck als "Gerade"
}
}
else if (letter == "x")
{
GoticFour();
}
else
{
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
}
}
}
}
// the 4 minute holes
echo("-------> distance last letter row to minutes row = ", (panel_width-textarea[1])/2 + ( textarea[1]/(cols-1) ) - min_row_fp);
translate([panel_length/2 - 3*led_distance_min_holes/2, min_row_fp,0])
{
for (i=[0:3])
translate([i*led_distance_min_holes,0,0]) circle(min_hole_dia/2);
}
}
}
/*
module frontpanel_2d() {
difference()
{
// adding in
union()
{
square([panel_length, panel_width], center = false);
}
// subtracting
union()
{
LettersAndMinutes2D();
}
}
}
module FrontPanel3D(panel_thickness) {
linear_extrude(panel_thickness)
frontpanel_2d();
}
module RaisedFrameOuter(frame_height, panel_thickness) {
translate([0,0,-frame_height])
linear_extrude(frame_height+panel_thickness)
difference() {
offset(delta = +frame_thickness) frontpanel_2d();
frontpanel_2d();
union()
{
LettersAndMinutes2D();
}
}
}
*/
module panel_plain_2d() {
square([panel_length, panel_width], center = false);
}
module frontpanel_2d() {
difference() {
panel_plain_2d(); // Platte
LettersAndMinutes2D(); // Buchstaben und Minutenlöcher ausschneiden
}
}
module FrontPanel3D(panel_thickness) {
linear_extrude(panel_thickness)
frontpanel_2d(); // -> Platte MIT ausgeschnittenen Buchstaben
}
module RaisedFrameOuter(frame_height, panel_thickness) {
translate([0,0,-frame_height])
linear_extrude(frame_height + panel_thickness)
difference() {
offset(delta = +frame_thickness) panel_plain_2d();
panel_plain_2d();
LettersAndMinutes2D(); // optional, für Freistellungen im Rahmen
}
}
module main() {
panel_thickness =
is_undef(thickness_override) ? 0.8 : thickness_override;
frame_height =
is_undef(frame_override) ? 11 : frame_override;
rotate([180, 0, 180])
union() {
FrontPanel3D(panel_thickness); // enthält die Buchstaben
RaisedFrameOuter(frame_height, panel_thickness);
}
}
main();

5
openscad/readme.md Normal file
View File

@ -0,0 +1,5 @@
## Weiterführende Ressourcen
- [OpenSCAD auf GitHub](https://github.com/openscad/openscad) - Für parametrische CAD-Modellierung mit Code
- [Fusion 360 Community](https://www.autodesk.com/community/fusion-360)
- [JLCPCB Dokumentation](https://jlcpcb.com/help)

21
openscad/testmodel.scad Normal file
View File

@ -0,0 +1,21 @@
clock_text_def =
"ESHISTRBALDFÜNFASTZEHNVIERTELSVORJNACHWHALBKOSECHSIEBEN-----------ZEHNEUNACHTDREIELFVIERZWÖLFÜNFACWIZWEINSAUHR";
module main() {
// HIER, innerhalb des Moduls, wird der -D-Wert sicher gesehen
clock_txt =
is_undef(ovclock_text)
? clock_text_def
: ovclock_text;
echo("SCAD-Script V0.1");
echo(clock_text_default = clock_text_def);
echo(ovclock_text = ovclock_text);
echo(clock_txt = clock_txt);
// ab hier clock_txt verwenden
// z.B.:
// text(clock_txt, size = 10);
}
main();