嵌入式系统原理实验总结报告
车辆座椅控制系统实验
2014/5/23
嵌入式系统原理实验总结报告
一、技术性总结报告
(一)题目:车辆座椅控制系统实验
(二)项目概述:
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.Meage; 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.InetAddre; 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 cla 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());
}
cla 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.sendEmptyMeage(0);
}
}.start();
}
}
private Handler handler = new Handler() {
@Override
public void handleMeage(Meage msg) {
super.handleMeage(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 cla 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\"?>
package=\"com.example.seat\"
android:versionCode=\"1\"
android:versionName=\"1.0\" >
android:name=\"android.permiion.ACCESS_NETWORK_STATE\"/>
android:minSdkVersion=\"8\"
android:targetSdkVersion=\"19\" />
android:allowBackup=\"true\"
android:icon=\"@drawable/ic_launcher\"
android:label=\"@string/app_name\"
android:theme=\"@style/AppTheme\" >
android:name=\"com.example.seat.MainActivity\"
android:label=\"@string/app_name\" >
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
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, pre 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.通过小舵机的动作验证该实验是否成功。(详细见视频)
二、工作进度自评表
本次试验完成。
本次试验计划分为三个阶段。
第一阶段:智能手机部分、车载座椅控制部分和硬件部分的分别完成。本阶段完成。
第二阶段:智能手机部分、车载座椅控制部分和硬件部分的整合阶段。本阶段完成。
第三阶段:车辆座椅控制系统实验的验收调试阶段。本阶段完成。
三、组内人员自评
本次试验打到预期的实验目的。虽然在实验进行过程中遇到了不少的麻烦,但是通过我们成员自身的努力学习掌握了实验所要求的知识。最后实验的成功与组员之间的互相帮助与紧密配合是分不开的。
四、个人学习心得
本人通过此次实验,对于嵌入式系统原理有了更加深层次的了解。对于设计嵌入式系统原理的实验也有了较为高程度的提高。为了以后更进一步的学习并掌握嵌入式系统打下了坚实的一步。对于了解车辆座椅控制的自动化与智能化;了解用户通过智能手机与车载传感器之间的联动;了解车辆作为当今物联网中重要的一个节点都发挥了重要作用。通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。加强本组学生对嵌入式系统原理的更深层次的理解与运用。