完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1 条评论
1个回答
|
|
一。伺服电机
Robot MeArm 不是MiniArm 直流伺服(servo)电机 (舵机) 45度为一个概念,不是具体的电机转动度数。 闭环控制系统 伺服电机引脚 Servo库来调节伺服电机 Servo.write(); 调整伺服电机到相应的角度 Serial.read(); 如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节。 如果数据缓冲区没有数据,将返回-1. 二。串口通讯 /* Sweep by BARRAGAN 《http://barraganstudio.com》 This example code is in the public domain. modified 8 Nov 2013 by Scott Fitzgerald */ #include 《Servo.h》 Servo myservo; // 创建Servo对象用以控制伺服电机 // 很多开发板允许同时创建12个Servo对象 int pos = 0; // 存储伺服电机角度信息的变量 void setup() { myservo.attach(9); // Servo对象连接在9号引脚 Serial.begin(9600); } void loop() { for (pos = 0; pos 《= 180; pos += 45) { // 0度转到180度 // 每一步增加1度 myservo.write(pos); // 告诉伺服电机达到‘pos’变量的角度 Serial.println(pos); delay(1000); // 等待15毫秒以确保伺服电机可以达到目标角度 } for (pos = 180; pos 》= 0; pos -= 45) { // 180度转到0度 myservo.write(pos); // 告诉伺服电机达到‘pos’变量的角度 Serial.println(pos); delay(1000); // 等待15毫秒以确保伺服电机可以达到目标角度 } } 串行端口 引脚0RX :接收(Receive) 引脚1TX:发送(Transmit) 1 byte = 8 bit 每一次arduino读取串口数据都是读取一个字节。 0V~5V 到 TTL 每一位数据所持续的时间,通过波特率来限定:波特率:9600 每秒传输9600位。 注意:9600位信息并非都是数据,串口通讯中有些是用来控制串口的。 Serial.available(); 返回串口接收缓存中等待传输的数据的字节数量。 char 字符型变量: char数据类型使用1个字节的内存来存储单个字符值。字符以ASCLL编码的形式存储。字符在单引号中 例如: ‘A’ char 数据类型不能存储字符串。 字符的ASCLL值可以用来做数学计算。 字符串 : “ABCD” ASCLL,美国信息互换标准代码,电脑编码系统 空位置读取,,返回-1 实现串口通讯: void setup() { // put your setup code here, to run once: Serial.begin(9622); Serial.println(“Please input serial data”); } void loop() { // put your main code here, to run repeatedly: if(Serial.available()》0){ char serialDate = Serial.read(); Serial.print(serialDate); } } 面包板电源模块 注意: 额外加的电源模块也需要共地。 Serial.parseInt(); 分析串口数据中的整数信息并赋值给变量pos。 忽略并跳过非数字字符或非“-”号的数据信息; 当达到预先设置的读取数据时间以后仍未能读到数字或有效字符则停止解析; 在有效的读取串口数据时间内未能读取有效数字,则返回0; 1.电机卡到某处,无法完成目标,一直在运行(就是组装时结构出现问题) 2.因为电压小而导致运动不稳定,产生响的声音(看看接的是不是5v电压) 3.电机内部齿轮咬合不紧密(换个电机) 4.未接地而导致运动不稳定(看看接地引脚以及接地线是否完整) 5.电机老化,电机线磨损严重导致的连接不稳定(换电机) 控制一个伺服电机:代码 #include 《Servo.h》 Servo myServo; //创建Servo对象myServo int dataIndex = 0; //创建整数型变量,存储输入数据序列号 void setup() { myServo.attach(6); //6号引脚 Serial.begin(9600); //启动串口通讯,传输波特率9600 Serial.println(“Please input serial data.”); } void loop() { // 检查串口缓存是否有数据等待传输 if ( Serial.available()》0 ) { dataIndex++; // 处理数据序列号并通过串口监视器显示 Serial.print(“dataIndex = ”); Serial.print(dataIndex); Serial.print(“ , ”); int pos = Serial.parseInt(); // 解析串口数据中的整数信息并赋值给变量pos Serial.print(“Set servo position: ”); Serial.println(pos); // 通过串口监视器显示变量pos数值 myServo.write(pos); // 使用pos变量数值设置伺服电机 delay(15); } } arduino按照我们程序中设置好的内容去完成。 三。数组 建立数组: int data[5]; 数组赋值: int data[5] = {0,45,90,135,180}; 二维数组 建立: int data2Array[4][5] = { {}, {} }; 数组还可以放其他相同的元素。 少的报错,,多了补0 不要超过数组边界,即使超过边界,arduino是不会报错的。 const 常量,只读状态。 用常量标识舵机的极限位置。 舵机转动速度控制:增加转动步数,控制等待时间。 使用for循环拆分成每一步 多个舵机,一步定位,一步复位: 用二维数组设定好步骤,,通过for循环进行执行。 码垛机器人。 HC-06蓝牙模块: 串口透传, level 3.3v,需要注意,不能超过,所以在蓝牙和arduino之间接一个分压电路 注意:arduino的RX(接收) TX(发出)接入蓝牙时,,电脑不能上传程序了。 char serialData; void setup() { Serial.begin(9600); pinMode(11, OUTPUT); //11引脚连接演示用LED } void loop(){ if( Serial.available()》0 ){ serialData = Serial.read(); if (serialData == ‘1’ ) { //接收到点亮LED指令 Serial.print(“Got command: ”); Serial.println(serialData); Serial.println(“LED-ON”); digitalWrite(11, HIGH); //点亮LED指令 } else { //接收到熄灭LED指令 Serial.print(“Got command: ”); Serial.println(serialData); Serial.println(“LED-OFF”); digitalWrite(11, LOW); //熄灭LED指令 } } } HC-06模块默认波特率9600 软件串口设置: #include 《SoftwareSerial.h》 可以用普通的引脚发送数据的库 SoftwareSerial BTserial(2,3); 建立Software对象,RX引脚2,TX引脚3 /* ---- AT指令 ---- 指令 答复 说明 AT OK 通讯测试 AT+VERSION OKlinvorV1.8 固件版本 AT+NAMEmyBTmodule OKsetname 设置设备名 “myBTmodule” AT+PIN6789 OKsetPIN 设置设备 PIN 6789 AT+BAUD1 OK1200 设置波特率 1200 AT+BAUD2 OK2400 设置波特率 2400 AT+BAUD3 OK4800 设置波特率 4800 AT+BAUD4 OK9600 设置波特率 9600 AT+BAUD5 OK19200 设置波特率 19200 AT+BAUD6 OK38400 设置波特率 38400 AT+BAUD7 OK57600 设置波特率 57600 AT+BAUD8 OK115200 设置波特率 115200 AT+BAUD9 OK230400 设置波特率 230400 AT+BAUDA OK460800 设置波特率 460800 AT+BAUDB OK921600 设置波特率 921600 AT+BAUDC OK1382400 设置波特率 1382400 */ #include 《SoftwareSerial.h》 SoftwareSerial BTserial(2, 3); // 建立SoftwareSerial对象,RX引脚2, TX引脚3 void setup() { Serial.begin(9600); BTserial.begin(9600); // HC-06 默认波特率 9600 Serial.print(“HC-06 DEMO/TEST ”); BTserial.print(“AT”); //可在此处输入设置HC-06蓝牙模块的AT指令。 //此AT指令须在HC-06未连接蓝牙状态输入。 pinMode(11, OUTPUT); } void loop(){ // 通过串口监视器显示HC-06发送的数据 if( BTserial.available()》0 ){ //如果软件串口有HC-06发来的数据 char BTserialData = BTserial.read(); //将软件串口中的数据赋值给变量BTserialData Serial.print( BTserialData ); //通过硬件串口监视器显示HC-06发来的数据 if (BTserialData == ‘1’) { //判断HC-06发来的数据是否是字符1 digitalWrite(11, HIGH); //如果是字符1,则点亮LED } else if (BTserialData == ‘0’) { //如果不是字符0 digitalWrite(11, LOW); //则熄灭LED } } // 将用户通过串口监视器输入的数据发送给HC-06 if (Serial.available()》0) { //如果硬件串口缓存中有等待传输的数据 char serialData = Serial.read(); //将硬件串口中的数据赋值给变量serialData BTserial.print( serialData ); //将硬件串口中的数据发送给HC-06 } } |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9099 浏览 4 评论
36771 浏览 19 评论
5025 浏览 0 评论
24743 浏览 34 评论
1527浏览 2评论
1742浏览 1评论
2192浏览 1评论
1552浏览 0评论
523浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:03 , Processed in 2.038526 second(s), Total 88, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号