驴友花雕 发表于 2025-5-28 17:20:16

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

本帖最后由 驴友花雕 于 2025-6-7 06:44 编辑




驴友花雕 发表于 2025-5-28 17:23:41

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

这是一个绘画/沙画制作机器人。它有两个伺服电机,由 Arduino Uno 原型板控制。它可以绘制不同的形状。



驴友花雕 发表于 2025-5-28 17:28:26

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

这个项目中使用的东西

硬件组件
Arduino UNO       
×        1       
SG90微型伺服电机       
×        2       
面包板(通用)       
×        1       
跳线(通用)       
×        1       
USB-A 转 Mini-USB 线缆       
×        1       

手动工具和制造机器
剪刀,电工       
电气胶带       

你的项目是关于什么的?

这个项目是关于一个可以在兰戈里上绘画和书写的机器人。它有两个伺服电机,由安装在 Arduino Uno 原型板上的 Atmega328p 微控制器控制。

你为什么决定做这个?
制作这个机器人的目的是为了在兰戈里上画任何形状。兰戈里是手绘的。我不擅长画兰戈里。所以我决定做一个机器人,可以帮我画兰戈里。

它是如何工作的?
它有两个伺服电机,由安装在 Arduino Uno 原型板上的 Atmega328p 微控制器控制。它的工作原理是逆运动学。待绘制图像的轮廓坐标存储在 Arduino 代码的一个数组中。

CAD设计




驴友花雕 发表于 2025-5-28 17:32:51

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

这是机器人的CAD设计图。我们可以看到,两个电机、两个连杆和一支铅笔。第一个电机放置在地面上。连杆与其轴连接。第二个电机安装在该轴上。另一个连杆连接到第二个电机的轴上。连杆末端连接着一支铅笔。铅笔的尖端指向目标点。当两个电机旋转时,借助地面上的铅笔,可以画出任何东西。这是真正的机器人,有 2 个马达、2 个连杆和一支笔作为追踪的末端执行器。

真实设计



驴友花雕 发表于 2025-5-28 17:36:40

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人











驴友花雕 发表于 2025-5-28 17:38:13

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

图像到坐标的转换
要从图像中获取坐标,我们可以从这个网站获取帮助。这里我们只需要上传图像。我们需要它的坐标。图像将显示在下方。单击图形的边缘。将生成相应的坐标。所有坐标将显示在下方。复制它们,然后将它们存储在 Arduino 代码的数组中。

转换问题
但是伺服电机需要输入角度,并旋转到给定的角度。因此,我们必须将笛卡尔坐标转换为球坐标。这需要借助三角函数。



驴友花雕 发表于 2025-5-28 17:42:58

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

这是要到达的点。两条连线的长度相同。因此,计算该点到原点的距离D,以及高度H。我们可以轻松计算出所有角度。

绘制兰戈里的原因
我们不用笔在纸上画画。因为装置不够坚固,无法在纸上施加足够的压力。

不过,我们还是成功画了一些画。虽然画得不太好,但我们对结果很满意。









驴友花雕 发表于 2025-5-28 17:48:36

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

定制零件和外壳










驴友花雕 发表于 2025-5-28 17:51:27

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

项目代码

#include <Servo.h>

Servo m1,m2;

float d,h,l,phi;
float theta1,theta2;
int i,j;

int dly=80;

void setup() {
m1.attach(11);
m2.attach(10);


}

void go(float x, float y){

l = 8; //length of link, l= 8cm

d = sqrt((x*x)+(y*y)); //distace between origin left and (x,y) point

phi = atan2(y,x)*180/3.14; // phi, angle between d and x axis

h = sqrt((l*l)-((d/2)*(d/2))); //height of the triangle

theta1 = atan2(h,(d/2))*180/3.14; // phi 1, angle between d and axis

theta2 = (90 - theta1)*2; // angle between l and l


theta1+=phi;

if ((theta1>0 && theta2>0) && (theta1<180 && theta2<180)){
    m1.writeMicroseconds((int)((theta1/180)*1500+700));
    m2.writeMicroseconds((int)((theta2/180)*1500+700));
   
}

}

void coverage(){
for (i=0;i<180;i+=1){
    m1.write(i);
    delay(25);
}

for (j=10;j<180;j+=1){
    m2.write(j);
    delay(25);
}

for (i=180;i>0;i-=1){
    m1.write(i);
    delay(25);
}


for (j=180;j>10;j-=1){
    m2.write(j);
    delay(25);
}
}

void human(){
int l= 100;
float x={1.92, 2.33, 2.75, 3.17, 2.25, 1.33, 0.83, 0.5, 0.25, 0.25, 0.33, 0.83, 1.25, 1.75, 2.33, 2.92, 3.5, 3.25, 3.0, 2.83, 2.75, 2.83, 2.92, 3.25, 3.5, 3.92, 4.33, 4.92, 5.33, 5.83, 6.25, 6.5, 6.67, 6.75, 6.75, 6.75, 6.67, 6.5, 6.33, 6.25, 6.67, 7.0, 7.5, 8.0, 8.33, 8.67, 9.0, 9.0, 9.0, 9.0, 8.83, 8.5, 8.0, 7.5, 7.0, 6.5, 6.08, 6.25, 6.42, 6.58, 6.75, 6.92, 7.17, 7.33, 7.5, 7.67, 8.08, 8.42, 8.83, 8.75, 8.67, 8.42, 8.0, 7.42, 6.92, 6.42, 5.92, 5.67, 5.42, 5.17, 4.92, 4.75, 4.5, 4.25, 4.0, 3.67, 3.5, 2.92, 2.25, 1.67, 1.25, 0.92, 0.58, 0.5, 0.5, 0.67, 1.0, 1.42, 1.58, 1.92};
float y={8.92, 8.33, 7.5, 6.58, 6.67, 6.75, 6.67, 6.33, 5.92, 5.33, 4.83, 4.5, 4.33, 4.25, 4.17, 4.17, 4.17, 3.83, 3.5, 3.08, 2.58, 2.0, 1.5, 1.17, 0.83, 0.5, 0.25, 0.25, 0.42, 0.58, 0.83, 1.25, 1.58, 2.0, 2.42, 2.92, 3.25, 3.58, 3.92, 4.0, 4.25, 4.25, 4.25, 4.42, 4.5, 4.67, 4.92, 5.25, 5.67, 5.92, 6.33, 6.58, 6.67, 6.67, 6.67, 6.5, 6.5, 6.83, 7.17, 7.5, 7.92, 8.25, 8.58, 8.92, 9.25, 9.33, 9.42, 9.58, 9.92, 10.33, 10.83, 11.25, 11.42, 11.42, 11.58, 11.5, 11.25, 11.0, 10.67, 10.42, 10.17, 9.92, 10.0, 10.42, 10.83, 11.0, 11.33, 11.5, 11.5, 11.58, 11.33, 11.08, 10.83, 10.33, 9.92, 9.58, 9.42, 9.5, 9.33, 8.92};

for(i=0;i<l;i+=1){
    go(x,y+2);
    delay(dly);
}

}

void star(){
int l=99;
float x = {3.8333, 3.9167, 4.0, 4.1667, 4.25, 4.3333, 4.4167, 4.5, 4.6667, 4.25, 3.9167, 3.5833, 3.25, 2.8333, 2.5833, 2.6667, 2.9167, 3.1667, 3.5, 3.75, 4.0, 4.3333, 4.6667, 4.9167, 5.25, 5.25, 5.4167, 5.5, 5.6667, 5.75, 5.8333, 5.9167, 6.0, 6.1667, 6.1667, 6.25, 6.3333, 6.4167, 6.4167, 6.5, 6.5833, 6.6667, 6.6667, 6.75, 6.8333, 6.8333, 7.0, 7.0833, 7.3333, 7.5, 7.75, 7.9167, 8.0833, 8.25, 8.5, 8.75, 9.0, 9.1667, 9.0833, 8.75, 8.5, 8.25, 8.0, 7.8333, 7.6667, 7.4167, 7.25, 7.3333, 7.4167, 7.5833, 7.5833, 7.6667, 7.75, 7.8333, 7.9167, 8.0833, 8.1667, 8.0, 7.8333, 7.5, 7.1667, 7.0, 6.8333, 6.5, 6.25, 6.0, 5.75, 5.5833, 5.5, 5.1667, 5.0833, 4.8333, 4.6667, 4.5, 4.3333, 4.0833, 3.9167, 3.8333, 3.6667};
float y = {8.75, 8.4167, 8.0833, 7.75, 7.4167, 7.0833, 6.75, 6.5, 6.1667, 6.0, 5.75, 5.5, 5.25, 5.0833, 4.8333, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.75, 4.4167, 4.0833, 3.75, 3.5, 3.1667, 2.8333, 2.5833, 2.3333, 2.5, 2.6667, 2.8333, 3.0833, 3.25, 3.4167, 3.5833, 3.75, 4.0, 4.1667, 4.3333, 4.4167, 4.5833, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.8333, 5.0, 5.1667, 5.3333, 5.5, 5.75, 5.8333, 6.0, 6.1667, 6.4167, 6.5, 6.8333, 7.0833, 7.3333, 7.5, 7.8333, 8.0833, 8.25, 8.5833, 8.3333, 8.1667, 8.0833, 7.9167, 7.6667, 7.5, 7.25, 7.0833, 7.0, 7.0833, 7.25, 7.4167, 7.5833, 7.75, 7.9167, 8.0833, 8.1667, 8.25, 8.4167, 8.5833, 8.75, 8.8333};

for(i=0;i<l;i+=1){
    go(x,y);
    delay(dly);
}
}

void hand(){
int l=55;
float x ={3.5833, 3.5, 3.75, 4.1667, 4.25, 4.25, 4.5833, 4.5833, 4.5833, 4.5833, 4.9167, 5.25, 5.3333, 5.3333, 5.4167, 5.4167, 5.6667, 5.75, 5.75, 5.6667, 5.9167, 6.25, 6.5833, 6.5833, 6.5833, 6.5833, 6.5833, 6.8333, 6.9167, 7.0, 7.0, 7.25, 7.6667, 7.6667, 7.75, 7.75, 7.75, 7.75, 8.1667, 8.5, 9.0, 9.3333, 9.0, 8.5, 8.0, 7.5, 6.8333, 6.0833, 5.1667, 4.5833, 4.0833, 3.6667, 3.5833, 3.5, 3.5833};
float y ={6.5, 4.1667, 3.9167, 3.9167, 4.5, 5.9167, 5.8333, 4.9167, 3.5, 2.9167, 2.5833, 2.5833, 2.8333, 3.3333, 5.25, 5.75, 5.6667, 4.9167, 3.9167, 2.5833, 2.1667, 2.25, 2.3333, 2.9167, 3.9167, 5.0, 5.5, 5.5833, 4.5833, 3.6667, 3.1667, 2.8333, 2.9167, 3.5, 4.5833, 5.3333, 6.0833, 7.1667, 6.5833, 5.9167, 5.8333, 6.1667, 6.6667, 8.0, 8.9167, 9.4167, 9.75, 9.8333, 9.8333, 9.5, 9.0, 8.3333, 7.5833, 6.9167, 6.5};

for(i=0;i<l;i+=1){
    go(x,y);
    delay(dly);
}
}

void head(){
int l=128;
float x ={7.0, 6.92, 6.92, 7.0, 7.0, 7.08, 7.08, 7.17, 7.17, 7.33, 7.5, 7.58, 8.17, 8.25, 8.42, 8.5, 8.67, 8.83, 8.83, 8.75, 8.75, 8.92, 8.92, 8.83, 8.75, 8.75, 8.83, 8.92, 9.0, 8.92, 8.92, 9.08, 9.17, 9.25, 9.33, 9.42, 9.25, 9.25, 9.08, 9.08, 9.0, 9.0, 8.83, 8.83, 8.75, 8.75, 8.67, 8.67, 8.75, 8.75, 8.67, 8.67, 8.58, 8.58, 8.5, 8.5, 8.33, 8.33, 8.17, 8.17, 7.75, 7.67, 7.42, 7.33, 7.25, 7.17, 7.08, 7.0, 6.92, 6.75, 6.67, 6.5, 6.42, 6.17, 6.08, 4.67, 4.58, 4.33, 4.25, 4.08, 4.0, 3.83, 3.75, 3.67, 3.5, 3.42, 2.92, 2.92, 2.75, 2.75, 2.67, 2.67, 2.58, 2.58, 2.5, 2.5, 2.58, 2.58, 2.67, 2.67, 2.75, 2.75, 2.83, 2.83, 2.92, 2.92, 3.08, 3.08, 3.17, 3.17, 3.33, 3.33, 3.42, 3.42, 3.5, 3.5, 3.58, 3.58, 3.67, 3.67, 3.58, 3.58, 3.5, 3.5, 3.42, 3.42, 3.33, 3.25};
float y ={10.08, 10.0, 9.92, 9.83, 9.5, 9.42, 9.25, 9.17, 9.08, 8.92, 8.92, 9.0, 9.0, 9.08, 9.08, 9.0, 9.0, 8.83, 8.33, 8.25, 8.08, 7.92, 7.75, 7.75, 7.67, 7.58, 7.5, 7.5, 7.42, 7.33, 6.92, 6.75, 6.75, 6.67, 6.67, 6.58, 6.42, 6.33, 6.17, 6.08, 6.0, 5.92, 5.75, 5.67, 5.58, 5.5, 5.42, 5.25, 5.17, 4.67, 4.58, 4.25, 4.17, 4.0, 3.92, 3.75, 3.58, 3.5, 3.33, 3.25, 2.83, 2.83, 2.58, 2.58, 2.5, 2.5, 2.42, 2.42, 2.33, 2.33, 2.25, 2.25, 2.17, 2.17, 2.08, 2.08, 2.17, 2.17, 2.25, 2.25, 2.33, 2.33, 2.42, 2.42, 2.58, 2.58, 3.08, 3.17, 3.33, 3.5, 3.58, 3.75, 3.83, 4.17, 4.25, 4.83, 4.92, 5.42, 5.5, 5.75, 5.83, 6.0, 6.08, 6.25, 6.33, 6.42, 6.58, 6.67, 6.75, 6.83, 7.0, 7.08, 7.17, 7.25, 7.33, 7.42, 7.5, 7.75, 7.83, 9.0, 9.08, 9.42, 9.5, 9.75, 9.83, 9.92, 10.0, 10.0};

for(i=0;i<l;i+=1){
    go(x,y+1);
    delay(dly);
}
}

void heart(){
int l=65;
float x ={5.92, 6.25, 6.58, 6.92, 7.17, 7.58, 7.92, 8.42, 9.0, 9.5, 10.0, 10.42, 10.83, 11.33, 11.58, 11.83, 11.92, 11.92, 11.75, 11.5, 11.25, 10.83, 10.42, 9.83, 9.17, 8.58, 8.0, 7.42, 7.08, 6.67, 6.42, 6.0, 5.5, 5.0, 4.42, 3.92, 3.42, 3.0, 2.5, 2.0, 1.67, 1.33, 1.0, 0.58, 0.33, 0.08, 0.08, 0.17, 0.42, 0.75, 1.17, 1.58, 2.0, 2.58, 3.08, 3.5, 3.83, 4.33, 4.75, 5.0, 5.25, 5.58, 5.67, 5.83, 6.0};
float y ={2.25, 1.92, 1.5, 1.0, 0.67, 0.5, 0.33, 0.25, 0.17, 0.17, 0.33, 0.5, 0.83, 1.17, 1.67, 2.42, 3.33, 4.0, 4.58, 5.33, 5.83, 6.5, 7.33, 8.08, 8.83, 9.5, 10.17, 10.67, 11.08, 11.33, 11.67, 12.17, 11.58, 11.0, 10.5, 9.92, 9.33, 8.92, 8.25, 7.75, 7.17, 6.67, 6.08, 5.42, 4.75, 3.83, 3.0, 2.17, 1.67, 1.25, 0.83, 0.5, 0.17, 0.08, 0.08, 0.17, 0.17, 0.25, 0.5, 0.75, 1.08, 1.33, 1.67, 2.0, 2.33};

for(i=0;i<l;i+=1){
    go(x,y+2);
    delay(dly);
}
}

void house(){
int l=112;
float x ={1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.0833, 0.8333, 0.5833, 0.25, 0.25, 0.5833, 0.9167, 1.25, 1.6667, 2.0833, 2.5, 2.9167, 3.25, 3.5833, 3.9167, 4.25, 4.5833, 5.0, 5.3333, 5.75, 6.0, 6.3333, 6.6667, 7.0, 7.25, 7.5, 7.6667, 7.75, 7.6667, 7.6667, 7.6667, 8.0, 8.3333, 8.5833, 8.9167, 9.0, 8.9167, 9.0, 9.0, 9.0, 9.0, 8.9167, 8.9167, 9.1667, 9.4167, 9.6667, 10.0, 10.25, 10.5833, 10.8333, 11.0833, 11.4167, 11.5833, 11.5833, 11.3333, 11.0833, 10.8333, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.3333, 10.0, 9.6667, 9.25, 8.9167, 8.4167, 8.0, 7.5833, 7.25, 6.75, 6.4167, 6.0, 5.75, 5.3333, 5.0, 4.5833, 4.0833, 3.8333, 3.5833, 3.25, 2.8333, 2.5833, 2.0833, 1.9167, 1.75, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167};
float y ={7.5, 7.0, 6.5, 6.0, 5.5833, 5.25, 4.75, 4.4167, 4.4167, 4.4167, 4.4167, 4.4167, 4.0833, 3.8333, 3.6667, 3.4167, 3.0833, 2.8333, 2.5833, 2.4167, 2.25, 2.0, 1.6667, 1.5, 1.25, 1.0, 0.8333, 0.5833, 0.4167, 0.5833, 0.6667, 0.9167, 1.0, 1.1667, 1.25, 1.0, 0.8333, 0.5, 0.3333, 0.3333, 0.3333, 0.3333, 0.3333, 0.5, 0.5833, 0.9167, 1.25, 1.5, 1.75, 1.9167, 2.1667, 2.3333, 2.5, 2.6667, 2.8333, 3.0, 3.1667, 3.3333, 3.5, 3.6667, 3.75, 4.1667, 4.1667, 4.1667, 4.1667, 4.1667, 4.3333, 4.5, 4.8333, 5.1667, 5.5, 5.9167, 6.1667, 6.4167, 6.6667, 6.9167, 7.1667, 7.4167, 7.6667, 7.9167, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.1667, 8.0, 7.9167, 7.6667, 7.5};

for(i=0;i<l;i+=1){
    go(x,y+1);
    delay(dly);
}
}

void f22(){
int l=102;
float x ={1.8333, 2.1667, 2.4167, 2.75, 3.0, 3.3333, 3.5, 3.8333, 4.0, 4.0, 4.0, 4.0, 4.25, 4.5, 4.5, 4.5833, 4.5833, 4.6667, 4.75, 4.8333, 4.9167, 5.0, 5.0833, 5.1667, 5.1667, 5.25, 5.25, 5.25, 5.25, 5.25, 5.4167, 5.5833, 5.75, 5.75, 5.75, 5.8333, 5.8333, 5.8333, 5.9167, 6.0833, 6.25, 6.5, 6.6667, 6.9167, 7.1667, 7.3333, 7.5833, 7.8333, 7.8333, 7.8333, 7.8333, 7.8333, 7.6667, 7.5, 7.25, 7.0, 6.75, 6.4167, 6.0833, 6.1667, 6.3333, 6.5833, 6.75, 6.8333, 6.8333, 6.8333, 6.8333, 6.8333, 6.6667, 6.5, 6.25, 6.0, 5.75, 5.5833, 5.5833, 5.5, 5.1667, 4.8333, 4.5833, 4.3333, 4.3333, 4.3333, 4.1667, 4.0, 3.9167, 3.6667, 3.3333, 3.0, 3.0, 3.0, 3.1667, 3.4167, 3.6667, 3.3333, 3.0, 2.6667, 2.3333, 2.0, 1.9167, 1.8333, 1.75, 1.8333};
float y ={7.5833, 7.25, 7.0, 6.8333, 6.5, 6.25, 5.9167, 5.6667, 5.3333, 4.9167, 4.5833, 4.25, 4.0833, 3.9167, 3.5, 3.0833, 2.75, 2.3333, 2.0, 1.75, 1.8333, 1.9167, 2.1667, 2.4167, 2.6667, 2.9167, 3.1667, 3.4167, 3.6667, 3.9167, 4.0833, 4.1667, 4.25, 4.4167, 4.6667, 4.9167, 5.0833, 5.3333, 5.5833, 5.75, 5.9167, 6.0833, 6.25, 6.5, 6.75, 7.0, 7.1667, 7.4167, 7.5833, 7.6667, 7.9167, 8.1667, 8.1667, 8.3333, 8.4167, 8.5, 8.5833, 8.6667, 8.75, 9.0, 9.0833, 9.25, 9.5, 9.5, 9.5833, 9.75, 9.9167, 10.0833, 10.1667, 10.25, 10.25, 10.0833, 9.9167, 9.75, 9.5, 9.3333, 9.25, 9.25, 9.25, 9.25, 9.3333, 9.5833, 9.75, 10.0, 10.0833, 10.25, 10.25, 10.1667, 10.0, 9.6667, 9.4167, 9.1667, 8.9167, 8.6667, 8.5833, 8.5, 8.4167, 8.25, 8.0, 7.6667, 7.5833, 7.4167};

for(i=0;i<l;i+=1){
    go(x,y+1);
    delay(dly);
}
}

void butterfly(){
int l=133;
float x ={3.333, 3.75, 4.083, 4.417, 4.75, 5.083, 5.333, 5.667, 5.833, 6.25, 6.583, 6.917, 7.167, 7.333, 7.583, 7.75, 8.083, 8.333, 8.667, 9.083, 9.417, 9.75, 10.083, 10.5, 10.917, 11.333, 11.667, 11.667, 11.667, 11.667, 11.583, 11.583, 11.417, 11.25, 11.083, 11.0, 10.917, 10.833, 10.833, 10.75, 10.5, 10.083, 9.75, 9.417, 9.083, 8.833, 9.0, 9.417, 9.667, 9.917, 10.083, 10.25, 10.333, 10.417, 10.417, 10.333, 10.333, 10.083, 10.0, 9.75, 9.583, 9.25, 8.917, 8.667, 8.333, 8.083, 7.833, 7.5, 7.333, 7.333, 7.167, 7.0, 6.917, 6.75, 6.667, 6.583, 6.5, 6.333, 6.083, 5.917, 5.833, 5.833, 5.667, 5.667, 5.583, 5.583, 5.417, 5.25, 5.0, 4.667, 4.417, 4.083, 3.75, 3.417, 3.0, 2.667, 2.417, 2.25, 2.083, 2.083, 2.25, 2.333, 2.583, 2.917, 3.167, 3.333, 3.083, 2.917, 2.5, 2.25, 2.0, 1.667, 1.583, 1.333, 1.25, 1.083, 1.083, 0.917, 0.667, 0.417, 0.333, 0.25, 0.25, 0.583, 0.917, 1.25, 1.75, 2.0, 2.25, 2.583, 2.667, 2.917, 3.083};
float y ={1.667, 1.917, 2.25, 2.5, 2.833, 3.0, 3.25, 3.5, 3.75, 3.833, 3.833, 3.583, 3.25, 2.917, 2.75, 2.583, 2.25, 1.917, 1.667, 1.25, 1.167, 0.917, 0.583, 0.583, 0.5, 0.417, 0.5, 0.667, 1.0, 1.25, 1.5, 1.833, 2.083, 2.333, 2.583, 2.917, 3.25, 3.5, 3.833, 4.083, 4.333, 4.333, 4.333, 4.333, 4.167, 4.25, 4.5, 4.667, 4.833, 5.0, 5.167, 5.417, 5.667, 6.0, 6.333, 6.667, 7.0, 7.25, 7.5, 7.667, 7.833, 7.917, 8.167, 8.25, 8.333, 8.333, 8.333, 8.167, 7.917, 7.583, 7.333, 7.0, 6.833, 6.667, 6.417, 6.167, 6.0, 6.0, 6.0, 6.0, 6.25, 6.5, 6.75, 7.083, 7.417, 7.667, 8.167, 8.25, 8.333, 8.5, 8.5, 8.5, 8.5, 8.333, 8.167, 7.917, 7.583, 7.25, 6.833, 6.333, 6.0, 5.583, 5.25, 5.0, 4.833, 4.667, 4.583, 4.583, 4.583, 4.583, 4.583, 4.5, 4.083, 3.75, 3.333, 3.0, 2.667, 2.333, 2.083, 1.833, 1.5, 1.25, 0.75, 0.583, 0.583, 0.583, 0.667, 0.833, 1.0, 1.083, 1.25, 1.25, 1.417};

for(i=0;i<l;i+=1){
    go(x,y+2);
    delay(dly);
}
}

void lamp(){
int l=114;
float x ={0.5833, 1.0, 1.3333, 1.75, 2.1667, 2.6667, 3.1667, 3.6667, 4.1667, 4.5833, 5.0, 5.25, 5.0833, 5.0833, 5.0833, 4.75, 4.4167, 4.25, 3.9167, 3.8333, 3.8333, 3.9167, 4.0, 4.1667, 4.3333, 4.5, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.75, 4.75, 4.9167, 5.0833, 5.25, 5.4167, 5.5833, 5.75, 5.8333, 6.0, 6.0833, 6.1667, 6.25, 6.25, 6.25, 6.3333, 6.3333, 6.25, 6.0833, 6.0, 5.9167, 5.75, 5.6667, 5.4167, 5.3333, 5.25, 5.25, 5.25, 5.25, 5.25, 5.25, 5.5, 5.9167, 6.3333, 6.75, 7.1667, 7.5833, 8.0, 8.4167, 8.8333, 9.25, 9.6667, 9.5833, 9.5, 9.4167, 9.3333, 9.1667, 9.0, 8.6667, 8.5, 8.25, 7.9167, 7.75, 7.4167, 7.0833, 6.75, 6.4167, 6.0, 5.5833, 5.25, 4.75, 4.3333, 4.0, 3.5833, 3.25, 2.9167, 2.5833, 2.3333, 2.0, 1.75, 1.5833, 1.4167, 1.1667, 1.0, 0.8333, 0.75, 0.6667, 0.6667, 0.5833, 0.5833, 0.5833};
float y ={7.4167, 7.1667, 7.0, 6.9167, 6.8333, 6.8333, 6.6667, 6.6667, 6.6667, 6.6667, 6.6667, 6.5833, 6.5, 6.1667, 5.75, 5.6667, 5.5833, 5.3333, 5.0, 4.5833, 4.1667, 3.75, 3.5, 3.1667, 2.75, 2.5, 2.1667, 1.8333, 1.5, 1.1667, 0.9167, 0.6667, 0.3333, 0.5833, 0.8333, 0.9167, 1.0, 1.25, 1.4167, 1.6667, 1.9167, 2.1667, 2.3333, 2.6667, 2.9167, 3.1667, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.1667, 5.3333, 5.3333, 5.4167, 5.5, 5.6667, 6.0, 6.0833, 6.3333, 6.4167, 6.5833, 6.6667, 6.6667, 6.6667, 6.6667, 6.6667, 6.75, 6.8333, 6.8333, 7.0, 7.0833, 7.25, 7.5833, 7.9167, 8.25, 8.5833, 8.9167, 9.3333, 9.5, 9.8333, 10.1667, 10.3333, 10.5833, 10.6667, 10.9167, 11.0833, 11.25, 11.25, 11.3333, 11.3333, 11.3333, 11.25, 11.1667, 11.1667, 11.0, 10.8333, 10.75, 10.5833, 10.4167, 10.1667, 9.9167, 9.6667, 9.5, 9.25, 9.0, 8.8333, 8.5, 8.3333, 8.1667, 7.8333, 7.4167};

for(i=0;i<l;i+=1){
    go(x,y+2);
    delay(dly);
}
}

void tree(){
int l=79;
float x ={3.08, 3.42, 3.58, 3.75, 3.75, 3.75, 3.75, 3.67, 3.17, 2.58, 2.17, 1.58, 1.08, 0.83, 0.67, 0.42, 0.17, 0.17, 0.42, 0.75, 1.0, 1.25, 1.25, 1.42, 1.67, 2.08, 2.5, 2.83, 3.17, 3.42, 3.58, 3.92, 4.25, 4.5, 4.83, 5.0, 5.33, 5.67, 6.0, 6.25, 6.67, 6.83, 7.0, 7.25, 7.58, 7.92, 8.08, 8.17, 8.17, 8.17, 7.92, 8.0, 8.25, 8.33, 8.5, 8.58, 8.58, 8.42, 8.25, 8.0, 7.75, 7.5, 7.17, 6.67, 6.25, 5.92, 5.75, 5.42, 5.17, 5.08, 5.0, 5.0, 5.0, 5.08, 5.17, 5.33, 5.5, 5.75, 5.92};
float y ={11.0, 10.25, 9.67, 9.0, 8.42, 7.67, 6.92, 6.33, 6.33, 6.17, 6.25, 6.33, 6.17, 5.67, 5.0, 4.58, 4.17, 3.5, 3.08, 2.67, 2.5, 2.42, 2.0, 1.58, 1.33, 1.17, 1.0, 1.08, 1.25, 1.25, 1.0, 0.92, 1.0, 1.08, 0.92, 0.67, 0.67, 0.58, 0.58, 0.67, 0.67, 0.92, 1.25, 1.17, 1.42, 1.5, 1.92, 2.17, 2.58, 2.92, 3.17, 3.33, 3.58, 3.75, 4.17, 4.5, 4.92, 5.33, 5.75, 5.92, 6.08, 6.33, 6.5, 6.5, 6.5, 6.33, 6.17, 6.17, 6.33, 6.67, 6.92, 7.42, 8.0, 8.5, 9.0, 9.42, 9.92, 10.33, 10.83};

for(i=0;i<l;i+=1){
    go(x,y+2);
    delay(dly);
}
}

void A(){
int l=14;
float x ={3.5833, 4.25, 5.5833, 6.25, 7.5, 8.25, 7.5, 4.25, 7.5, 8.25, 6.25, 5.5833, 4.25, 3.5833};
float y ={8.1667, 6.1667, 2.4167, 2.4167, 6.1667, 8.1667, 6.1667, 6.1667, 6.1667, 8.1667, 2.4167, 2.4167, 6.1667, 8.1667};

for(i=0;i<l;i+=1){
    go(x,y);
    delay(dly);
}
}

void square(){
for(i=0;i<10;i++){
    go(0,i);
    delay(dly);
}
for (i=0;i<10;i++){
    go(i,10);
    delay(dly);
}
for(i=10;i>0;i-=1){
    go(10,i);
    delay(dly);
}
for(i=10;i>0;i-=1){
    go(i,0);
    delay(dly);
}
}

void line(){

    for(i=0;i<10;i++){
      go(i+4,4);
      delay(dly);
      }
    for(i=10;i>0;i--){
      go(i+4,4);
      delay(dly);
      }
}

void working_envelop(){

for(float x=16;x>=0;x-=0.20){
    go(x,1);
    delay(50);
}

m2.write(20);

for (i=150;i<180;i+=1){
    m1.write(i);
    delay(50);
}

for (i=20;i<170;i+=1){
    m2.write(i);
    delay(15);
}

for(i=180;i>10;i-=1){
    m1.write(i);
    delay(25);
}
}

void working_envelop_one(){
for(i=0;i<180;i+=1){
    m1.write(i);
    delay(25);
}

for(i=180;i>0;i-=1){
    m1.write(i);
    delay(25);
}
}

void loop() {


working_envelop();

star();
tree();
lamp();
human();
house();
heart();
hand();
f22();
butterfly();
A();

delay(500);
}

驴友花雕 发表于 2025-5-28 18:02:38

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人

本帖最后由 驴友花雕 于 2025-6-7 06:44 编辑

附录
项目链接:https://www.hackster.io/Robotics ... making-robot-7e3d60
项目作者:印度浦那 Robotics EveryDay
视频教程(4分钟):https://www.youtube.com/watch?v=GRJwoxl9V6U
项目代码:https://www.hackster.io/code_files/572041/download
3D打印文件:https://hacksterio.s3.amazonaws. ... obot_uQ2SvRREZ2.stl





驴友花雕 发表于 7 天前

【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人


页: [1]
查看完整版本: 【Arduino 动手做】在 Rangoli 或沙子上绘画和书写的机器人