Arduino 的 GRBL 库 – 使用 Arduino 的 IDE 直接烧写 GRBL 到您的 Arduino

GRBL Arduino Library – Use the Arduino IDE to flash GRBL directly to your Arduino

We have created an Arduino Library of the popular GRBL g-code Interpreter. A great little application that turns your Arduino into a very capable CNC machine.

GRBL,是广受欢迎的  G 代码解释器型 Arduino 库。一个很棒的小应用程序,借助它,可以把你的 Arduino 变成一个非常能干的 CNC 控制器。

This library makes it so much easier to install GRBL onto your Arduino. No more issues with making HEX files or trying to find a way to upload the Hex file to your board. Simply install the library and open the right example sketch for your Arduino.

这个库使得安装 GRBL 到您的 Arduino 容易得多。无需生成 HEX 文件,也无需努力寻找将 HEX 文件上传到你的主板的方法了。只需安装这个库文件,然后打开 Arduino 相应的 sketch 示例文件。

如何安装:

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

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

关于 Grbl

Grbl is a free, open source, high performance software for controlling the motion of machines that move, that make things, or that make things move, and will run on a straight Arduino. If the maker movement was an industry, Grbl would be the industry standard.

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

Most open source 3D printers have Grbl in their hearts. It has been adapted for use in hundreds of projects including laser cutters, automatic hand writers, hole drillers, graffiti painters and oddball drawing machines. Due to its performance, simplicity and frugal hardware requirements Grbl has grown into a little open source phenomenon.

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

In 2009, Simen Svale Skogsrud graced the open-source community by writing and releasing the early versions of Grbl to everyone (inspired by the Arduino GCode Interpreter by Mike Ellery). Since 2011, Grbl is pushing ahead as a community-driven open-source project under the pragmatic leadership of Sungeun K. Jeon Ph.D.

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

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

Opensource CNC controller written for Arduino’s (G-code interpreter GRBL)
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 教程之:步进电机控制

/*
Stepper Motor Control – one revolution

步进电机控制 – 一圈

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.

电机应朝一个方向旋转一圈,然后朝相反方向旋转一圈。

Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe

*/
继续阅读“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 教程之:串口输出”

Arduino 教程之:模拟输出

就像模拟输入一样,在现实的物理世界中我们经常需要输出除了 0 和 1 之外的其他数值。例如,除了想用微控制器打开或者关闭电灯之外,我们还会想控制灯光的亮度,这时就需要用到模拟输出。由于Arduino 的微控制器只能产生高电压(5V)或者低电压(0V),而不能产生变化的电压,因此必须采用脉冲宽度调制技术(PWM,Pulse Width Modulation)来模仿模拟电压。

PWM 是一种开关式稳压电源应用,它是借助微处理器的数字输出来对模拟电路进行控制的一种非常用效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。简而言之,PWM 是一种对模拟信号电平进行数字编码的方法,它通过对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等但宽度不相等的脉冲,而这些脉冲能够被用来代替正弦波或其它所需要的波形。

在 Arduino 数字 I/O 管脚 9、10 和 11 上,我们可以通过 analogWrite() 函数来产生模拟输出。该函数有两个参数,其中第一个参数是要产生模拟信号的引脚(9、10 或者 11);第二个参数是用于产生模拟信号的脉冲宽度,取值范围是 0 到 255。脉冲宽度的值取 0 可以产生 0V 的模拟电压,取 255 则可以产生 5V 的模拟电压。不难看出,脉冲宽度的取值变化 1,产生的模拟电压将变化 0.0196V(5/255 = 0.0196)。 继续阅读“Arduino 教程之:模拟输出”