嵌入式系统原理实验总结报告
一、技术性总结报告
(一)题目:车辆座椅控制系统实验
(二)项目概述:
1.为了实现车辆座椅控制的自动化与智能化。
2.方便用户通过智能手机与车载传感器之间的联动。
3.使车辆作为当今物联网中重要的一个节点发挥作用。
4.通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。
5. 加强本组学生对嵌入式系统原理的更深层次的理解与运用。
(三)技术方案及原理
本次试验分为软件、硬件两个部分。
1.软件部分。
A.智能手机部分,包括通过智能手机对座椅的控制部分、手机所携带的身份信息部分。
本部分软件使用Java编写,其程序部分为:
主程序:
package com.example.seat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.os.Build;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
private Button Up = null;
private Button Left = null;
private Button Dowm = null;
private Button Right = null;
private Socket socket = null;
private static final String HOST = "192.168.1.142";
private static final int PORT = 10007;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControl();
}
private void initControl() {
Up = (Button) findViewById(R.id.button1);
Up.setOnClickListener(new ReceiverListener());
}
class ReceiverListener implements OnClickListener {
protected String line;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread() {
@Override
public void run() {
try {
Socket socket = new Socket(HOST, PORT);
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
line = br.readLine();
br.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}.start();
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}
界面代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.seat"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.seat.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
B.车载座椅控制部分,包括控制系统对座椅的控制部分、对智能手机发出的控制信息的识别部分和对手机所携带身份信息的校验与储存部分。
本部分软件使用Python编写,其程序部分为:
#!/usr/bin/python
#encoding=utf-8
from Raspi_PWM_Servo_Driver import PWM
import time, socket
host = ''
port = 10007
pwm = PWM(0x6F, debug=True)
servoMin = 125 # Min pulse length out of 4096 , 0.5
servoMax = 575 # Max pulse length out of 4096 , 2.3
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
if(pulse>servoMax):
pulse = servoMax
if(pulse<servoMin):
pulse = servoMin
pwm.setPWM(channel, 0, int(pulse))
pwm.setPWMFreq(60) # Set frequency to 60 Hz
pwm.setPWM(0, 0, servoMax)
if __name__ == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(3)
print 'Server is running on port %d, press Ctrl-C to terminate it.' % port
pulse_ud = 1.9
pulse_lr = 1.9
setServoPulse(0,pulse_ud)
setServoPulse(1,pulse_lr)
while True:
clientsock, clientaddr = s.accept()
clientfile = clientsock.makefile('rw', 0)
ctrlinfo = clientfile.readline().strip()
print 'Control info is %s.\n' % ctrlinfo
if ctrlinfo == "up":
pulse_ud += 0.1
elif ctrlinfo == "down":
pulse_ud -= 0.1
elif ctrlinfo == "left":
pulse_lr += 0.1
elif ctrlinfo == "right":
pulse_lr -= 0.1
else:
print "ERROR\n"
setServoPulse(0,pulse_ud)
setServoPulse(1,pulse_lr)
clientfile.close()
clientsock.close()
2.硬件部分。
对车载座椅控制部分发出的信息的接受、识别、执行部分。
本次试验使用的硬件设备包括:智能手机一部、“树莓派”一台、小舵机两台、舵机驱动板一个、无线网卡一个、杜邦线若干、5V电源一个、无线路由器一个
智能手机
树莓派(外)
树莓派(内)
小舵机
舵机驱动板
无线网卡
杜邦线
5V电源
无线路由器
硬件实体完成图
(四)实验流程及结果
1.打开智能手机上的控制软件。
2.向车载座椅控制台发送信息。(发送信息分别为上、下、左、右)
3.车载座椅控制台接受、识别并执行信息。
4.通过小舵机的动作验证该实验是否成功。(详细见视频)
二、工作进度自评表
本次试验完成。
本次试验计划分为三个阶段。
第一阶段:智能手机部分、车载座椅控制部分和硬件部分的分别完成。本阶段完成。
第二阶段:智能手机部分、车载座椅控制部分和硬件部分的整合阶段。本阶段完成。
第三阶段:车辆座椅控制系统实验的验收调试阶段。本阶段完成。
三、组内人员自评
本次试验打到预期的实验目的。虽然在实验进行过程中遇到了不少的麻烦,但是通过我们成员自身的努力学习掌握了实验所要求的知识。最后实验的成功与组员之间的互相帮助与紧密配合是分不开的。
四、个人学习心得
本人通过此次实验,对于嵌入式系统原理有了更加深层次的了解。对于设计嵌入式系统原理的实验也有了较为高程度的提高。为了以后更进一步的学习并掌握嵌入式系统打下了坚实的一步。对于了解车辆座椅控制的自动化与智能化;了解用户通过智能手机与车载传感器之间的联动;了解车辆作为当今物联网中重要的一个节点都发挥了重要作用。通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。加强本组学生对嵌入式系统原理的更深层次的理解与运用。
郑州航空工业管理学院嵌入式系统实验报告修订版20第赵成张克新编著院姓专学系名业号电子通信工程系20xx年3月制实验一ARM体系结构…
嵌入式系统设计实验报告班级学号姓名成绩指导教师1实验一11实验名称博创UP3000实验台基本结构及使用方法12实验目的1学习嵌入式…
实验报告20xx20xx学年第二学期课程名称ARM嵌入式系统原理与开发实验名称嵌入式Linux交叉开发环境建立与程序开发实验时间指…
嵌入式系统设计实验报告班级学号姓名成绩指导教师20xx061420xx061411刘群峰赵国冬孟昭林1实验一11实验名称博创UP3…
嵌入式系统实验报告学院测量与通信工程学院专业信号与信息处理学生姓名姜元学号1320xx0050指导教师董静薇一实验目的了解Boot…
《嵌入式系统》实验报告姓名:学号:班级:湖南工业大学电气与信息工程学院20xx年x月实验一ARM汇编指令实验1一、实验目的1.初步…
学习嵌入式系统心得说实在话在没有学习之前,以及在学之前通过一些口中得知这是一门很不错,很有意思的一门课。而且目前是十分吃香的一门课…
重庆航天职业技术学院课程作业课程名称嵌入式系统专选班级学号姓名成绩前言嵌入式系统是基于单片机的一种升级版它是以应用为中心以计算机技…
嵌入式系统设计实验报告班级学号姓名成绩指导教师1实验一11实验名称博创UP3000实验台基本结构及使用方法12实验目的1学习嵌入式…
嵌入式系统实验报告姓名:##学号:##班级:计算机科学与技术非师范121班实验一LCD控制一、实验目的1、初步掌握液晶显示屏的使用…
第一章嵌入式系统概述1、嵌入式系统的定义、特点1)定义以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、…