├── .gitignore ├── 1.jpeg ├── 2.jpeg ├── 3D ├── laemp_panel.scad ├── laemp_panel_14mm.stl └── readme.txt ├── LICENSE ├── README.md ├── design ├── bottom_text.png ├── img │ ├── full_open.png │ ├── mainboard.png │ └── usb.png ├── laemp.png ├── text.svg └── wall-text.png ├── firmware ├── leamp_panel │ └── leamp_panel.ino └── zigbee │ └── Light_ColorLight_JN5168_RGB.bin ├── laemp_base ├── laemp_base.kicad_pcb ├── laemp_base.kicad_prl ├── laemp_base.kicad_pro ├── laemp_base.kicad_sch └── laemp_base.pdf └── laemp_led_board ├── laemp_led_board.kicad_pcb ├── laemp_led_board.kicad_prl ├── laemp_led_board.kicad_pro ├── laemp_led_board.kicad_sch └── laemp_led_board.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | # kicad 2 | *-backups 3 | gerber 4 | fp-info-cache 5 | *-bak 6 | *.step 7 | *.stp 8 | bom 9 | sym-lib-table 10 | *cache.lib 11 | -------------------------------------------------------------------------------- /1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/1.jpeg -------------------------------------------------------------------------------- /2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/2.jpeg -------------------------------------------------------------------------------- /3D/laemp_panel.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | color([0, 49/255, 83/255])laemp_panel_inner3D(14, false); 4 | 5 | module laemp_panel_inner3D(h=10, thread=false){ 6 | union(){ 7 | // outer hexagon 8 | difference(){ 9 | rotate([0,0,90])hexagon(40,h); 10 | translate([0,0,-0.5])rotate([0,0,90])hexagon(36,h+1); 11 | // usb cutout 12 | translate([-33,0,3.2/2-0.5])minkowski(){ 13 | d=2; 14 | cube([5,9.5-d,3.2+1-d],center=true); 15 | rotate([0,90,0])cylinder(d=d,h=0.1); 16 | } 17 | // 1/4" thread 18 | if(thread==true){ 19 | rotate([90,0,-30])translate([0,h/2,30])thread(6.35,5.35,1.27,6,10); 20 | } else { 21 | reduce=1.6; 22 | rotate([90,0,-30])translate([0,h/2,30])cylinder(d=6.35-reduce, h=6); 23 | } 24 | } 25 | // screwholes 26 | translate([-17,20,0])mounting_holes(2.5,h,2); 27 | translate([17,-20,0])mounting_holes(2.5,h,2); 28 | // bridges 29 | translate([-17,20,h/2]){ 30 | rotate([0,0,90])translate([3+2,0,0])cube([6,2,h],center=true); 31 | rotate([0,0,170])translate([5+2,0,0])cube([10,2,h],center=true); 32 | } 33 | translate([17,-20,h/2]){ 34 | rotate([0,0,-90])translate([3+2,0,0])cube([6,2,h],center=true); 35 | rotate([0,0,-10])translate([5+2,0,0])cube([10,2,h],center=true); 36 | } 37 | } 38 | } 39 | 40 | module thread(do=10,di=9,s=1.9,h=10,res=5){ 41 | ssize=360/res; 42 | for(i=[1:res:360/s*h]){ 43 | rotate([0,0,i])translate([(do-di)/2,0,s*i/360-0.01])cylinder(h=s/ssize+0.02,d=di); 44 | } 45 | } 46 | 47 | module mounting_holes(sDia=3,h=1,wall=2){ 48 | difference(){ 49 | cylinder(d=wall*2+sDia,h=h); 50 | translate([0,0,-0.5])cylinder(d=sDia,h=h+1); 51 | } 52 | } 53 | 54 | module hexagon(x = 10, h = 1){ 55 | cylinder(d=x*2, h=h, $fn=6); 56 | } -------------------------------------------------------------------------------- /3D/readme.txt: -------------------------------------------------------------------------------- 1 | You might need to change the height of the 3D printed part by a few mm depending on your printer. 14mm worked out well for me on an Anycubic Photon UV resin printer. 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | CERN Open Hardware Licence Version 2 - Strongly Reciprocal 2 | 3 | 4 | Preamble 5 | 6 | CERN has developed this licence to promote collaboration among 7 | hardware designers and to provide a legal tool which supports the 8 | freedom to use, study, modify, share and distribute hardware designs 9 | and products based on those designs. Version 2 of the CERN Open 10 | Hardware Licence comes in three variants: CERN-OHL-P (permissive); and 11 | two reciprocal licences: CERN-OHL-W (weakly reciprocal) and this 12 | licence, CERN-OHL-S (strongly reciprocal). 13 | 14 | The CERN-OHL-S is copyright CERN 2020. Anyone is welcome to use it, in 15 | unmodified form only. 16 | 17 | Use of this Licence does not imply any endorsement by CERN of any 18 | Licensor or their designs nor does it imply any involvement by CERN in 19 | their development. 20 | 21 | 22 | 1 Definitions 23 | 24 | 1.1 'Licence' means this CERN-OHL-S. 25 | 26 | 1.2 'Compatible Licence' means 27 | 28 | a) any earlier version of the CERN Open Hardware licence, or 29 | 30 | b) any version of the CERN-OHL-S, or 31 | 32 | c) any licence which permits You to treat the Source to which 33 | it applies as licensed under CERN-OHL-S provided that on 34 | Conveyance of any such Source, or any associated Product You 35 | treat the Source in question as being licensed under 36 | CERN-OHL-S. 37 | 38 | 1.3 'Source' means information such as design materials or digital 39 | code which can be applied to Make or test a Product or to 40 | prepare a Product for use, Conveyance or sale, regardless of its 41 | medium or how it is expressed. It may include Notices. 42 | 43 | 1.4 'Covered Source' means Source that is explicitly made available 44 | under this Licence. 45 | 46 | 1.5 'Product' means any device, component, work or physical object, 47 | whether in finished or intermediate form, arising from the use, 48 | application or processing of Covered Source. 49 | 50 | 1.6 'Make' means to create or configure something, whether by 51 | manufacture, assembly, compiling, loading or applying Covered 52 | Source or another Product or otherwise. 53 | 54 | 1.7 'Available Component' means any part, sub-assembly, library or 55 | code which: 56 | 57 | a) is licensed to You as Complete Source under a Compatible 58 | Licence; or 59 | 60 | b) is available, at the time a Product or the Source containing 61 | it is first Conveyed, to You and any other prospective 62 | licensees 63 | 64 | i) as a physical part with sufficient rights and 65 | information (including any configuration and 66 | programming files and information about its 67 | characteristics and interfaces) to enable it either to 68 | be Made itself, or to be sourced and used to Make the 69 | Product; or 70 | ii) as part of the normal distribution of a tool used to 71 | design or Make the Product. 72 | 73 | 1.8 'Complete Source' means the set of all Source necessary to Make 74 | a Product, in the preferred form for making modifications, 75 | including necessary installation and interfacing information 76 | both for the Product, and for any included Available Components. 77 | If the format is proprietary, it must also be made available in 78 | a format (if the proprietary tool can create it) which is 79 | viewable with a tool available to potential licensees and 80 | licensed under a licence approved by the Free Software 81 | Foundation or the Open Source Initiative. Complete Source need 82 | not include the Source of any Available Component, provided that 83 | You include in the Complete Source sufficient information to 84 | enable a recipient to Make or source and use the Available 85 | Component to Make the Product. 86 | 87 | 1.9 'Source Location' means a location where a Licensor has placed 88 | Covered Source, and which that Licensor reasonably believes will 89 | remain easily accessible for at least three years for anyone to 90 | obtain a digital copy. 91 | 92 | 1.10 'Notice' means copyright, acknowledgement and trademark notices, 93 | Source Location references, modification notices (subsection 94 | 3.3(b)) and all notices that refer to this Licence and to the 95 | disclaimer of warranties that are included in the Covered 96 | Source. 97 | 98 | 1.11 'Licensee' or 'You' means any person exercising rights under 99 | this Licence. 100 | 101 | 1.12 'Licensor' means a natural or legal person who creates or 102 | modifies Covered Source. A person may be a Licensee and a 103 | Licensor at the same time. 104 | 105 | 1.13 'Convey' means to communicate to the public or distribute. 106 | 107 | 108 | 2 Applicability 109 | 110 | 2.1 This Licence governs the use, copying, modification, Conveying 111 | of Covered Source and Products, and the Making of Products. By 112 | exercising any right granted under this Licence, You irrevocably 113 | accept these terms and conditions. 114 | 115 | 2.2 This Licence is granted by the Licensor directly to You, and 116 | shall apply worldwide and without limitation in time. 117 | 118 | 2.3 You shall not attempt to restrict by contract or otherwise the 119 | rights granted under this Licence to other Licensees. 120 | 121 | 2.4 This Licence is not intended to restrict fair use, fair dealing, 122 | or any other similar right. 123 | 124 | 125 | 3 Copying, Modifying and Conveying Covered Source 126 | 127 | 3.1 You may copy and Convey verbatim copies of Covered Source, in 128 | any medium, provided You retain all Notices. 129 | 130 | 3.2 You may modify Covered Source, other than Notices, provided that 131 | You irrevocably undertake to make that modified Covered Source 132 | available from a Source Location should You Convey a Product in 133 | circumstances where the recipient does not otherwise receive a 134 | copy of the modified Covered Source. In each case subsection 3.3 135 | shall apply. 136 | 137 | You may only delete Notices if they are no longer applicable to 138 | the corresponding Covered Source as modified by You and You may 139 | add additional Notices applicable to Your modifications. 140 | Including Covered Source in a larger work is modifying the 141 | Covered Source, and the larger work becomes modified Covered 142 | Source. 143 | 144 | 3.3 You may Convey modified Covered Source (with the effect that You 145 | shall also become a Licensor) provided that You: 146 | 147 | a) retain Notices as required in subsection 3.2; 148 | 149 | b) add a Notice to the modified Covered Source stating that You 150 | have modified it, with the date and brief description of how 151 | You have modified it; 152 | 153 | c) add a Source Location Notice for the modified Covered Source 154 | if You Convey in circumstances where the recipient does not 155 | otherwise receive a copy of the modified Covered Source; and 156 | 157 | d) license the modified Covered Source under the terms and 158 | conditions of this Licence (or, as set out in subsection 159 | 8.3, a later version, if permitted by the licence of the 160 | original Covered Source). Such modified Covered Source must 161 | be licensed as a whole, but excluding Available Components 162 | contained in it, which remain licensed under their own 163 | applicable licences. 164 | 165 | 166 | 4 Making and Conveying Products 167 | 168 | You may Make Products, and/or Convey them, provided that You either 169 | provide each recipient with a copy of the Complete Source or ensure 170 | that each recipient is notified of the Source Location of the Complete 171 | Source. That Complete Source is Covered Source, and You must 172 | accordingly satisfy Your obligations set out in subsection 3.3. If 173 | specified in a Notice, the Product must visibly and securely display 174 | the Source Location on it or its packaging or documentation in the 175 | manner specified in that Notice. 176 | 177 | 178 | 5 Research and Development 179 | 180 | You may Convey Covered Source, modified Covered Source or Products to 181 | a legal entity carrying out development, testing or quality assurance 182 | work on Your behalf provided that the work is performed on terms which 183 | prevent the entity from both using the Source or Products for its own 184 | internal purposes and Conveying the Source or Products or any 185 | modifications to them to any person other than You. Any modifications 186 | made by the entity shall be deemed to be made by You pursuant to 187 | subsection 3.2. 188 | 189 | 190 | 6 DISCLAIMER AND LIABILITY 191 | 192 | 6.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products 193 | are provided 'as is' and any express or implied warranties, 194 | including, but not limited to, implied warranties of 195 | merchantability, of satisfactory quality, non-infringement of 196 | third party rights, and fitness for a particular purpose or use 197 | are disclaimed in respect of any Source or Product to the 198 | maximum extent permitted by law. The Licensor makes no 199 | representation that any Source or Product does not or will not 200 | infringe any patent, copyright, trade secret or other 201 | proprietary right. The entire risk as to the use, quality, and 202 | performance of any Source or Product shall be with You and not 203 | the Licensor. This disclaimer of warranty is an essential part 204 | of this Licence and a condition for the grant of any rights 205 | granted under this Licence. 206 | 207 | 6.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to 208 | the maximum extent permitted by law, have no liability for 209 | direct, indirect, special, incidental, consequential, exemplary, 210 | punitive or other damages of any character including, without 211 | limitation, procurement of substitute goods or services, loss of 212 | use, data or profits, or business interruption, however caused 213 | and on any theory of contract, warranty, tort (including 214 | negligence), product liability or otherwise, arising in any way 215 | in relation to the Covered Source, modified Covered Source 216 | and/or the Making or Conveyance of a Product, even if advised of 217 | the possibility of such damages, and You shall hold the 218 | Licensor(s) free and harmless from any liability, costs, 219 | damages, fees and expenses, including claims by third parties, 220 | in relation to such use. 221 | 222 | 223 | 7 Patents 224 | 225 | 7.1 Subject to the terms and conditions of this Licence, each 226 | Licensor hereby grants to You a perpetual, worldwide, 227 | non-exclusive, no-charge, royalty-free, irrevocable (except as 228 | stated in subsections 7.2 and 8.4) patent licence to Make, have 229 | Made, use, offer to sell, sell, import, and otherwise transfer 230 | the Covered Source and Products, where such licence applies only 231 | to those patent claims licensable by such Licensor that are 232 | necessarily infringed by exercising rights under the Covered 233 | Source as Conveyed by that Licensor. 234 | 235 | 7.2 If You institute patent litigation against any entity (including 236 | a cross-claim or counterclaim in a lawsuit) alleging that the 237 | Covered Source or a Product constitutes direct or contributory 238 | patent infringement, or You seek any declaration that a patent 239 | licensed to You under this Licence is invalid or unenforceable 240 | then any rights granted to You under this Licence shall 241 | terminate as of the date such process is initiated. 242 | 243 | 244 | 8 General 245 | 246 | 8.1 If any provisions of this Licence are or subsequently become 247 | invalid or unenforceable for any reason, the remaining 248 | provisions shall remain effective. 249 | 250 | 8.2 You shall not use any of the name (including acronyms and 251 | abbreviations), image, or logo by which the Licensor or CERN is 252 | known, except where needed to comply with section 3, or where 253 | the use is otherwise allowed by law. Any such permitted use 254 | shall be factual and shall not be made so as to suggest any kind 255 | of endorsement or implication of involvement by the Licensor or 256 | its personnel. 257 | 258 | 8.3 CERN may publish updated versions and variants of this Licence 259 | which it considers to be in the spirit of this version, but may 260 | differ in detail to address new problems or concerns. New 261 | versions will be published with a unique version number and a 262 | variant identifier specifying the variant. If the Licensor has 263 | specified that a given variant applies to the Covered Source 264 | without specifying a version, You may treat that Covered Source 265 | as being released under any version of the CERN-OHL with that 266 | variant. If no variant is specified, the Covered Source shall be 267 | treated as being released under CERN-OHL-S. The Licensor may 268 | also specify that the Covered Source is subject to a specific 269 | version of the CERN-OHL or any later version in which case You 270 | may apply this or any later version of CERN-OHL with the same 271 | variant identifier published by CERN. 272 | 273 | 8.4 This Licence shall terminate with immediate effect if You fail 274 | to comply with any of its terms and conditions. 275 | 276 | 8.5 However, if You cease all breaches of this Licence, then Your 277 | Licence from any Licensor is reinstated unless such Licensor has 278 | terminated this Licence by giving You, while You remain in 279 | breach, a notice specifying the breach and requiring You to cure 280 | it within 30 days, and You have failed to come into compliance 281 | in all material respects by the end of the 30 day period. Should 282 | You repeat the breach after receipt of a cure notice and 283 | subsequent reinstatement, this Licence will terminate 284 | immediately and permanently. Section 6 shall continue to apply 285 | after any termination. 286 | 287 | 8.6 This Licence shall not be enforceable except by a Licensor 288 | acting as such, and third party beneficiary rights are 289 | specifically excluded. 290 | 291 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LAEMP-Panel 2 | 3 | LAEMP-Panel is a Zigbee controllable (e.g. philips hue) RGBY + W spot, which can be soldered at home and is easy to assemble. The extra yellow channel gives a much wider dynamic. This is archived by alternating CW/WW/A (Cold-, Warm-White, Amber) and RGB LEDs. LAEMP-Panel can be mounted on mini-tripods and is powered via 5V USB Type-C. A ZigBee bridge (e.g. Philips Hue) is needed for control. 4 | 5 | 6 | 7 | 8 | 11 | 14 | 15 | 16 |
9 | 10 | 12 | 13 |
17 | 18 | ### Sister project 19 | 20 | LAEMP-Panel is a sister project to [LAEMP-Prism](https://github.com/Jana-Marie/LAEMP-Prism) 21 | 22 | ## Firmware 23 | 24 | There are two firmwares to be flashed, one for the ESP32 and one for the E75-2G4M20S. 25 | 26 | ### ESP32 27 | 28 | This is a simple Arduino project and can be flashed via Arduino (initially built on Arduino 1.8.19). 29 | 30 | ### E75 31 | 32 | Please refer to the awesome works of [PeeVeeOne](https://peeveeone.com/zll-tldr/) to flash `Light_ColorLight_JN5168_RGB` onto the E75-2G4M20S module. 33 | 34 | ## Todo 35 | 36 | - [ ] Profile CRI 37 | - [ ] Increase CRI by selectively adding colors to WW/CW (i.e. green) 38 | - [ ] Update Baseboard to v2 39 | 40 | ## License 41 | 42 | Copyright Jana Marie Hemsing 2023. 43 | This source describes Open Hardware and is licensed under the CERN- 44 | OHL-S v2. 45 | 46 | You may redistribute and modify this source and make products using it 47 | under the terms of the CERN-OHL-S v2 48 | ([LICENSE](/LICENSE)). 49 | 50 | This source is distributed WITHOUT ANY EXPRESS OR IMPLIED 51 | WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY 52 | QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see 53 | the CERN-OHL-S v2 for applicable conditions. 54 | 55 | Source location: https://github.com/Jana-Marie/LAEMP-Panel/ 56 | As per CERN-OHL-S v2 section 4, should You produce hardware based 57 | on this source, You must where practicable maintain the Source Location 58 | visible on the external case of LAEMP-Panel or other products you make using 59 | this source 60 | -------------------------------------------------------------------------------- /design/bottom_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/bottom_text.png -------------------------------------------------------------------------------- /design/img/full_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/img/full_open.png -------------------------------------------------------------------------------- /design/img/mainboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/img/mainboard.png -------------------------------------------------------------------------------- /design/img/usb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/img/usb.png -------------------------------------------------------------------------------- /design/laemp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/laemp.png -------------------------------------------------------------------------------- /design/text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 42 | 44 | 45 | 47 | image/svg+xml 48 | 50 | 51 | 52 | 53 | 54 | 58 | LÄMP 71 | github.com/Jana-Marie/laemp@_Jana_Marie 2021Zum Vorteil der Benützer dieserLeuchteinrichtung ist der Konsum vonRauschgift während des Betriebs untersagt. 104 | 117 | 118 | -------------------------------------------------------------------------------- /design/wall-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/design/wall-text.png -------------------------------------------------------------------------------- /firmware/leamp_panel/leamp_panel.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define minf(a,b) (((a)<(b))?(a):(b)) 4 | #define maxf(a,b) (((a)>(b))?(a):(b)) 5 | 6 | #define PIN 2 7 | Adafruit_NeoPixel strip = Adafruit_NeoPixel(45, PIN, NEO_GRB + NEO_KHZ800); 8 | 9 | #define R_IN 33 10 | #define G_IN 34 11 | #define B_IN 35 12 | 13 | int16_t adc_color[3] = {0, 0, 0}; 14 | uint8_t hue_color[3] = {0, 0, 0}; 15 | 16 | uint16_t wakeup = false; 17 | 18 | byte neopix_gamma[] = { 19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 21 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 22 | 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 23 | 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 24 | 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 25 | 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26 | 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 27 | 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 28 | 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 29 | 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 30 | 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 31 | 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 32 | 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 33 | 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 34 | 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 35 | }; 36 | 37 | struct rgbywwcw { 38 | uint8_t r; 39 | uint8_t g; 40 | uint8_t b; 41 | uint8_t y; 42 | uint8_t ww; 43 | uint8_t cw; 44 | }; 45 | 46 | rgbywwcw led; 47 | rgbywwcw led_f; 48 | 49 | typedef struct { 50 | double h; // angle in degrees 51 | double s; // a fraction between 0 and 1 52 | double v; // a fraction between 0 and 1 53 | } hsv; 54 | 55 | void setup() { 56 | Serial.begin(115200); 57 | strip.begin(); 58 | strip.show(); 59 | strip.setBrightness(255); 60 | delay(500); 61 | } 62 | 63 | uint16_t i; 64 | 65 | void loop() { 66 | adc_color[0] = (analogRead(R_IN)); 67 | adc_color[1] = (analogRead(G_IN)); 68 | adc_color[2] = (analogRead(B_IN)); 69 | 70 | Serial.print(adc_color[0]); 71 | Serial.print("\t"); 72 | Serial.print(adc_color[1]); 73 | Serial.print("\t"); 74 | Serial.println(adc_color[2]); 75 | 76 | if (adc_color[0] >= 4094 && adc_color[1] >= 4094 && adc_color[2] >= 4094) { 77 | hue_color[0] = 0; 78 | hue_color[1] = 0; 79 | hue_color[2] = 0; 80 | wakeup = 50; 81 | setColor(rgbywwcw{0, 0, 0, 0, 0, 0}); 82 | delay(50); 83 | } else { 84 | hue_color[0] = map(adc_color[0], 0, 4095, wakeup, 0); 85 | hue_color[1] = map(adc_color[1], 0, 4095, wakeup, 0); 86 | hue_color[2] = map(adc_color[2], 0, 4095, wakeup, 0); 87 | wakeup++; 88 | if (wakeup > 255) { 89 | wakeup = 255; 90 | } 91 | setColor(_f(rgb_to_rgbw(hsv_to_rgby_naive(rgb2hsv(hue_color[0] / 255.0, hue_color[1] / 255.0, hue_color[2] / 255.0))))); 92 | delay(1); 93 | } 94 | 95 | //i++; 96 | //i = i %360; 97 | //setColor(_f(rgb_to_rgbw(hsv_to_rgby_naive(test(i))))); 98 | //Serial.println("Meow"); 99 | delay(10); 100 | } 101 | 102 | hsv test(uint16_t i){ 103 | hsv _hsv; 104 | _hsv.s = 1.0; 105 | _hsv.v =1.0; 106 | _hsv.h = i; 107 | return _hsv; 108 | } 109 | 110 | void setColor(rgbywwcw in) { 111 | uint32_t col = 0; 112 | uint32_t white = 0; 113 | 114 | col = strip.Color(neopix_gamma[in.r], neopix_gamma[in.g], neopix_gamma[in.b]); 115 | white = strip.Color(neopix_gamma[in.y], neopix_gamma[in.cw], neopix_gamma[in.ww]); 116 | 117 | strip.setPixelColor(0, (0,0,0)); 118 | 119 | for (uint16_t i = 1; i < strip.numPixels(); i += 2) { 120 | //if (i == 18 || i == 40) strip.setPixelColor(i + 1, col); 121 | strip.setPixelColor(i, col); 122 | } 123 | for (uint16_t i = 2; i < strip.numPixels(); i += 2) { 124 | //if (i == 19 || i == 41) strip.setPixelColor(i - 1, white); 125 | strip.setPixelColor(i, white); 126 | } 127 | strip.show(); 128 | } 129 | 130 | #define FILT_COEF 0.1 131 | rgbywwcw _f(rgbywwcw in) { 132 | led_f.r = (led_f.r * (1.0 - FILT_COEF)) + (in.r * FILT_COEF); 133 | led_f.g = (led_f.g * (1.0 - FILT_COEF)) + (in.g * FILT_COEF); 134 | led_f.b = (led_f.b * (1.0 - FILT_COEF)) + (in.b * FILT_COEF); 135 | led_f.y = (led_f.y * (1.0 - FILT_COEF)) + (in.y * FILT_COEF); 136 | led_f.ww = (led_f.ww * (1.0 - FILT_COEF)) + (in.ww * FILT_COEF); 137 | led_f.cw = (led_f.cw * (1.0 - FILT_COEF)) + (in.cw * FILT_COEF); 138 | return led_f; 139 | } 140 | 141 | 142 | rgbywwcw calculateColorTemp(rgbywwcw in) { 143 | rgbywwcw out = in; 144 | float temp = (in.b - in.y); 145 | out.ww = min(uint8_t(min(int(out.ww + temp), 255)), out.ww); 146 | out.cw = min(uint8_t(min(int(out.cw - temp), 255)), out.cw); 147 | return out; 148 | } 149 | 150 | rgbywwcw rgb_to_rgbywwcw_struct(uint8_t r, uint8_t g, uint8_t b) { 151 | rgbywwcw out = {r, g, b, 0, 0, 0}; 152 | return out; 153 | } 154 | 155 | rgbywwcw rgb_to_rgbw(rgbywwcw in) { 156 | rgbywwcw out; 157 | //Get the maximum between R, G, and B 158 | double tM = max(in.r, max(in.g, in.b)); 159 | uint32_t ret = 0; 160 | 161 | //If the maximum value is 0, immediately return pure black. 162 | if (tM == 0) { 163 | out = {0, 0, 0, 0, 0, 0}; 164 | return out; 165 | } 166 | 167 | //This section serves to figure out what the color with 100% hue is 168 | double multiplier = 255.0f / tM; 169 | double hR = in.r * multiplier; 170 | double hG = in.g * multiplier; 171 | double hB = in.b * multiplier; 172 | 173 | //This calculates the Whiteness (not strictly speaking Luminance) of the color 174 | double M = max(hR, max(hG, hB)); 175 | double m = min(hR, min(hG, hB)); 176 | double Luminance = ((M + m) / 2.0f - 127.5f) * (255.0f / 127.5f) / multiplier; 177 | 178 | //Calculate the output values 179 | int Wo = uint32_t(Luminance); 180 | int Bo = uint32_t(in.b - Luminance); 181 | int Ro = uint32_t(in.r - Luminance); 182 | int Go = uint32_t(in.g - Luminance); 183 | 184 | //Trim them so that they are all between 0 and 255 185 | if (Wo < 0) Wo = 0; 186 | if (Bo < 0) Bo = 0; 187 | if (Ro < 0) Ro = 0; 188 | if (Go < 0) Go = 0; 189 | if (Wo > 255) Wo = 255; 190 | if (Bo > 255) Bo = 255; 191 | if (Ro > 255) Ro = 255; 192 | if (Go > 255) Go = 255; 193 | 194 | out.r = Ro; 195 | out.g = Go; 196 | out.b = Bo; 197 | out.y = in.y; 198 | out.ww = Wo; 199 | out.cw = Wo / 2; 200 | 201 | return out; 202 | } 203 | 204 | hsv rgb2hsv(double r, double g, double b) { 205 | hsv out; 206 | double min, max, delta; 207 | 208 | min = r < g ? r : g; 209 | min = min < b ? min : b; 210 | 211 | max = r > g ? r : g; 212 | max = max > b ? max : b; 213 | 214 | out.v = max; // v 215 | delta = max - min; 216 | if (delta < 0.00001) 217 | { 218 | out.s = 0; 219 | out.h = 0; // undefined, maybe nan? 220 | return out; 221 | } 222 | if ( max > 0.0 ) { // NOTE: if Max is == 0, this divide would cause a crash 223 | out.s = (delta / max); // s 224 | } else { 225 | // if max is 0, then r = g = b = 0 226 | // s = 0, h is undefined 227 | out.s = 0.0; 228 | out.h = NAN; // its now undefined 229 | return out; 230 | } 231 | if ( r >= max ) // > is bogus, just keeps compilor happy 232 | out.h = ( g - b ) / delta; // between yellow & magenta 233 | else if ( g >= max ) 234 | out.h = 2.0 + ( b - r ) / delta; // between cyan & yellow 235 | else 236 | out.h = 4.0 + ( r - g ) / delta; // between magenta & cyan 237 | 238 | out.h *= 60.0; // degrees 239 | 240 | if ( out.h < 0.0 ) 241 | out.h += 360.0; 242 | 243 | return out; 244 | } 245 | 246 | rgbywwcw hsv_to_rgby_naive(hsv hsv) { 247 | rgbywwcw _tmpmdl; 248 | memset(&_tmpmdl, 0, sizeof(_tmpmdl)); 249 | return hsv_to_rgby_naive(hsv.h / 360.0, hsv.s, hsv.v, _tmpmdl); 250 | } 251 | 252 | rgbywwcw hsv_to_rgby_naive(double h, double s, double v) { 253 | rgbywwcw _tmpmdl; 254 | memset(&_tmpmdl, 0, sizeof(_tmpmdl)); 255 | return hsv_to_rgby_naive(h, s, v, _tmpmdl); 256 | } 257 | 258 | 259 | rgbywwcw hsv_to_rgby_naive(double h, double s, double v, rgbywwcw colorModel) { 260 | if (s == 0.0) { 261 | v = v * 255; 262 | 263 | colorModel = (struct rgbywwcw) { 264 | v, v, v, v, colorModel.ww, colorModel.cw 265 | }; 266 | } 267 | 268 | int i = int(h * 8.0); 269 | 270 | double f = (h * 8.0) - i; 271 | double b = v * (1.0 - s); 272 | double d = v * (1.0 - s * f); 273 | double u = v * (1.0 - s * (1.0 - f)); 274 | i = i % 8; 275 | 276 | d = d * 255; 277 | b = b * 255; 278 | v = v * 255; 279 | u = u * 255; 280 | 281 | if (i == 0)colorModel = (struct rgbywwcw) { 282 | v, b, b, u, colorModel.ww, colorModel.cw 283 | }; 284 | 285 | if (i == 1)colorModel = (struct rgbywwcw) { 286 | d, b, b, v, colorModel.ww, colorModel.cw 287 | }; 288 | 289 | if (i == 2)colorModel = (struct rgbywwcw) { 290 | b, u, b, v, colorModel.ww, colorModel.cw 291 | }; 292 | 293 | if (i == 3)colorModel = (struct rgbywwcw) { 294 | b, v, b, d, colorModel.ww, colorModel.cw 295 | }; 296 | 297 | if (i == 4)colorModel = (struct rgbywwcw) { 298 | b, v, u, b, colorModel.ww, colorModel.cw 299 | }; 300 | 301 | if (i == 5)colorModel = (struct rgbywwcw) { 302 | b, d, v, b, colorModel.ww, colorModel.cw 303 | }; 304 | 305 | if (i == 6)colorModel = (struct rgbywwcw) { 306 | u, b, v, b, colorModel.ww, colorModel.cw 307 | }; 308 | 309 | if (i == 7)colorModel = (struct rgbywwcw) { 310 | v, b, d, b, colorModel.ww, colorModel.cw 311 | }; 312 | return colorModel; 313 | } 314 | -------------------------------------------------------------------------------- /firmware/zigbee/Light_ColorLight_JN5168_RGB.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/firmware/zigbee/Light_ColorLight_JN5168_RGB.bin -------------------------------------------------------------------------------- /laemp_base/laemp_base.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 0 67 | }, 68 | "meta": { 69 | "filename": "laemp_base.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /laemp_base/laemp_base.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.049999999999999996, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.09999999999999999, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.12, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.19999999999999998 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "filename": "board_design_settings.json", 55 | "version": 2 56 | }, 57 | "rule_severities": { 58 | "annular_width": "error", 59 | "clearance": "error", 60 | "copper_edge_clearance": "error", 61 | "courtyards_overlap": "error", 62 | "diff_pair_gap_out_of_range": "error", 63 | "diff_pair_uncoupled_length_too_long": "error", 64 | "drill_out_of_range": "error", 65 | "duplicate_footprints": "warning", 66 | "extra_footprint": "warning", 67 | "footprint_type_mismatch": "error", 68 | "hole_clearance": "error", 69 | "hole_near_hole": "error", 70 | "invalid_outline": "error", 71 | "item_on_disabled_layer": "error", 72 | "items_not_allowed": "error", 73 | "length_out_of_range": "error", 74 | "malformed_courtyard": "error", 75 | "microvia_drill_out_of_range": "error", 76 | "missing_courtyard": "ignore", 77 | "missing_footprint": "warning", 78 | "net_conflict": "warning", 79 | "npth_inside_courtyard": "ignore", 80 | "padstack": "error", 81 | "pth_inside_courtyard": "ignore", 82 | "shorting_items": "error", 83 | "silk_over_copper": "warning", 84 | "silk_overlap": "warning", 85 | "skew_out_of_range": "error", 86 | "through_hole_pad_without_hole": "error", 87 | "too_many_vias": "error", 88 | "track_dangling": "warning", 89 | "track_width": "error", 90 | "tracks_crossing": "error", 91 | "unconnected_items": "error", 92 | "unresolved_variable": "error", 93 | "via_dangling": "warning", 94 | "zone_has_empty_net": "error", 95 | "zones_intersect": "error" 96 | }, 97 | "rule_severitieslegacy_courtyards_overlap": false, 98 | "rule_severitieslegacy_no_courtyard_defined": false, 99 | "rules": { 100 | "allow_blind_buried_vias": false, 101 | "allow_microvias": false, 102 | "max_error": 0.005, 103 | "min_clearance": 0.0, 104 | "min_copper_edge_clearance": 0.024999999999999998, 105 | "min_hole_clearance": 0.25, 106 | "min_hole_to_hole": 0.25, 107 | "min_microvia_diameter": 0.19999999999999998, 108 | "min_microvia_drill": 0.09999999999999999, 109 | "min_silk_clearance": 0.0, 110 | "min_through_hole_diameter": 0.3, 111 | "min_track_width": 0.19999999999999998, 112 | "min_via_annular_width": 0.049999999999999996, 113 | "min_via_diameter": 0.39999999999999997, 114 | "use_height_for_length_calcs": true 115 | }, 116 | "track_widths": [ 117 | 0.0, 118 | 0.2, 119 | 0.3, 120 | 0.4, 121 | 0.5, 122 | 0.6, 123 | 0.8, 124 | 1.0, 125 | 2.0 126 | ], 127 | "via_dimensions": [], 128 | "zones_allow_external_fillets": false, 129 | "zones_use_no_outline": true 130 | }, 131 | "layer_presets": [] 132 | }, 133 | "boards": [], 134 | "cvpcb": { 135 | "equivalence_files": [] 136 | }, 137 | "erc": { 138 | "erc_exclusions": [], 139 | "meta": { 140 | "version": 0 141 | }, 142 | "pin_map": [ 143 | [ 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 0, 150 | 1, 151 | 0, 152 | 0, 153 | 0, 154 | 0, 155 | 2 156 | ], 157 | [ 158 | 0, 159 | 2, 160 | 0, 161 | 1, 162 | 0, 163 | 0, 164 | 1, 165 | 0, 166 | 2, 167 | 2, 168 | 2, 169 | 2 170 | ], 171 | [ 172 | 0, 173 | 0, 174 | 0, 175 | 0, 176 | 0, 177 | 0, 178 | 1, 179 | 0, 180 | 1, 181 | 0, 182 | 1, 183 | 2 184 | ], 185 | [ 186 | 0, 187 | 1, 188 | 0, 189 | 0, 190 | 0, 191 | 0, 192 | 1, 193 | 1, 194 | 2, 195 | 1, 196 | 1, 197 | 2 198 | ], 199 | [ 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 0, 205 | 0, 206 | 1, 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 2 212 | ], 213 | [ 214 | 0, 215 | 0, 216 | 0, 217 | 0, 218 | 0, 219 | 0, 220 | 0, 221 | 0, 222 | 0, 223 | 0, 224 | 0, 225 | 2 226 | ], 227 | [ 228 | 1, 229 | 1, 230 | 1, 231 | 1, 232 | 1, 233 | 0, 234 | 1, 235 | 1, 236 | 1, 237 | 1, 238 | 1, 239 | 2 240 | ], 241 | [ 242 | 0, 243 | 0, 244 | 0, 245 | 1, 246 | 0, 247 | 0, 248 | 1, 249 | 0, 250 | 0, 251 | 0, 252 | 0, 253 | 2 254 | ], 255 | [ 256 | 0, 257 | 2, 258 | 1, 259 | 2, 260 | 0, 261 | 0, 262 | 1, 263 | 0, 264 | 2, 265 | 2, 266 | 2, 267 | 2 268 | ], 269 | [ 270 | 0, 271 | 2, 272 | 0, 273 | 1, 274 | 0, 275 | 0, 276 | 1, 277 | 0, 278 | 2, 279 | 0, 280 | 0, 281 | 2 282 | ], 283 | [ 284 | 0, 285 | 2, 286 | 1, 287 | 1, 288 | 0, 289 | 0, 290 | 1, 291 | 0, 292 | 2, 293 | 0, 294 | 0, 295 | 2 296 | ], 297 | [ 298 | 2, 299 | 2, 300 | 2, 301 | 2, 302 | 2, 303 | 2, 304 | 2, 305 | 2, 306 | 2, 307 | 2, 308 | 2, 309 | 2 310 | ] 311 | ], 312 | "rule_severities": { 313 | "bus_definition_conflict": "error", 314 | "bus_entry_needed": "error", 315 | "bus_label_syntax": "error", 316 | "bus_to_bus_conflict": "error", 317 | "bus_to_net_conflict": "error", 318 | "different_unit_footprint": "error", 319 | "different_unit_net": "error", 320 | "duplicate_reference": "error", 321 | "duplicate_sheet_names": "error", 322 | "extra_units": "error", 323 | "global_label_dangling": "warning", 324 | "hier_label_mismatch": "error", 325 | "label_dangling": "error", 326 | "lib_symbol_issues": "warning", 327 | "multiple_net_names": "warning", 328 | "net_not_bus_member": "warning", 329 | "no_connect_connected": "warning", 330 | "no_connect_dangling": "warning", 331 | "pin_not_connected": "error", 332 | "pin_not_driven": "error", 333 | "pin_to_pin": "warning", 334 | "power_pin_not_driven": "error", 335 | "similar_labels": "warning", 336 | "unannotated": "error", 337 | "unit_value_mismatch": "error", 338 | "unresolved_variable": "error", 339 | "wire_dangling": "error" 340 | } 341 | }, 342 | "libraries": { 343 | "pinned_footprint_libs": [], 344 | "pinned_symbol_libs": [] 345 | }, 346 | "meta": { 347 | "filename": "hex_base.kicad_pro", 348 | "version": 1 349 | }, 350 | "net_settings": { 351 | "classes": [ 352 | { 353 | "bus_width": 12.0, 354 | "clearance": 0.127, 355 | "diff_pair_gap": 0.25, 356 | "diff_pair_via_gap": 0.25, 357 | "diff_pair_width": 0.2, 358 | "line_style": 0, 359 | "microvia_diameter": 0.3, 360 | "microvia_drill": 0.1, 361 | "name": "Default", 362 | "pcb_color": "rgba(0, 0, 0, 0.000)", 363 | "schematic_color": "rgba(0, 0, 0, 0.000)", 364 | "track_width": 0.2, 365 | "via_diameter": 0.6, 366 | "via_drill": 0.3, 367 | "wire_width": 6.0 368 | } 369 | ], 370 | "meta": { 371 | "version": 2 372 | }, 373 | "net_colors": null 374 | }, 375 | "pcbnew": { 376 | "last_paths": { 377 | "gencad": "", 378 | "idf": "", 379 | "netlist": "", 380 | "specctra_dsn": "", 381 | "step": "hex_base_panel.step", 382 | "vrml": "" 383 | }, 384 | "page_layout_descr_file": "" 385 | }, 386 | "schematic": { 387 | "annotate_start_num": 0, 388 | "drawing": { 389 | "default_line_thickness": 6.0, 390 | "default_text_size": 50.0, 391 | "field_names": [], 392 | "intersheets_ref_own_page": false, 393 | "intersheets_ref_prefix": "", 394 | "intersheets_ref_short": false, 395 | "intersheets_ref_show": false, 396 | "intersheets_ref_suffix": "", 397 | "junction_size_choice": 3, 398 | "label_size_ratio": 0.25, 399 | "pin_symbol_size": 25.0, 400 | "text_offset_ratio": 0.08 401 | }, 402 | "legacy_lib_dir": "", 403 | "legacy_lib_list": [], 404 | "meta": { 405 | "version": 1 406 | }, 407 | "net_format_name": "", 408 | "ngspice": { 409 | "fix_include_paths": true, 410 | "fix_passive_vals": false, 411 | "meta": { 412 | "version": 0 413 | }, 414 | "model_mode": 0, 415 | "workbook_filename": "" 416 | }, 417 | "page_layout_descr_file": "", 418 | "plot_directory": "", 419 | "spice_adjust_passive_values": false, 420 | "spice_external_command": "spice \"%I\"", 421 | "subpart_first_id": 65, 422 | "subpart_id_separator": 0 423 | }, 424 | "sheets": [ 425 | [ 426 | "bfa445ac-246e-4db8-a60c-beb85501bf65", 427 | "" 428 | ] 429 | ], 430 | "text_variables": {} 431 | } 432 | -------------------------------------------------------------------------------- /laemp_base/laemp_base.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/laemp_base/laemp_base.pdf -------------------------------------------------------------------------------- /laemp_led_board/laemp_led_board.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 0 67 | }, 68 | "meta": { 69 | "filename": "laemp_led_board.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /laemp_led_board/laemp_led_board.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.049999999999999996, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.09999999999999999, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.12, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.19999999999999998 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "filename": "board_design_settings.json", 55 | "version": 2 56 | }, 57 | "rule_severities": { 58 | "annular_width": "error", 59 | "clearance": "error", 60 | "copper_edge_clearance": "error", 61 | "courtyards_overlap": "error", 62 | "diff_pair_gap_out_of_range": "error", 63 | "diff_pair_uncoupled_length_too_long": "error", 64 | "drill_out_of_range": "error", 65 | "duplicate_footprints": "warning", 66 | "extra_footprint": "warning", 67 | "footprint_type_mismatch": "error", 68 | "hole_clearance": "error", 69 | "hole_near_hole": "error", 70 | "invalid_outline": "error", 71 | "item_on_disabled_layer": "error", 72 | "items_not_allowed": "error", 73 | "length_out_of_range": "error", 74 | "malformed_courtyard": "error", 75 | "microvia_drill_out_of_range": "error", 76 | "missing_courtyard": "ignore", 77 | "missing_footprint": "warning", 78 | "net_conflict": "warning", 79 | "npth_inside_courtyard": "ignore", 80 | "padstack": "error", 81 | "pth_inside_courtyard": "ignore", 82 | "shorting_items": "error", 83 | "silk_over_copper": "warning", 84 | "silk_overlap": "warning", 85 | "skew_out_of_range": "error", 86 | "through_hole_pad_without_hole": "error", 87 | "too_many_vias": "error", 88 | "track_dangling": "warning", 89 | "track_width": "error", 90 | "tracks_crossing": "error", 91 | "unconnected_items": "error", 92 | "unresolved_variable": "error", 93 | "via_dangling": "warning", 94 | "zone_has_empty_net": "error", 95 | "zones_intersect": "error" 96 | }, 97 | "rule_severitieslegacy_courtyards_overlap": false, 98 | "rule_severitieslegacy_no_courtyard_defined": false, 99 | "rules": { 100 | "allow_blind_buried_vias": false, 101 | "allow_microvias": false, 102 | "max_error": 0.005, 103 | "min_clearance": 0.0, 104 | "min_copper_edge_clearance": 0.024999999999999998, 105 | "min_hole_clearance": 0.25, 106 | "min_hole_to_hole": 0.25, 107 | "min_microvia_diameter": 0.19999999999999998, 108 | "min_microvia_drill": 0.09999999999999999, 109 | "min_silk_clearance": 0.0, 110 | "min_through_hole_diameter": 0.3, 111 | "min_track_width": 0.19999999999999998, 112 | "min_via_annular_width": 0.049999999999999996, 113 | "min_via_diameter": 0.39999999999999997, 114 | "use_height_for_length_calcs": true 115 | }, 116 | "track_widths": [ 117 | 0.0, 118 | 0.2, 119 | 0.3, 120 | 0.4, 121 | 0.5, 122 | 0.6, 123 | 0.8, 124 | 1.0, 125 | 2.0 126 | ], 127 | "via_dimensions": [], 128 | "zones_allow_external_fillets": false, 129 | "zones_use_no_outline": true 130 | }, 131 | "layer_presets": [] 132 | }, 133 | "boards": [], 134 | "cvpcb": { 135 | "equivalence_files": [] 136 | }, 137 | "erc": { 138 | "erc_exclusions": [], 139 | "meta": { 140 | "version": 0 141 | }, 142 | "pin_map": [ 143 | [ 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 0, 150 | 1, 151 | 0, 152 | 0, 153 | 0, 154 | 0, 155 | 2 156 | ], 157 | [ 158 | 0, 159 | 2, 160 | 0, 161 | 1, 162 | 0, 163 | 0, 164 | 1, 165 | 0, 166 | 2, 167 | 2, 168 | 2, 169 | 2 170 | ], 171 | [ 172 | 0, 173 | 0, 174 | 0, 175 | 0, 176 | 0, 177 | 0, 178 | 1, 179 | 0, 180 | 1, 181 | 0, 182 | 1, 183 | 2 184 | ], 185 | [ 186 | 0, 187 | 1, 188 | 0, 189 | 0, 190 | 0, 191 | 0, 192 | 1, 193 | 1, 194 | 2, 195 | 1, 196 | 1, 197 | 2 198 | ], 199 | [ 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 0, 205 | 0, 206 | 1, 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 2 212 | ], 213 | [ 214 | 0, 215 | 0, 216 | 0, 217 | 0, 218 | 0, 219 | 0, 220 | 0, 221 | 0, 222 | 0, 223 | 0, 224 | 0, 225 | 2 226 | ], 227 | [ 228 | 1, 229 | 1, 230 | 1, 231 | 1, 232 | 1, 233 | 0, 234 | 1, 235 | 1, 236 | 1, 237 | 1, 238 | 1, 239 | 2 240 | ], 241 | [ 242 | 0, 243 | 0, 244 | 0, 245 | 1, 246 | 0, 247 | 0, 248 | 1, 249 | 0, 250 | 0, 251 | 0, 252 | 0, 253 | 2 254 | ], 255 | [ 256 | 0, 257 | 2, 258 | 1, 259 | 2, 260 | 0, 261 | 0, 262 | 1, 263 | 0, 264 | 2, 265 | 2, 266 | 2, 267 | 2 268 | ], 269 | [ 270 | 0, 271 | 2, 272 | 0, 273 | 1, 274 | 0, 275 | 0, 276 | 1, 277 | 0, 278 | 2, 279 | 0, 280 | 0, 281 | 2 282 | ], 283 | [ 284 | 0, 285 | 2, 286 | 1, 287 | 1, 288 | 0, 289 | 0, 290 | 1, 291 | 0, 292 | 2, 293 | 0, 294 | 0, 295 | 2 296 | ], 297 | [ 298 | 2, 299 | 2, 300 | 2, 301 | 2, 302 | 2, 303 | 2, 304 | 2, 305 | 2, 306 | 2, 307 | 2, 308 | 2, 309 | 2 310 | ] 311 | ], 312 | "rule_severities": { 313 | "bus_definition_conflict": "error", 314 | "bus_entry_needed": "error", 315 | "bus_label_syntax": "error", 316 | "bus_to_bus_conflict": "error", 317 | "bus_to_net_conflict": "error", 318 | "different_unit_footprint": "error", 319 | "different_unit_net": "error", 320 | "duplicate_reference": "error", 321 | "duplicate_sheet_names": "error", 322 | "extra_units": "error", 323 | "global_label_dangling": "warning", 324 | "hier_label_mismatch": "error", 325 | "label_dangling": "error", 326 | "lib_symbol_issues": "warning", 327 | "multiple_net_names": "warning", 328 | "net_not_bus_member": "warning", 329 | "no_connect_connected": "warning", 330 | "no_connect_dangling": "warning", 331 | "pin_not_connected": "error", 332 | "pin_not_driven": "error", 333 | "pin_to_pin": "warning", 334 | "power_pin_not_driven": "error", 335 | "similar_labels": "warning", 336 | "unannotated": "error", 337 | "unit_value_mismatch": "error", 338 | "unresolved_variable": "error", 339 | "wire_dangling": "error" 340 | } 341 | }, 342 | "libraries": { 343 | "pinned_footprint_libs": [], 344 | "pinned_symbol_libs": [] 345 | }, 346 | "meta": { 347 | "filename": "hex_led_board.kicad_pro", 348 | "version": 1 349 | }, 350 | "net_settings": { 351 | "classes": [ 352 | { 353 | "bus_width": 12.0, 354 | "clearance": 0.127, 355 | "diff_pair_gap": 0.25, 356 | "diff_pair_via_gap": 0.25, 357 | "diff_pair_width": 0.2, 358 | "line_style": 0, 359 | "microvia_diameter": 0.3, 360 | "microvia_drill": 0.1, 361 | "name": "Default", 362 | "pcb_color": "rgba(0, 0, 0, 0.000)", 363 | "schematic_color": "rgba(0, 0, 0, 0.000)", 364 | "track_width": 0.2, 365 | "via_diameter": 0.6, 366 | "via_drill": 0.3, 367 | "wire_width": 6.0 368 | } 369 | ], 370 | "meta": { 371 | "version": 2 372 | }, 373 | "net_colors": null 374 | }, 375 | "pcbnew": { 376 | "last_paths": { 377 | "gencad": "", 378 | "idf": "", 379 | "netlist": "", 380 | "specctra_dsn": "", 381 | "step": "", 382 | "vrml": "" 383 | }, 384 | "page_layout_descr_file": "" 385 | }, 386 | "schematic": { 387 | "annotate_start_num": 0, 388 | "drawing": { 389 | "default_line_thickness": 6.0, 390 | "default_text_size": 50.0, 391 | "field_names": [], 392 | "intersheets_ref_own_page": false, 393 | "intersheets_ref_prefix": "", 394 | "intersheets_ref_short": false, 395 | "intersheets_ref_show": false, 396 | "intersheets_ref_suffix": "", 397 | "junction_size_choice": 3, 398 | "label_size_ratio": 0.25, 399 | "pin_symbol_size": 0.0, 400 | "text_offset_ratio": 0.08 401 | }, 402 | "legacy_lib_dir": "", 403 | "legacy_lib_list": [], 404 | "meta": { 405 | "version": 1 406 | }, 407 | "net_format_name": "", 408 | "ngspice": { 409 | "fix_include_paths": true, 410 | "fix_passive_vals": false, 411 | "meta": { 412 | "version": 0 413 | }, 414 | "model_mode": 0, 415 | "workbook_filename": "" 416 | }, 417 | "page_layout_descr_file": "", 418 | "plot_directory": "", 419 | "spice_adjust_passive_values": false, 420 | "spice_external_command": "spice \"%I\"", 421 | "subpart_first_id": 65, 422 | "subpart_id_separator": 0 423 | }, 424 | "sheets": [ 425 | [ 426 | "db83d0af-e085-4050-8496-fa2ebdecbd62", 427 | "" 428 | ] 429 | ], 430 | "text_variables": {} 431 | } 432 | -------------------------------------------------------------------------------- /laemp_led_board/laemp_led_board.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/LAEMP-Panel/d1cdb3ae922faf0298bcd4eeecd35dcd821513cb/laemp_led_board/laemp_led_board.pdf --------------------------------------------------------------------------------