如何使用 Arduino IDE 直接烧写 GRBL

GRBL,是广受欢迎的 Arduino G 代码解释器。借助它,可以将你的 Arduino 变成非常强大的 CNC 控制器。其次,将 GRBL 安装到 Arduino 也非常容易。无需生成 HEX 文件,也无需寻找将 HEX 文件上传到主板的方法了。只需简单安装库文件,然后打开 Arduino 相应的 sketch 示例文件就能搞定。

安装步骤:

  • 从 GitHub 下载库文件:GRBL Arduino Library
  • 解压缩库文件,然后,将解压缩后的文件夹复制到 Arduino 软件安装目录下的 Libraries 文件夹内。
  • 将该文件夹重命名为“GRBL”;
  • 打开 Arduino IDE;
  • 点击以下菜单:文件 -> 实例 -> GRBL -> Arduino Uno
  • 将 sketch 上传到你 Arduino Uno 板。

如果你对库文件的源代码感兴趣,可以点击此处获取。

连接 Grbl

This wiki is intended to provide various instructions on how to connect to grbl in various

ways. Please feel free to contribute more up-to-date or alternative methods.

这个维基旨在提供如何以不同的方式连接 Grbl 的各种说明。请随时提供更多最新的或替代的方法。 继续阅读“连接 Grbl”

关于 Grbl

Grbl 是一个免费,开源的,用于控制机器移动的高性能运动软件,并可直接在 Arduino 上运行。如果创客运动是一个产业,那么 Grbl 将会成为行业标准。

大多数开源 3D 打印机都是基于 Grbl 为核心。其已经适用于成百上千的项目,包括激光切割机,自动手作家、钻孔机,涂鸦画家和怪异的绘图机。由于其高效,简单和极低的硬件要求,Grbl 已经成为一个不小的开源事迹。

2009 年,Simen Svale Skogsrud  受惠于开源社区的贡献,编写并向所有人发布了 Grbl 的早期版本(灵感来自于 Mike Ellery 的 Arduino G 代码解释器)。2011 年以来,Grbl 在 Sungeun K. Jeon 博士务实的领导下作为一个社区驱动的开源项目在推进。

Arduino 的开源 CNC 控制器 GRBL (G 代码解释器)

Traditional CNC machines used old-fashioned printer / parallel ports to connect to a computer.The computer then sends the signals to the motor’s over individual cables.
传统的数控机床使用老式打印机 / 并行端口连接到计算机。然后计算机通过单独的连线将信号发送到马达端。

So why would you want to use a Arduino powered CNC controller?
那么 为什么你会选择 Arduino 驱动的 CNC 控制器呢?

Well the team from Dank that developed the software called Grbl have a few good reason for doing so. Here are their reasons..
好的,来自 Dank 的软件开发团队称 Grbl 有充份的理由让你这样做。这是他们给出的理由…

Who should use Grbl
谁会使用 Grbl

  • Makers who do milling and need a nice, simple controller for their system
    制造商的铣削系统需要一个友好的、 简单的控制器
  • People who loathe to clutter their space with legacy PC-towers just for the parallel-port
    那些讨厌杂乱的旧的塔式 PC 并行端口的人
  • Tinkerers who need a controller written in tidy, modular C as a basis for their project.
    超级玩家需要一个可写入的控制器,为他们以 C 作为基础的模块化项目

I can actually think of a lot more than just those.With a bit of tinkering you can actually make your CNC machine run in headless mode where you just upload your design to the Arduino and the machine will do the rest without the need of a PC.
事实上,我能想到的不仅仅是这些还有更多,稍微改造下,你可以让你的数控机床在无上位机的模式运行,只要上传你的 Arduino 设计,机器无需再连接计算机就会工作。

You could also add a Wireless connection to the Arduino allowing you to remotely control your CNC machine from a mobile device.
你还可以为 Arduino 添加一个无线连接,以允许你从移动设备远程控制您的数控机床。

关于 Arduino 版数控雕刻机的点滴

一直以来我都相信自己可以把这台机器推荐给世上绝大部分的人,也想以此带动一部分人摆脱无聊、灰暗、枯躁、麻木、一成不变的生活,我的初衷是希望他们更有情趣,更有意义,更积极向上,更精彩的生活着。可是现在的我开始怀疑自己,我是不是有点盲目乐观,它会不会是一个小众化的产品?

今天分享下关于 Arduino 版数控雕刻机的东西,对于密切关注 Arduino 的朋友,可能这已经算不上是什么新鲜的东西了。而我亦是后知后觉,在了解了这个信息之后几个月才来分享,也是懒惰到不行了。小小狡辩一下,在知道这个信息后我也准备自己动手做一台,采购电路,验证软件与电路的可行性后,我就没日没夜的在电脑上画图,反复修改。不堪回首的一些日子之后,雕刻机的机械部分终于定稿,出图纸,然后交给事先联系好的淘宝卖家打样,这才总算可以平静下来,心情轻松的敲敲键盘把想说的分享出来。 继续阅读“关于 Arduino 版数控雕刻机的点滴”

Arduino 蓝牙控制 L298N 直流电机驱动板附代码

一段蓝牙控制车子的代码,直流电机驱动板为 L298N,稍后补充更详细的资料。

int motor1 = 13;
int motor2 = 12;
int Ena = 10;

int motor3 = 11;
int motor4 = 8;
int Enb = 9;

const int RxPin = 0;
const int TxPin = 1;

int dir;

void setup() {
 
 Serial.begin(9600);
 
 pinMode(motor1, OUTPUT);
 pinMode(motor2, OUTPUT);
 pinMode(Ena, OUTPUT);
 pinMode(motor3, OUTPUT);
 pinMode(motor4, OUTPUT);
 pinMode(Enb, OUTPUT);
 
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, LOW);
 digitalWrite(motor3, LOW);
 digitalWrite(motor4, LOW);
 
 pinMode(RxPin, OUTPUT);
 pinMode(TxPin, INPUT);
}

void loop() {
 dir = Serial.read();
 
 switch(dir) {
 case 'f':
 case 'F':
 m_forward();
 break;
 case 'b':
 case 'B':
 m_back();
 break;
 case 'l':
 case 'L':
 m_left();
 break;
 case 'r':
 case 'R':
 m_right();
 break;
 default:
 m_stop();
 }
}

void m_forward() {
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, HIGH);
 analogWrite(Ena, 250);
 digitalWrite(motor3, LOW);
 digitalWrite(motor4, HIGH);
 analogWrite(Enb, 250);
 Serial.println("forward");
 delay(100);
}

void m_back() {
 digitalWrite(motor1, HIGH);
 digitalWrite(motor2, LOW);
 analogWrite(Ena, 250);
 digitalWrite(motor3, HIGH);
 digitalWrite(motor4, LOW);
 analogWrite(Enb, 250);
 Serial.println("back");
 delay(100);
}

void m_left() {
 digitalWrite(motor1, HIGH);
 digitalWrite(motor2, LOW);
 analogWrite(Ena, 250);
 digitalWrite(motor3, LOW);
 digitalWrite(motor4, HIGH);
 analogWrite(Enb, 250);
 Serial.println("left");
 delay(100);
}

void m_right() {
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, HIGH);
 analogWrite(Ena, 250);
 digitalWrite(motor3, HIGH);
 digitalWrite(motor4, LOW);
 analogWrite(Enb, 250);
 Serial.println("right");
 delay(100);
}

void m_stop() {
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, LOW);
 digitalWrite(motor3, LOW);
 digitalWrite(motor4, LOW);
 Serial.println("stop");
 delay(100);
}

Arduino 教程之:步进电机控制

This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 – 11 of the Arduino.

该程序用于驱动单极或双极步进电机。电机连接到 Arduino 的数字引脚 8 – 11。

The motor should revolve one revolution in one direction, then
one revolution in the other direction.

电机应朝一个方向旋转一圈,然后朝相反方向旋转一圈。 继续阅读“Arduino 教程之:步进电机控制”

Arduino 教程之:XBee 无线通信

借助 XBee 扩展板我们可以很方便地将 XBee 模块连接到 Arduino 上,XBee 模块的工作原理也非常简单,它与 Arduino 之间其实就是通过串行接口(即 Tx 和 Rx 引脚)进行通信。对于简单的点对点通信来讲,只需要通过串行接口向 XBee 模块写数据就可以实现数据的发送;当 XBee 模块通过无线通道接收到数据时,通过读串行接口可以很方便地获得这些数据。

原理弄清楚之后,其实我们可以将 XBee 模块看成是 Arduino 的串口,通过相应的串口操作函数来实现数据的接收和发送。首先请按照 Arduino XBee 模块使用手册中的说明配置好你的两个 XBee 模块,然后将相应的跳线连接到 XBee 一端: 继续阅读“Arduino 教程之:XBee 无线通信”

Arduino 教程之:串口输入

串行通信是实现 PC 机与微控制器进行交互的最简单的办法。之前的 PC 机上一般都配有标准的 RS-232 或者 RS-422 接口来实现串行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用 USB 这样一种更快速但同时也更加复杂的方式来实现串行通信。尽管在有些计算机上现在已经找不到 RS-232 或者 RS-422 接口了,但我们仍可以通过 USB/串口 或者 PCMCIA/串口 这样的转换器,在这些设备上得到传统的串口。

通过串口连接的 Arduino 在交互式设计中能够为 PC 机提供一种全新的交互方式,比如用 PC 机控制一些之前看起来非常复杂的事情,像声音和视频等。很多场合中都要求 Arduino 能够通过串口接收来自于 PC 机的命令,并完成相应的功能,这可以通过 Arduino 语言中提供的 Serial.read() 函数来实现。 继续阅读“Arduino 教程之:串口输入”

Arduino 教程之:串口输出

在许多实际应用场合中我们会要求在 Arduino 和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。

在 PC 机上上最常见的串行通信协议是 RS-232 串行协议,而在各种微控制器(单片机)上采用的则是 TTL 串行协议。由于这两者的电平有很大的不同,因此在实现 PC 机和微控制器的通信时,必须进行相应的转换。完成 RS-232 电平和 TTL 电平之间的转换一般采用专用芯片,如 MAX232 等,但在 Arduino 上是用相应的电平转换电路来完成的。

根据 Arduino 的原理图我们不难看出,ATmega 的 RX 和 TX 引脚一方面直接接到了数字 I/O 端口的 0 号和 1 号管脚, 另一方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用 Arduino 与 PC 机通信时,可以用串口线将两者连接起来;当我们需要用 Arduino 与微控制器(如另一块 Arduino)通信时,则可以用数字 I/O 端口的 0 号和 1 号管脚。

串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在 Arduino 语言可以使用 Serial.begin() 函数来简化这一任务。为了实现数据的发送,Arduino 则提供了 Serial.print() 和 Serial.println() 两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。 继续阅读“Arduino 教程之:串口输出”