找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 145|回复: 4
收起左侧

求指点一下 电子绘图小车设计

[复制链接]
ID:1121855 发表于 2024-10-10 10:34 来自手机 | 显示全部楼层 |阅读模式
100黑币
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

求指导一下这个设计

IMG_20241010_103140.jpg
回复

使用道具 举报

ID:1086173 发表于 2024-10-10 17:29 | 显示全部楼层
简单的话:两个独立的电机驱动加一个mcu控制定时器发送pwm波就行
回复

使用道具 举报

ID:648281 发表于 2024-10-10 19:13 | 显示全部楼层
可以用51单片机设计,用L298驱动电机
回复

使用道具 举报

ID:844772 发表于 2024-10-11 08:46 | 显示全部楼层
这是带码盘的直流电机,不要想着复杂的pwm控制,就是用中断数两个轮子走的码盘个数,计算各轮子走的距离,题的要求也是一笔画,不用抬笔,把笔固定在电机附近的孔就好。另外建议电机驱动轮放前边相对好走直线。
回复

使用道具 举报

ID:982617 发表于 2024-10-14 10:29 | 显示全部楼层
电子绘图小车系统设计思路
1. 系统概述
该系统主要由以下部分组成:

小车平台: 包含电机、车轮、滑轨、笔架等,负责移动和绘画。
控制系统: 采用单片机控制,负责接收用户指令,控制电机运动,调节笔架高度,实现绘图功能。
用户接口: 通过按键、显示屏或其他方式与用户交互,选择图形、设置参数和控制小车。
2. 控制电路设计
2.1 单片机选择
选择一款合适的单片机,例如Arduino Uno,具备足够的I/O口和处理能力。

2.2 电机驱动电路
选择合适的电机驱动模块,例如L298N电机驱动模块,驱动小车电机,实现正反转控制和速度调节。
将电机驱动模块与单片机连接,通过单片机控制电机驱动模块的信号,实现对电机的控制。
2.3 光电传感器
使用光电传感器监测小车行驶距离,通过单片机读取光电传感器的数据,计算小车移动距离。
将光电传感器与单片机连接,使用中断方式读取传感器信号,以提高响应速度和效率。
2.4 笔架设计
设计一个简单的笔架,通过舵机控制笔架的升降,实现画笔的抬起和放下。
将舵机与单片机连接,通过单片机控制舵机的转动角度,实现对笔架的控制。
2.5 用户接口
使用按键来选择图形类型,例如圆形、方形、矩形等。
使用数字按键或旋钮来设置图形参数,例如圆的半径、方形的边长、矩形的长宽等。
使用显示屏来显示用户选择和设置的参数信息,方便用户进行操作。
3. 软件设计
3.1 程序流程
初始化: 初始化单片机、电机驱动模块、光电传感器、舵机、按键、显示屏等硬件设备。
用户输入: 通过按键选择图形类型和设置参数,并显示在显示屏上。
绘制图形: 根据选择的图形类型和设置的参数,计算小车行驶路径,并通过电机驱动模块控制电机运动,通过舵机控制笔架升降,实现绘图功能。
循环控制: 不断循环执行步骤2和3,直到用户停止绘图。
3.2 代码框架
// 定义引脚
const int motorA_pin1 = 12;
const int motorA_pin2 = 13;
const int motorB_pin1 = 11;
const int motorB_pin2 = 10;
const int sensorPin = 2;
const int servoPin = 9;
const int buttonPin = 7;

// 定义变量
int shape = 0;  // 图形类型 0: 圆形,1: 方形,2: 矩形
int radius = 5;
int sideLength = 5;
int length = 10;
int width = 5;
unsigned long distance = 0;
int direction = 1; // 运动方向,1: 正向, -1: 反向

// 初始化函数
void setup() {
  // 初始化串口
  Serial.begin(9600);
  // 初始化电机驱动模块
  pinMode(motorA_pin1, OUTPUT);
  pinMode(motorA_pin2, OUTPUT);
  pinMode(motorB_pin1, OUTPUT);
  pinMode(motorB_pin2, OUTPUT);
  // 初始化光电传感器
  pinMode(sensorPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(sensorPin), sensorInterrupt, RISING);
  // 初始化舵机
  pinMode(servoPin, OUTPUT);
  // 初始化按键
  pinMode(buttonPin, INPUT);
}

// 主循环函数
void loop() {
  // 读取按键输入
  if (digitalRead(buttonPin) == LOW) {
    // 处理按键事件,选择图形类型和设置参数
  }

  // 根据图形类型和参数,控制小车运动和笔架升降,实现绘图功能
  switch (shape) {
    case 0: // 绘制圆形
      drawCircle(radius);
      break;
    case 1: // 绘制方形
      drawSquare(sideLength);
      break;
    case 2: // 绘制矩形
      drawRectangle(length, width);
      break;
  }
}

// 光电传感器中断函数
void sensorInterrupt() {
  distance += direction * 1; // 每次触发中断,计数值加或减1
}

// 绘制圆形
void drawCircle(int radius) {
  // 控制电机运动,并根据距离和半径计算运动时间
  // 控制舵机升降,放下笔画圆,再抬起笔
}

// 绘制方形
void drawSquare(int sideLength) {
  // 控制电机运动,并根据距离和边长计算运动时间
  // 控制舵机升降,放下笔画边,再抬起笔
}

// 绘制矩形
void drawRectangle(int length, int width) {
  // 控制电机运动,并根据距离、长和宽计算运动时间
  // 控制舵机升降,放下笔画边,再抬起笔
}

// 控制电机正转
void motorForward() {
  // 设置电机驱动模块的信号,实现电机正转
}

// 控制电机反转
void motorBackward() {
  // 设置电机驱动模块的信号,实现电机反转
}

// 设置电机速度
void setMotorSpeed(int speed) {
  // 设置电机驱动模块的信号,实现电机速度调节
}

// 控制舵机转动
void setServoAngle(int angle) {
  // 设置舵机驱动信号,实现舵机角度控制
}
4. 注意事项
电机驱动模块: 选择合适的电机驱动模块,确保其能驱动小车电机,并具有足够的电流输出能力。
传感器精度: 光电传感器精度会影响绘图精度,选择合适的传感器,并进行校准。
笔架设计: 笔架设计应确保画笔能稳定地接触纸面,并能轻松升降。
代码调试: 编写程序时,需要仔细调试代码,确保程序能正确执行,并根据实际情况进行调整。
5. 拓展
可以增加更多图形类型,例如三角形、五角星等。
可以添加更高级的控制功能,例如轨迹规划、自动避障等。
可以使用蓝牙、WIFI等无线通信模块,实现手机或电脑远程控制绘图小车。
6. 总结
以上是一个电子绘图小车系统设计的思路和代码框架,具体的实现细节需要根据实际情况进行调整。该系统可以帮助用户学习单片机控制技术、电机驱动技术、传感器应用等,并可以激发学生的创造力和动手能力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表