ARDUINO Куб 4х4х4 на RGB светодиодах

pi1985

★✩✩✩✩✩✩
2 Ноя 2018
21
15
@Wan-Derer, потренироваться, конечно, можно. Но для меня куб свою задачу выполнил в таком виде, как он есть сейчас. Для меня сейчас более важно сделать покадровую анимацию, чем ШИМ.
А куб я сделал по нескольким причинам:
1. Хотелось цвета
2. Потренироваться перед созданием старшего брата.
3. Ребёнку нравится.
4. Хорошо смотрится в качестве замены гирлянде.
А чтобы был ШИМ, ко мне едут TLC5940. Программировать их будет то ещё развлечение.
 
Изменено:

ProShow

✩✩✩✩✩✩✩
15 Дек 2018
11
0
@pi1985, TLC5940 это, конечно, хорошо, но есть ли его аналоги или варианты с контролем не по катодам, а по анодам?
 

ProShow

✩✩✩✩✩✩✩
15 Дек 2018
11
0
@Wan-Derer, у меня светодиоды с общим анодом и мне нужен ШИМ на кристаллики R,G,B раздельно, а не все сразу. Мне не яркость нужно менять, а цвет.
 

pi1985

★✩✩✩✩✩✩
2 Ноя 2018
21
15
Нарисовал нижнюю часть корпуса в OpenScad. Пробовал напечатать, из-за слабого обдува пластик потёк и ничего не получилось, так что фото потом.

box.png

C++:
//Размеры платы
board_size_x = 116.9;
board_size_y = 115.7;
board_size_z = 2;
board_pos_x = 4;
board_pos_y = 4;
board_color = "Blue";

//Отверстия в плате
board_hole_diam = 3;
board_hole1_pos_x = 2.5+board_hole_diam/2;
board_hole1_pos_y = 2+board_hole_diam/2;
board_hole2_pos_x = 2.6+board_hole_diam/2;
board_hole2_pos_y = board_size_y-2.7-board_hole_diam/2;
board_hole3_pos_x = board_size_x-2.4-board_hole_diam/2;
board_hole3_pos_y = board_size_y-2.8-board_hole_diam/2;
board_hole4_pos_x = board_size_x-2.2-board_hole_diam/2;
board_hole4_pos_y = 3.1+board_hole_diam/2;

//Размеры корпуса
box_size_x = 125;
box_size_y = 125;
box_size_z = 25;
box_thickness = 2;
box_walls_color = "Green";
box_down_color = "Red";

//понставка для крепления платы к корпусу
step_size_x = 12;
step_size_y = 12;
step_size_z = 22;
step_color = "Yellow";
step1_pos_x = box_thickness;
step1_pos_y = box_thickness;
step2_pos_x = box_thickness;
step2_pos_y = box_size_y-box_thickness-step_size_y;
step3_pos_x = box_size_x-box_thickness-step_size_x;
step3_pos_y = box_size_y-box_thickness-step_size_y;
step4_pos_x = box_size_x-box_thickness-step_size_x;
step4_pos_y = box_thickness;

//Отверстия в подставках
step_hole_diam = 2;
step_hole_height = 16;
step1_hole_pos_x = board_pos_x-box_thickness+board_hole1_pos_x;
step1_hole_pos_y = board_pos_y-box_thickness+board_hole1_pos_y;
step2_hole_pos_x = board_pos_x-box_thickness+board_hole2_pos_x;
step2_hole_pos_y = board_pos_y+board_hole2_pos_y-step2_pos_y;
step3_hole_pos_x = board_pos_x+board_hole3_pos_x-step3_pos_x;
step3_hole_pos_y = board_pos_y+board_hole3_pos_y-step3_pos_y;
step4_hole_pos_x = board_pos_x+board_hole4_pos_x-step4_pos_x;
step4_hole_pos_y = board_pos_y-box_thickness+board_hole4_pos_y;
step_hole_pos_z = step_size_z-step_hole_height+1;

//Размеры и положение отверстия для провода
box_wire_hole_height = 10;
wire_hole_diam = 4;
wire_hole_height = box_thickness+2;
box_wire_hole_y_pos = box_size_y-box_thickness-1;
box_wire_hole_x_pos = 5+step_size_x;

//Размеры и положение отверстий для кнопок и крепёжных шурупов
button_size_x = 5;
button_size_y = 6;
button_size_z = 6;
button_distance = 2;
button_color = "Cyan";

button_pos_x = box_thickness+2;
button1_pos_y = step2_pos_y-button_size_y-button_distance-10;
button2_pos_y = button1_pos_y-button_size_y-button_distance;
button_pos_z = (box_size_z-button_size_z)/2;

button_hole_diam = 3.5;
button_hole_height = box_thickness+2;
box_button_hole_height = box_size_z/2;
box_button1_hole_y_pos = button1_pos_y+button_size_y/2;
box_button2_hole_y_pos = button2_pos_y+button_size_y/2;
box_button_hole_x_pos = -1;

screw_hole_diam = 2.5;
box_screw_hole1_y = button2_pos_y-5;
box_screw_hole2_y = box_screw_hole1_y + button_size_y*2+10+button_distance;

//Кнопки
button_height1 = 9;
button_height2 = 2;
button_diam1 = 3;
button_diam2 = 5;
button1_color = "Magenta";

//Планка для кнопок
plane_size_x = button_size_x*2;
plane_size_y = box_screw_hole2_y-box_screw_hole1_y+5;
plane_size_z = box_thickness;
plane_hole_diam = 2;

//Выключатель
switch_size_x = box_thickness+2;
switch_size_y = 8;
switch_size_z = 14;
switch_pos_x = -1;
switch_pos_y = box_screw_hole1_y-switch_size_y-6;
switch_pos_z = (box_size_z-switch_size_z)/2;

//Печатная плата
/*color(board_color) translate([board_pos_x, board_pos_y, step_size_z+box_thickness]){
    difference(){
       
        cube([board_size_x, board_size_y, board_size_z]);
       
        translate([board_hole1_pos_x, board_hole1_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
       
        translate([board_hole2_pos_x, board_hole2_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
       
        translate([board_hole3_pos_x, board_hole3_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
       
        translate([board_hole4_pos_x, board_hole4_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
    }
}*/

color(box_down_color) cube([box_size_x, box_size_y, box_thickness]);
translate([0, 0, box_thickness]){
    color(box_walls_color){
        difference(){
            cube([box_thickness, box_size_x, box_size_z]);
   
            //Отверстия под кнопки
            translate([box_button_hole_x_pos, box_button1_hole_y_pos, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = button_hole_diam, $fn = 100);
           
            translate([box_button_hole_x_pos, box_button2_hole_y_pos, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = button_hole_diam, $fn = 100);

            //отверстия под винты
            translate([box_button_hole_x_pos, box_screw_hole1_y, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = screw_hole_diam, $fn = 100);

            translate([box_button_hole_x_pos, box_screw_hole2_y, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = screw_hole_diam, $fn = 100);

            //Отверстие под кнопку включения
            translate([switch_pos_x, switch_pos_y, switch_pos_z])
                cube([switch_size_x, switch_size_y, switch_size_z]);
        }
       
        difference(){
            translate([0, box_size_y-box_thickness, 0]) cube([box_size_x, box_thickness, box_size_z]);
           
            translate([box_wire_hole_x_pos, box_wire_hole_y_pos, box_wire_hole_height])
                rotate([-90, 0, 0])
                cylinder(h = wire_hole_height, d = wire_hole_diam, $fn = 100);
        }
       
        cube([box_size_x, box_thickness, box_size_z]);
        translate([box_size_x-box_thickness, 0, 0]) cube([box_thickness, box_size_y, box_size_z]);
    }

    //Кнопки
    /*color(button_color){
        translate([button_pos_x, button1_pos_y, button_pos_z]) cube([button_size_x, button_size_y, button_size_z]);
       
        translate([button_pos_x, button2_pos_y, button_pos_z]) cube([button_size_x, button_size_y, button_size_z]);
    }*/
    //Отверстие под кнопку включения
   
}

//Подставки под плату с отверстиями под винты
color(step_color){
    translate([step1_pos_x, step1_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step1_hole_pos_x, step1_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
       

    translate([step2_pos_x, step2_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step2_hole_pos_x, step2_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }

    translate([step3_pos_x, step3_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step3_hole_pos_x, step3_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
       
    translate([step4_pos_x, step4_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step4_hole_pos_x, step4_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
}

//Кнопки
color(button1_color){
    translate([130, 10, 0]){
        cylinder(h = button_height1, d = button_diam1, $fn = 100);
        cylinder(h = button_height2, d = button_diam2, $fn = 100);
    }
   
    translate([130, 16, 0]){
        cylinder(h = button_height1, d = button_diam1, $fn = 100);
        cylinder(h = button_height2, d = button_diam2, $fn = 100);
    }
   
    translate([130, 20, 0])
        difference(){
            cube([plane_size_x, plane_size_y, plane_size_z]);
           
            translate([plane_size_x/2, 2.5, -1])
                cylinder(h = box_thickness+2, d = plane_hole_diam, $fn = 100);
            translate([plane_size_x/2, box_screw_hole2_y-box_screw_hole1_y+2.5, -1])
                cylinder(h = box_thickness+2, d = plane_hole_diam, $fn = 100);
        }
       
}
 

pi1985

★✩✩✩✩✩✩
2 Ноя 2018
21
15
Немного доработал корпус.
Размеры: 130,9*129,7*44 мм. Толщина стенок 4 мм.

C++:
//Толщина стенок корпуса
box_thickness = 4;

//Размеры платы
board_size_x = 116.9;
board_size_y = 115.7;
board_size_z = 2;
board_abs_pos_x = box_thickness + 3;
board_abs_pos_y = box_thickness + 3;
board_pos_x = 3;
board_pos_y = 3;
board_color = "Blue";

//Размеры корпуса
box_size_x = board_size_x + box_thickness*2 + board_pos_x*2;
box_size_y = board_size_y + box_thickness*2 + board_pos_y*2;
box_size_z = 40;
box_walls_color = "Green";
box_down_color = "Red";

//Отверстия в плате
board_hole_diam = 3;
board_hole1_pos_x = 2.5+board_hole_diam/2;
board_hole1_pos_y = 2+board_hole_diam/2;
board_hole2_pos_x = 2.6+board_hole_diam/2;
board_hole2_pos_y = board_size_y-2.7-board_hole_diam/2;
board_hole3_pos_x = board_size_x-2.4-board_hole_diam/2;
board_hole3_pos_y = board_size_y-2.8-board_hole_diam/2;
board_hole4_pos_x = board_size_x-2.2-board_hole_diam/2;
board_hole4_pos_y = 3.1+board_hole_diam/2;

//подставка для крепления платы к корпусу
step_size_x = 12;
step_size_y = 12;
step_size_z = 35;
step_color = "Yellow";
step1_pos_x = box_thickness;
step1_pos_y = box_thickness;
step2_pos_x = box_thickness;
step2_pos_y = box_size_y-box_thickness-step_size_y;
step3_pos_x = box_size_x-box_thickness-step_size_x;
step3_pos_y = box_size_y-box_thickness-step_size_y;
step4_pos_x = box_size_x-box_thickness-step_size_x;
step4_pos_y = box_thickness;

//Отверстия в подставках
step_hole_diam = 2;
step_hole_height = 16;
step1_hole_pos_x = board_abs_pos_x-box_thickness+board_hole1_pos_x;
step1_hole_pos_y = board_abs_pos_y-box_thickness+board_hole1_pos_y;
step2_hole_pos_x = board_abs_pos_x-box_thickness+board_hole2_pos_x;
step2_hole_pos_y = board_abs_pos_y+board_hole2_pos_y-step2_pos_y;
step3_hole_pos_x = board_abs_pos_x+board_hole3_pos_x-step3_pos_x;
step3_hole_pos_y = board_abs_pos_y+board_hole3_pos_y-step3_pos_y;
step4_hole_pos_x = board_abs_pos_x+board_hole4_pos_x-step4_pos_x;
step4_hole_pos_y = board_abs_pos_y-box_thickness+board_hole4_pos_y;
step_hole_pos_z = step_size_z-step_hole_height+1;

//Размеры и положение отверстия для провода
box_wire_hole_height = 10;
wire_hole_diam = 4;
wire_hole_height = box_thickness+2;
box_wire_hole_y_pos = box_size_y-box_thickness-1;
box_wire_hole_x_pos = 10+step_size_x;

//Размеры и положение отверстий для кнопок и крепёжных шурупов
button_size_x = 5;
button_size_y = 6;
button_size_z = 6;
button_distance = 2;
button_color = "Cyan";

button_pos_x = box_thickness+2;
button1_pos_y = step2_pos_y-button_size_y-button_distance-10;
button2_pos_y = button1_pos_y-button_size_y-button_distance;
button_pos_z = (box_size_z-button_size_z)/2;

button_hole_diam = 3.5;
button_hole_height = box_thickness+2;
box_button_hole_height = box_size_z/2;
box_button1_hole_y_pos = button1_pos_y+button_size_y/2;
box_button2_hole_y_pos = button2_pos_y+button_size_y/2;
box_button_hole_x_pos = -1;

screw_hole_diam = 2.5;
box_screw_hole1_y = button2_pos_y-5;
box_screw_hole2_y = box_screw_hole1_y + button_size_y*2+10+button_distance;

//Кнопки
button_height1 = 9;
button_height2 = 2;
button_diam1 = 3;
button_diam2 = 5;
button1_color = "Magenta";

//Планка для кнопок
plane_size_x = button_size_x*2;
plane_size_y = box_screw_hole2_y-box_screw_hole1_y+5;
plane_size_z = 2;
plane_hole_diam = 2;

//Выключатель
switch_size_x = box_thickness+2;
switch_size_y = 8;
switch_size_z = 14;
switch_pos_x = -1;
switch_pos_y = box_screw_hole1_y-switch_size_y-6;
switch_pos_z = (box_size_z-switch_size_z)/2;

//Печатная плата
/*color(board_color) translate([board_abs_pos_x, board_abs_pos_y, step_size_z+box_thickness]){
    difference(){
        
        cube([board_size_x, board_size_y, board_size_z]);
        
        translate([board_hole1_pos_x, board_hole1_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
        
        translate([board_hole2_pos_x, board_hole2_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
        
        translate([board_hole3_pos_x, board_hole3_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
        
        translate([board_hole4_pos_x, board_hole4_pos_y, -1])
            cylinder(h = board_size_z+2, d = board_hole_diam, $fn = 100);
    }
}*/

color(box_down_color) cube([box_size_x, box_size_y, box_thickness]);
translate([0, 0, box_thickness]){
    color(box_walls_color){
        difference(){
            cube([box_thickness, box_size_y, box_size_z]);
    
            //Отверстия под кнопки
            translate([box_button_hole_x_pos, box_button1_hole_y_pos, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = button_hole_diam, $fn = 100);
            
            translate([box_button_hole_x_pos, box_button2_hole_y_pos, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = button_hole_diam, $fn = 100);

            //отверстия под винты
            translate([box_button_hole_x_pos, box_screw_hole1_y, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = screw_hole_diam, $fn = 100);

            translate([box_button_hole_x_pos, box_screw_hole2_y, box_button_hole_height])
                rotate([0, 90, 0])
                cylinder(h = button_hole_height, d = screw_hole_diam, $fn = 100);

            //Отверстие под кнопку включения
            translate([switch_pos_x, switch_pos_y, switch_pos_z])
                cube([switch_size_x, switch_size_y, switch_size_z]);
        }
        
        difference(){
            translate([0, box_size_y-box_thickness, 0]) cube([box_size_x, box_thickness, box_size_z]);
            
            translate([box_wire_hole_x_pos, box_wire_hole_y_pos, box_wire_hole_height])
                rotate([-90, 0, 0])
                cylinder(h = wire_hole_height, d = wire_hole_diam, $fn = 100);
        }
        
        cube([box_size_x, box_thickness, box_size_z]);
        translate([box_size_x-box_thickness, 0, 0]) cube([box_thickness, box_size_y, box_size_z]);
    }
}

//Подставки под плату с отверстиями под винты
color(step_color){
    translate([step1_pos_x, step1_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step1_hole_pos_x, step1_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
        

    translate([step2_pos_x, step2_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step2_hole_pos_x, step2_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }

    translate([step3_pos_x, step3_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step3_hole_pos_x, step3_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
        
    translate([step4_pos_x, step4_pos_y, box_thickness])
        difference(){
            cube([step_size_x, step_size_y, step_size_z]);

            translate([step4_hole_pos_x, step4_hole_pos_y, step_hole_pos_z])
                cylinder(h = step_hole_height, d = step_hole_diam, $fn = 100);
        }
}

//Кнопки
color(button1_color){
    translate([140, 10, 0]){
        cylinder(h = button_height1, d = button_diam1, $fn = 100);
        cylinder(h = button_height2, d = button_diam2, $fn = 100);
    }
    
    translate([140, 16, 0]){
        cylinder(h = button_height1, d = button_diam1, $fn = 100);
        cylinder(h = button_height2, d = button_diam2, $fn = 100);
    }
    
    translate([140, 20, 0])
        difference(){
            cube([plane_size_x, plane_size_y, plane_size_z]);
            
            translate([plane_size_x/2, 2.5, -1])
                cylinder(h = box_thickness+2, d = plane_hole_diam, $fn = 100);
            translate([plane_size_x/2, box_screw_hole2_y-box_screw_hole1_y+2.5, -1])
                cylinder(h = box_thickness+2, d = plane_hole_diam, $fn = 100);
        }
        
}

Можно попросить корпус в STL выложить?
На здоровье.
 

Вложения

  • Лойс +1
Реакции: Егор Харьков