Arduino实训-可移动机械臂(智能小车)

Arduino课程设计的实训要求通过UNO开发板设计工程项目并且与自主开发的AndroidAPP实现连接,最后选择了完成一个可移动机械臂。下面是最终成果图。

最终的效果:可通过手机开发的AndroidApp实现控制小车上的蓝牙模块进行连接并且控制小车的运动和机械臂的运动。 

这是开发的AndroidApp(时间受限,UI设计比较简陋。。。)

这是APP的蓝牙连接部分

 接下来展示一下关于Arduino代码片段

#include <Servo.h>Servo myservo1,myservo2,myservo3,myservo4;  // create servo object to control a servo
const int SERVOS = 4;  //舵机数4个
int  value[SERVOS], idle[SERVOS], currentAngle[SERVOS], MIN[SERVOS], MAX[SERVOS], INITANGLE[SERVOS], previousAngle[SERVOS],ANA[SERVOS]; char command;    //read the char
#define ServoDelayTime 50int delta = 5;  //舵机转动幅度
int delta_bottom = 2; //底座舵机转动幅度void setup() {// put your setup code here, to run once:Serial.begin(9600);         //The monitor UART//-----电机IO口定-pinMode( 8, OUTPUT);pinMode( 9, OUTPUT);pinMode( 10, OUTPUT);pinMode( 11, OUTPUT);//机械手爪定义端口myservo1.attach(2);  //手爪电机myservo2.attach(7);  //上臂电机myservo3.attach(12); //下臂电机myservo4.attach(13); //底座电机   //手爪 ServoMIN[0] = 10;MAX[0] = 50;INITANGLE[0] = 30;//上臂电机MIN[1] = 10; // This should bring the lever to just below 90deg to groundMAX[1] = 140;INITANGLE[1] = 90; // This should bring the lever parallel with the ground//下臂电机MIN[2] = 40;MAX[2] = 170;INITANGLE[2] = 90;//底座电机MIN[3] = 0;MAX[3] = 170;INITANGLE[3] = 90;//初始化电机myservo1.write(INITANGLE[0]);  myservo2.write(INITANGLE[1]);  myservo3.write(INITANGLE[2]);myservo4.write(INITANGLE[3]);  currentAngle[0]=INITANGLE[0];currentAngle[1]=INITANGLE[1];currentAngle[2]=INITANGLE[2];currentAngle[3]=INITANGLE[3];  
}void loop() 
{// put your main code here, to run repeatedly:if(Serial.available()>0){command = Serial.read();Serial.println(command);}  switch (command){case 'F':forward(); //机器人前进break;case 'B':back();    //机器人后退break;case 'R':right();  //机器人右转break;case 'L':left();    //机器人左转break;case 'S':stop();    //机器人停止Serial.println("S");break;        case '0':Serial.println("Servo all stop");delay(ServoDelayTime);break;case '1':Serial.println("MeArm turn Left");BottomLeft();delay(ServoDelayTime);break;case '2':Serial.println("MeArm turn Right");BottomRight();delay(ServoDelayTime);break;case '3':Serial.println("Arm A Up");Arm_A_Up();        delay(ServoDelayTime);break;case '4':Serial.println("Arm A Down");Arm_A_Down();      delay(ServoDelayTime);break;case '5':Serial.println("Arm B Up");Arm_B_Up();      delay(ServoDelayTime);break;case '6':Serial.println("Arm B Down");Arm_B_Down();      delay(ServoDelayTime);break;case '7':Serial.println("Clamp Open");ClampOpen();         //打开手爪  break;case '8':Serial.println("Clamp Close");ClampClose();     // 闭合手爪break;      }}//---------------------------------手爪函数定义---------------------------------------void ClampOpen()                //手爪打开
{myservo1.write(MAX[0]);delay(300);
}void ClampClose()
{myservo1.write(MIN[0]);     //手爪闭合delay(300);
}
void BottomLeft()             // 底座左转
{if(currentAngle[3] + delta_bottom < MAX[3]) {currentAngle[3] += delta_bottom;}myservo4.write(currentAngle[3]);
}void BottomRight()             // 底座右转
{if(currentAngle[3] - delta_bottom > MIN[3]) currentAngle[3] -= delta_bottom;myservo4.write(currentAngle[3]);
}void Arm_A_Up()            //上臂舵机向上
{if(currentAngle[1] + delta < MAX[1])currentAngle[1] += delta;myservo2.write(currentAngle[1]);
}void Arm_A_Down()      //上臂舵机向下
{if(currentAngle[1] - delta > MIN[1])currentAngle[1] -= delta;myservo2.write(currentAngle[1]);
}void Arm_B_Up()     //下臂舵机上升
{if(currentAngle[2] - delta >  MIN[2])currentAngle[2] -= delta;myservo3.write(currentAngle[2]);
}void Arm_B_Down()  //下臂舵机下降
{if(currentAngle[2] + delta < MAX[2])currentAngle[2] += delta;myservo3.write(currentAngle[2]);
}
void Servo_stop() //停止所有舵机
{myservo1.write(currentAngle[0]);myservo2.write(currentAngle[1]);myservo3.write(currentAngle[2]);myservo4.write(currentAngle[3]);
}//---------------------------------运动函数定义---------------------------------------
void forward()
{digitalWrite(8, LOW);digitalWrite(9, HIGH);digitalWrite(11, LOW); digitalWrite(10, HIGH);
}void right()
{digitalWrite(8, LOW);digitalWrite(9, HIGH);digitalWrite(11, LOW);digitalWrite(10, LOW);
}void back()
{digitalWrite(8, HIGH);digitalWrite(9, HIGH);digitalWrite(11, HIGH);digitalWrite(10, HIGH);
}void left()
{digitalWrite(8, LOW);digitalWrite(9, LOW);digitalWrite(11, LOW);digitalWrite(10, HIGH);
}void stop()
{digitalWrite(8, LOW);digitalWrite(9, LOW);digitalWrite(11, LOW);digitalWrite(10, LOW); 
}

简单解释一下代码:初始化端口后,设置运动函数对应着小车的前进、后退、停止等运动,然后通过switch语句通过接收到的不同的字符来实现对小车的控制(字符就是从蓝牙客户端接收到的字符)。

接下来讲一下AndroidApp开发部分,本项目选择的是蓝牙的方式实现连接,这一部分的原生开发网上都找得到,就不多赘述了。这边简单介绍一个更简单的方法进行App开发—Appinventor

App Inventor 原是Google实验室(Google Lab)的一个子计划,由一群Google工程师和勇于挑战的Google使用者共同参与设计完成。Google App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式。除此之外它也正式支持乐高NXT机器人,对于Android初学者或是机器人开发者来说是一大福音。因为对于想要用手机控制机器人的使用者而言,他们不大需要太华丽的界面,只要使用基本元件例如按钮、文字输入输出即可。

这个是Appinventor中文版网址:MIT App Inventor

下面是我的蓝牙App的组件设计

在左边的选框中选择你需要的组件拖到右边的屏幕中,在拖动组件前先选择布局-如何放置你的组件。

因为是用蓝牙连接,所以需要在左边组件面板栏内选择通信连接中的蓝牙模块,然后添加客户端和服务端。到这边组件设计就基本完成,想要好看的界面可以再多琢磨一下。

接下来是逻辑设计(点击右上角的逻辑设计转换设计视图) 

 

这边的是蓝夜的连接部分(就是点击连接可以出现搜索到的蓝牙) 

先点击逻辑,从中找到当...执行的拼图,然后点击列表选择框1,就会出现可对列表选择框1进行的操作,点击拼图移动到对应的位置可自动完成连接,蓝牙拼图点击蓝牙客户端就可以找到。

蓝牙断开按钮的设计

 

按钮控制运动部分的设计,都是选择要设置的按钮,选择对应的松开或者按压操作,然后选择蓝牙客户端的发送文本拼图,接着点击文本选择字符框,然后填入之前在Arduino代码设置的字符。到这App的设计就彻底完成。

打包对应的apk发送到手机上,下载安装即可。

本人也是菜鸟,希望本文章能对在学习过程中遇到同样问题的人一些帮助。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12193.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30分钟!从0到1,用ChatGPT+Python做一个AI起名网!

坚持6年&#xff0c;第629篇原创 现在利用ChatGPT可以做很多很多事情&#xff0c;而对于我们程序员来说&#xff0c;是机会也是挑战&#xff01;因为原来很多工种&#xff0c;很多技术问题现在可以用非常廉价的技术去获取&#xff0c;成本更低了&#xff01; 打个比方&#xff…

ChatGPT 加持,决策大模型距离 AGI 更进一步

过去短短不到一年里&#xff0c;ChatGPT、GPT-4 的相继面世&#xff0c;不断刷新人们对 AI 的认知。 新技术带来变革&#xff0c;也引发了外界对 AI 是否会取代人的讨论&#xff0c;OpenAI 首席执行官 Sam Altman 也公开表示&#xff0c;对人工智能技术的强大能力有些担忧。 …

人工智能从来不是一帆风顺的

不久之前&#xff0c;人们还常说&#xff0c;计算机视觉的辨别能力尚不如一岁大的孩子。如今看来&#xff0c;这句话要改写了。 ----- 特伦斯谢诺夫斯基 目录 人工智能初现端倪 人工智能初现 人工智能“第一次危机”——“设计派”行不通 第一次危机破局——学习派初见成效…

融入ChatGPT生成能力后,员工AI助手实力狂飙

聊天机器人ChatGPT爆火“出圈”&#xff0c;让公众的视线再次聚焦在AI办公领域&#xff0c;随着企业数字化转型的深入&#xff0c;AI技术也悄悄渗透进办公室里&#xff0c;并在逐步颠覆企业当前的办公方式。 雇主评论网站Glassdoor旗下的社交平台Fishball的一份调查报告显示&a…

ChatGPT只是开胃菜,AIGC风口真的来了

去年OpenAI发布的ChatGPT在全球疯狂刷屏成为一款现象级产品&#xff0c;并成功出圈受到IT、新闻媒体、学术研究、教育等领域的广泛好评和应用。甚至有一位美国学生用ChatGPT 写论文拿下全班最高分&#xff0c;受到了全球媒体的热议。 比尔盖茨曾在今年“Reddit AMA大会”表示&…

2023年的深度学习入门指南(5) - 动手写第一个语言模型

2023年的深度学习入门指南(5) - 动手写第一个语言模型 上一篇我们介绍了openai的API&#xff0c;其实也就是给openai的API写前端。在其它各家的大模型跟gpt4还有代差的情况下&#xff0c;prompt工程是目前使用大模型的最好方式。 不过&#xff0c;很多编程出身的同学还是对于…

知识工作者如何面对ChatGPT的竞争?

什么是ChatGPT ChatGPT的全名是Chat Generative Pre-Trained Transfomer&#xff0c;是一款在2022年11月份推出的人工智能聊天机器人。特点是可以通过大型语言模型进行强化学习训练&#xff0c;对话模式非常接近人类自然对话。 ——维基百科 ChatGPT能做什么&#xff1f; Chat…

ChatGPT 下我的焦虑

鉴于一些读者还未体验过&#xff0c;可以看一下以下 GitHub 项目&#xff0c;收集了几千个封装的 ChatGPT 网站&#xff1a; https://github.com/weekend-project-space/chatgpt-sites 在 ChatGPT 刚出的时候&#xff0c;我对 AI 不屑一顾&#xff0c;大概源自于好几年前人工智…

吴军博士被ChatGPT粉丝 疯狂炮轰!他究竟做错了什么?

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 最近&#xff0c;吴军博士的一些观点引起了热议。他说&#xff1a;“ChatGPT不算新技术革命&#xff0c;带不来什么新机会。” 此话一出&#xff0c;立刻在科技圈引起广泛讨论。K哥是吴军老师的读者&a…

吴军:ChatGPT 不算新技术革命,带不来什么新机会

吴军&#xff0c;1967年出生&#xff0c;毕业于清华大学和约翰霍普金斯大学&#xff0c;计算机专业博士&#xff0c;前Google高级资深研究员、原腾讯副总裁、硅谷风险投资人。 4月3日晚上&#xff0c;得到直播间邀请到了计算机科学家、自然语言模型专家吴军&#xff0c;就人工智…

原腾讯副总裁,Google资深研究员吴军:ChatGPT不算新技术革命,带不来什么新机会...

点击“开发者技术前线”&#xff0c;选择“星标” 让一部分开发者看到未 转载自 | 学人Scholar 吴军&#xff0c;1967年出生&#xff0c;毕业于清华大学和约翰霍普金斯大学&#xff0c;计算机专业博士&#xff0c;前Google高级资深研究员、原腾讯副总裁、硅谷风险投资人。 4月3…

快讯 | 美国掀起AI人才争夺战,六位数工资,名校被科技公司“攻陷”;新南威尔士大学开发出人体器官上进行3D打印的机械臂

一分钟速览新闻点 知乎和面壁科技合作发布中文大模型“知海图AI” 字节旗下飞书将推出智能 AI 助手「My AI」 亚马逊推出自有大语言模型“泰坦”及生成式AI服务Bedrock 新南威尔士大学开发出人体器官上进行3D打印的机械臂 特斯拉亮相2023消博会&#xff0c;首次在家庭生活场…

python爬虫学习日志 爬取静态网页数据

第一次写博客&#xff0c;想要记录学习python爬虫的过程&#xff0c;如有不当地方请指出&#xff0c;谢谢。 什么是静态网页 静态网页的定义是这样的&#xff1a; 指在服务器上保存成HTML文档的网页&#xff0c;它的内容不会随着用户的操作而发生变化&#xff0c;只能通过修改网…

AI很渴:chatGPT交流一次=喝掉一瓶水,GPT3训练=填满核反应堆

流行的大型语言模型&#xff08;LLM&#xff09;&#xff0c;如OpenAI的ChatGPT和Google的Bard&#xff0c;耗能巨大&#xff0c;需要庞大的服务器农场提供足够的数据来训练这些强大的程序。对这些数据中心进行冷却也使得AI聊天机器人对水的需求量极大。新的研究表明&#xff0…

chatgpt赋能python:简单好玩的Python程序——让你爱上编程

简单好玩的Python程序——让你爱上编程 Python语言在最近的几年迅速崛起成为最流行的编程语言之一。它的语法简单易懂&#xff0c;代码可读性强&#xff0c;是初学者学习编程的极佳选择。今天我想分享一些简单好玩的Python程序&#xff0c;让你体验Python编程的乐趣。 代码让…

人工智能AI大战:BARD、ChatGPT、Bing和文心一言谁更具有优势?

首先在开始对比之前我首先要吐槽&#xff0c;不管是bard还是百度的AI现在都得等待候补&#xff0c;也就是排队&#xff0c;所以目前只能无限期等待下去&#xff0c;但是第一批用户已经在查通过平台上遨游了好几个月了&#xff0c;从商业的角度来看&#xff0c;几个月或许不长&a…

学习.NET MAUI Blazor(七)、实现一个真正的ChatGPT聊天应用

今天在新闻上看到一条消息&#xff0c;OpenAI已经开放了ChatGPT的接口&#xff0c;也就是GPT-3.5&#xff0c;对比原来的GPT-3&#xff0c;增加了gpt-3.5-turbo、gpt-3.5-turbo-0301两个模型。 gpt-3.5-turbo&#xff1a;使用最新的GPT-3.5模型&#xff0c;并针对聊天进行了优…

ChatGPT调研报告:发展到今天这一步,哪个职业最慌?

ChatGPT的流行&#xff0c;让AIGC受到了空前的关注。 AIGC&#xff0c;即 AI Generated Content&#xff0c;是指利用人工智能技术来生成内容&#xff0c;比如AI写作、AI绘画、AI编程、AI语音合成等。 就在3月29日&#xff0c;一封来自美国研究机构Future of Life Institute的公…

实际体验文心一言 VS ChatGPT

一直在关注ChatGPT与百度的文心一言&#xff0c;文心一言的发布会完成后&#xff0c;第一时间申请了体验资格&#xff0c;不得不说&#xff0c;百度的效率还是非常高的。没几个小时就给了邀请码了&#xff01; 为了体验文心一言与ChatGPT的能力&#xff0c;我从几个方面进行了比…

chatgpt赋能python:如何加速手写卷积操作-Python篇

如何加速手写卷积操作 - Python篇 卷积操作是深度学习领域中常用的操作之一。在Python中&#xff0c;可以使用各种库来实现卷积操作。然而&#xff0c;手写卷积操作可能是更高效的解决方案。在本篇文章中&#xff0c;我们将介绍如何通过优化手写代码来加速卷积操作。 为什么手…