1include <BOSL2/std.scad>
 2
 3module_padding = 0.3;
 4module_rounding = 0.3;
 5edge_padding = 4;
 6edge_rounding = 4;
 7resolution = 10;
 8thickness = 0.5;
 9
10// QR code data for "https://bit.ly/wbrick" (25 x 25)
11// Generated by Altair's OpenSCAD QR Code Generator
12// https://ridercz.github.io/OpenSCAD-QR/
13qr_data = [[1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1],
14           [1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1],
15           [1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1],
16           [1,0,1,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1],
17           [1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1],
18           [1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1],
19           [1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1],
20           [0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0],
21           [1,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,1],
22           [1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0],
23           [0,0,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,1],
24           [1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,1,1],
25           [0,1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0,1],
26           [1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0],
27           [1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1],
28           [1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1],
29           [1,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,0],
30           [0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0],
31           [1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1],
32           [1,0,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,1],
33           [1,0,1,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1],
34           [1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1],
35           [1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1],
36           [1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1],
37           [1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1]];
38
39// Render QR code with default settings (module 1x1x1)
40difference(){
41translate([-edge_padding/2,-edge_padding/2,0]) cuboid([len(qr_data)+edge_padding,len(qr_data)+edge_padding, thickness],anchor=BOTTOM+LEFT+FRONT,rounding=edge_rounding, edges=[LEFT+FRONT,LEFT+BACK,RIGHT+FRONT,RIGHT+BACK],$fn=resolution*25);
42qr_render(qr_data,height=thickness);
43}
44// QR code rendering method
45module qr_render(data, module_size = 1, height = 1) {
46    maxmod = len(data) - 1;
47    union() {
48        for(r = [0 : maxmod]) {
49            for(c = [0 : maxmod]) {
50                if(data[r][c] == 1){
51                    xo = c * module_size;
52                    yo = (maxmod - r) * module_size;
53                    translate([xo+module_padding/2, yo+module_padding/2, 0]) cuboid([module_size-module_padding, module_size-module_padding, height],anchor=BOTTOM+LEFT+FRONT,rounding=module_rounding, edges=[LEFT+FRONT,LEFT+BACK,RIGHT+FRONT,RIGHT+BACK],$fn=resolution);
54                }
55            }
56        }
57    }
58}