气缸是一个廉价而高效的执行元件,可以用它来轻松实现推拉动作。如何用Arduino控制它,甚至遥控它呢?接下来我们一起试验一下

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(1)

最终装配图

原作者: JDSII 翻译整理:DIY百事

该项目的目标是通过射频传输远程控制连接到气缸的电磁阀。该系统依赖于两个 Arduino UNO,它们通过在 2.4GHz 范围内运行的 NRF24L01 无线模块进行无线通信。这些模块使用 Radiohead 库,可以充当发射器、接收器或收发器。在这个项目中,“客户端”Arduino 向“接收端”Arduino 发送信号,然后触发一个电磁阀将空气释放到双作用气缸中。代码可以很容易地操作,以获得各种不同的效果。

1 所需材料

气动装置

Arduino 装置

2 气动装置

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(2)

气动元件

为了向气缸供气,我使用了 1个储气罐。一端装有灌装阀和公接头。另一端,它有一个调压阀和截止阀,用来对气缸供气。。

3 电磁阀

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(3)

电磁阀

我选择使用 5 位2通、12v 电磁阀。因为它在 12v 上运行,所以它能够与 Arduino 共享电源并从 Arduino 的 VIN 引脚引出 12v 电源。我的电磁阀有 1/8" NPT 连接,但也有 1/4" 的品种可用。左侧的 3 个端口是进气口,位于两个排气口之间。我将排气口留空,但您可以通过添加消声器、流量控制阀或两者都要来获得更多功能。

第 4 步:Arduino #1“信号发送端”

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(4)

Arduino #1“发送端”接线图

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(5)

Arduino #1 发送端原理图

两个 Arduino 的代码都源自 Radiohead 库中包含的示例代码。Radiohead 库使得在两侧集成 nrf24l01 收发器模块变得更加容易。系统的“客户”端主要执行以下操作:

1) 使用“接收端”Arduino 设置匹配的发送/接收设置。

2) 初始化 RF 通信(如果通信失败,通过串口监视器发送错误消息)

3) 等待按钮按下(数字 I/O 引脚 2)

4)如果按下按钮,向“接收端”Arduino发送一条消息。

*不要忘记轻触按钮在接地端需要一个下拉电阻。我用了 10kΩ。

第 5 步:Arduino信息发送端代码

// nrf24_client<br> /* nrf24l01 Arduino CE > D8 CSN > D10 SCK > D13 MO > D11 MI > D12 RO > Not used GND > GND VCC > 5V */ #include <SPI.h> #include <RH_NRF24.h> const int button = 2; // Singleton instance of the radio driver RH_NRF24 nrf24; void setup() { Serial.begin(9600); if (!nrf24.init()) Serial.println("init failed"); // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm if (!nrf24.setChannel(125)) Serial.println("setChannel failed"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); } void loop() { if (digitalRead(button) == HIGH) { uint8_t data[] = "104"; nrf24.send(data, sizeof(data)); } delay(50); //prevents data overflow when button is held (theoretically) }

第 6 步:Arduino“接收端”设置

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(6)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(7)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(8)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(9)

系统的“接收端”在 nrf24l01 的接线方式上与“发射端”相同。不同之处在于,这个 Arduino 旨在接收信号并执行操作。这是它在这种情况下的作用:

1) 使用“发射端”Arduino 设置匹配的发送/接收设置。

2) 初始化 RF 通信(如果通信失败,并通过串口监视器发送错误消息)

3) 定义对它将接收的消息类型

4)启动一个循环计数器(1000个循环)

5) 查找特定消息

6) 如果收到消息(“104”),启动电磁阀,然后将其收回(使用数字 I/O 引脚 3)。重置计数器

7) 否则,继续查找消息并同时保持电磁阀缩回。

此设置使用 TIP120 达林顿晶体管在引脚触发时向电磁阀发送 12v 电压。12v 锂离子电池组用于为 Arduino(通过桶形插头)和电磁阀(通过 VIN 引脚)供电。*小心不要将任何其他东西连接到 VIN 引脚,因为它带有 12v 电压并且会损坏大多数其他组件*

*还要记住在晶体管的“基极”引脚上放置一个电阻器(我使用了 10kΩ),以防止更高的电压通过控制线到引脚 3 流入 Arduino。

与所有电磁阀一样,该电磁阀需要一个缓冲二极管,以防止在电磁阀失电时瞬态电压流过系统。二极管是定向的,应该从线圈的负极到正极。

第 7 步:Arduino“接收端”代码

// nrf24_server /* NRF24L01 Arduino CE > D8 CSN > D10 SCK > D13 MO > D11 MI > D12 RO > Not used GND > GND VCC > 5V */ #include <SPI.h> #include <RH_NRF24.h> const int FIRE = 3; int timeOUT = 0; RH_NRF24 nrf24; void setup() { pinMode(FIRE, OUTPUT); Serial.begin(9600); if (!nrf24.init()) Serial.println("init failed"); if (!nrf24.setChannel(125)) //set channel to 125 Serial.println("setChannel failed"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); } void loop() { if (nrf24.available()) { uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.recv(buf, &len)) //read message { Serial.print("got request: "); Serial.println((char*)buf); int sig = atoi((const char*) buf); if (sig == 104) { digitalWrite(FIRE, HIGH); //fire solenoid timeOUT = 0; //message received, reset counter delay(150); digitalWrite(FIRE, LOW); } } else { if (timeOUT > 1000) //close solenoid if this loop has ran _ or more times { digitalWrite(FIRE, LOW); //close solenoid } timeOUT ; //increment counter } } }

第 8 步:开始工作!

接好电子元件及气路,我们就可以工作了。截图如下

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(10)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(11)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(12)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(13)

arduino摇杆控制led灯(Arduino及nrf24实现气缸的遥控)(14)

,