0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino键盘怎样控制伺服

454398 来源:网络整理 作者:佚名 2019-11-06 11:28 次阅读

步骤1:设置硬件

Arduino键盘怎样控制伺服

设置很简单。我们将使用:

引脚4 - 11:键盘输入

引脚3:伺服电机输出

VCC(5V)

GND(接地)

键盘输入垂直向下连接。将键盘上的每根电线从右到左连接到引脚4-11。伺服电机直接连接到5V,接地和引脚3.在我的伺服(Tower Pro SG90)上,红线为5V,接地为棕色,输出引脚为黄色。检查伺服电机的文档。

步骤2:代码

让我们看一下代码:

#include

#include

// Set up keypad variables:

int numKeyPresses = 0; // Track number of key presses

int maxKeyPresses = 3; // Only allow 3 digits to be entered

int keyPresses[3] = { 0, 0, 0 }; // Initialize an empty array to hold input

const byte numRows= 4; // # of rows on the keypad

const byte numCols= 4; // # of columns on the keypad

// Set up servo variables:

int angle = 0; // Angle in degrees to position servo [0-180]

int angleMultiplier = 1; // Multiply by each digit, divide by 10 on each input

Servo servo; // Create the servo object

int servoPin = 3; // Set the servo pin

char keymap[numRows][numCols]= // Setup the keypad layout

{

{‘1’, ‘2’, ‘3’, ‘A’},

{‘4’, ‘5’, ‘6’, ‘B’},

{‘7’, ‘8’, ‘9’, ‘C’},

{‘*’, ‘0’, ‘#’, ‘D’},

};

在这里,我们导入键盘和伺服库来帮助进行一些输入和输出处理。 numkeyPresses变量跟踪已输入的条目数。当达到maxKeyPresses时,这将重置为0.键盘映射设置为4x4矩阵,模仿物理键盘。

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.

byte rowPins[numRows] = { 11, 10, 9, 8 };

// Connect keypad COL0, COL1 and COL2 to these Arduino pins.

byte colPins[numCols] = { 7, 6, 5, 4 };

// Create the Keypad

Keypad kpd = Keypad( makeKeymap( keymap ), rowPins, colPins, numRows, numCols );

void setup()

{

Serial.begin(9600); // Start up serial comms

resetAngleMultiplier(); // Start accepting numeric input

servo.attach( servoPin ); // Attaches the servo to the servo object

} // setup

这里我们使用一个名为resetAngleMultiplier的方法,我将使用马上讨论一下。我们的想法是,我们希望在数学上将输入转换为可用数字,而不是字符。这使我们做到了这一点。

void loop()

{

char key = kpd.getKey();

if( key ) // Check for a valid key

{

if( key 》= 0x41 && key 《= 0x44 || key == 0x23 || key == 0x2A )

{

resetInput();

Serial.println( “ERROR: Numeric input only!” );

} // ^ if invalid entry

else // Else, entry is valid:

{

angle += angleMultiplier * ( key - 0x30 );

angleMultiplier /= 10;

if( numKeyPresses == maxKeyPresses - 1 )

{

setServo( angle ); // Use the input to turn servo

resetInput();

}

else

{

numKeyPresses++;

}

Serial.println( (String) angle );

}

} // if( key )

} // loop

这里我们接受输入并处理它。我们将讨论如何处理它。

void setServo( int angle )

{

if( angle 》 180 )

angle = 180;

Serial.println( “Setting servo to ” + (String) angle + “ degrees.” );

servo.write( angle ); // Set the servo position

} // setServo

void resetAngleMultiplier()

{

angleMultiplier = 1;

/* We started out with a multiplier of 10^0 (or 1)。 For each

number we want to accept, we want to have a multiplier one

order of magnitude greater. So, for example, for 5 digits, the

multiplier starts out as 10 000. */

for( int i = 0; i 《 maxKeyPresses - 1; i++ )

angleMultiplier *= 10;

} // resetAngleMultiplier

void resetInput()

{

resetAngleMultiplier(); // Reset the numeric input

angle = 0; // Reset the angle

numKeyPresses = 0; // Reset number of key presses

}

数学

在循环中,我们检查非数字输入并重置numKeyPresses变量if检测。进行转换的部分是:angle + = angleMultiplier *(key - 0x30)。当我们获得按键时,它将作为键映射2-diminsional数组中的字符返回。 key - 0x30以十六进制的形式减去30以获得它的数字等价物。

然后,我们必须将它乘以angleMultiplier。角度乘数从100开始。因此,例如,如果第一个数字输入为3,则添加到角度的数字将为300.然后将角度乘数除以10,以便下一次迭代,角度乘数将为10如果输入2,则将其乘以10并相加,得到320.这将一直持续到输入结束。

我写这个是可扩展的,允许扩展maxKeyPresses。 C ++的最大整数值是2147483647,所以使用这个程序,理论上你可以输入多达10位的输入,只要实际的密钥代码加起来不超过这个数。您总是可以使用 long 来存储输入,但出于我们的目的,没有必要。

应用数学

所以,现在我们我们(可能过于复杂)的计算,只需将其传递给伺服机构,将其定位到该特定角度。这里限制为180度的移动。如果数字输入超过180,则重置为180度并传递给伺服。这可能有多个应用程序,无论您是想在家中实现锁定系统,安全摄像机定位器,还是您需要的任何应用程序。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 键盘
    +关注

    关注

    4

    文章

    858

    浏览量

    39566
  • 伺服
    +关注

    关注

    16

    文章

    644

    浏览量

    40875
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186571
收藏 人收藏

    评论

    相关推荐

    伺服电机原理及控制应用

    伺服电机(Servo Motor)是一种高精度、高性能的电动机系统,广泛应用于需要精确控制位置、速度和加速度的场合。 一、伺服电机的工作原理 伺服电机是指在
    的头像 发表于 10-22 16:58 215次阅读

    伺服控制系统的分类方式和常见伺服控制系统介绍

    伺服控制系统是一种能对试验装置的机械运动按预定要求进行自动控制的操作系统。伺服系统的分类方法很多,常见的分类方法有以下三种:1、按被控量参数特性分类。2、按驱动元件的类型分类:
    的头像 发表于 08-26 17:46 686次阅读
    <b class='flag-5'>伺服</b><b class='flag-5'>控制</b>系统的分类方式和常见<b class='flag-5'>伺服</b><b class='flag-5'>控制</b>系统介绍

    开源项目!基于 Arduino DIY 漂亮的宏机械键盘

    大大简化你的工作流程。 举个例子,你可以将宏键盘上的一个按键设置为 CTRL+C 快捷键的映射,这样,在需要复制文本或文件时,只需一键即可轻松完成。当你按下这个按键时,内置的 Arduino 会立即
    发表于 08-19 17:02

    PLSY指令怎样控制伺服正反转

    PLSY指令(PLC中的脉冲输出指令)通常用于控制伺服电机的正反转和速度。 1. 伺服电机概述 伺服电机是一种高精度、高响应速度的电机,广泛应用于自动化设备、机器人、数控机床等领域。
    的头像 发表于 08-19 14:51 1100次阅读

    伺服电机也是脉冲控制吗为什么

    伺服电机是一种高精度、高响应速度的电机,广泛应用于工业自动化、机器人、航空航天等领域。伺服电机的控制方式有很多种,其中脉冲控制是一种常见的控制
    的头像 发表于 07-14 10:37 746次阅读

    通过I2C PWM IC控制伺服,可以为伺服控制进行高优先级中断吗?

    () 大约需要 100 毫秒才能完成请求。 我怎样才能避免那里的事情。 我可以为伺服控制进行高优先级中断吗? 使用 Arduino IDE。
    发表于 07-12 06:20

    伺服控制系统的分类方式和常见伺服控制系统介绍

      伺服控制系统是一种能对试验装置的机械运动按预定要求进行自动控制的操作系统。伺服系统的分类方法很多,常见的分类方法有以下三种:   1、按被控量参数特性分类。   2、按驱动元件的类
    的头像 发表于 06-17 09:00 778次阅读

    伺服驱动器对伺服电机的控制要求

    伺服驱动器对伺服电机的控制要求是一个复杂而深入的话题。以下是关于伺服驱动器对伺服电机控制要求的概
    的头像 发表于 06-14 15:24 707次阅读

    mach3控制怎样连接伺服

    在这篇文章中,我们将详细介绍如何将Mach3控制卡与伺服电机连接。Mach3是一款广泛使用的数控(CNC)软件,它可以控制各种类型的机械设备,包括铣床、车床、激光切割机等。伺服电机是一
    的头像 发表于 06-12 14:15 1654次阅读

    求助,在esp-idf中使用arduino作为组件后怎样使用arduino的库?

    在esp-idf中使用arduino作为组件后怎样使用arduino的库,例如我此时需要使用arduino的第三方库blinker,怎样使用
    发表于 06-12 07:21

    液压伺服控制系统的控制要求

    液压伺服控制系统是一种利用液压传动和伺服控制技术实现精确控制的系统。它广泛应用于工业、航空、船舶、冶金等领域。本文将详细介绍液压
    的头像 发表于 06-05 15:59 707次阅读

    伺服驱动器和伺服控制器的区别

    在工业自动化和精密控制领域中,伺服驱动器和伺服控制器是两个至关重要的组件,它们各自在伺服系统中扮演着不同的角色。尽管两者在功能和目的上有所重
    的头像 发表于 06-05 15:24 1878次阅读

    如何使用Arduino UNO板和电位器控制伺服电机

    在本Arduino伺服电机教程中,您将学习如何使用Arduino UNO板和电位器控制伺服电机。
    的头像 发表于 02-11 10:11 2537次阅读
    如何使用<b class='flag-5'>Arduino</b> UNO板和电位器<b class='flag-5'>控制</b><b class='flag-5'>伺服</b>电机

    伺服电机的三种控制方式 如何确定选择伺服电机控制方式?

    伺服电机的三种控制方式 如何确定选择伺服电机控制方式? 伺服电机是一种能够根据输入信号实时调整转速和位置的电动机。它通常用于需要高精度、高效
    的头像 发表于 12-26 14:02 1535次阅读

    怎样验证防爆伺服电机是否过冲呢?

    怎样验证防爆伺服电机是否过冲呢? 验证防爆伺服电机是否过冲是非常重要的,因为过冲可能导致设备损坏、事故发生,甚至危及人员的生命安全。下面将详细介绍如何验证防爆伺服电机是否过冲。 一、了
    的头像 发表于 12-25 11:47 745次阅读