9 changed files with 1655 additions and 0 deletions
-
15.vscode/launch.json
-
15README.md
-
49Receiver_servo/Receiver_servo.ino
-
87sender_hw/sensorValue_send.ino
-
156server/appl.js
-
9server/index.js
-
1184server/package-lock.json
-
9server/user.js
-
131server/web_index.html
@ -0,0 +1,15 @@ |
|||
{ |
|||
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. |
|||
// 기존 특성에 대한 설명을 보려면 가리킵니다. |
|||
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. |
|||
"version": "0.2.0", |
|||
"configurations": [ |
|||
{ |
|||
"type": "pwa-chrome", |
|||
"request": "launch", |
|||
"name": "Launch Chrome against localhost", |
|||
"url": "http://localhost:8080", |
|||
"webRoot": "${workspaceFolder}" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
## PROJECT |
|||
|
|||
< 공유모빌리티 서비스 상용에 따른 안전장구 착용 대안 및 개발 > |
|||
|
|||
___ |
|||
|
|||
### Team_name : Sper |
|||
|
|||
### Team : 이강, 박준형, 서준혁, 김태경, 바야르세섹 |
|||
___ |
|||
|
|||
## Summary |
|||
|
|||
전동킥보드(공유모빌리티)의 이용의 본질을 저해하지 않으면서 기존 공유모빌리티 시스템에 적용될 수 있는 가장 적합한 안전장구 착용 대안 및 응용SW를 개발하는 것이다 |
|||
|
|||
@ -0,0 +1,49 @@ |
|||
#include<SoftwareSerial.h>
|
|||
#include<Servo.h>
|
|||
SoftwareSerial xbee(2,3); |
|||
#define LEN 13
|
|||
#define servoPin 9
|
|||
int count = 0, flag = 1, angle = 0, a = 1; |
|||
Servo myservo; |
|||
|
|||
void setup() { |
|||
Serial.begin(9600); |
|||
xbee.begin(9600); |
|||
myservo.attach(servoPin); |
|||
myservo.write(0); |
|||
} |
|||
|
|||
void loop() { |
|||
char arr[LEN] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'o', 'x'}; |
|||
char ch = xbee.read(); |
|||
|
|||
for(int i = 0; i < LEN; i++){ |
|||
if(ch == '*') count++; |
|||
|
|||
else if(count >= 3 && ch == '!'){ |
|||
count = 0; |
|||
Serial.println(); |
|||
} |
|||
|
|||
else if(count >= 3 && ch == arr[i]){ |
|||
if(ch == 'x'){ |
|||
flag = 0; |
|||
} |
|||
else if(ch == 'o'){ |
|||
flag = 1; |
|||
} |
|||
Serial.write(ch); |
|||
} |
|||
} |
|||
if(flag == 1){ |
|||
if(angle == 180){ |
|||
a = -10; |
|||
|
|||
}else if(angle == 0){ |
|||
a = 10; |
|||
} |
|||
angle += a; |
|||
myservo.write(angle); |
|||
delay(10); |
|||
} |
|||
} |
|||
@ -0,0 +1,87 @@ |
|||
#include <SoftwareSerial.h>
|
|||
#include <TinyGPS.h>
|
|||
|
|||
#define RXPIN 6
|
|||
#define TXPIN 5
|
|||
#define GPSBAUD 9600
|
|||
|
|||
TinyGPS gps; |
|||
SoftwareSerial uart_gps(RXPIN, TXPIN); |
|||
|
|||
void getgps(TinyGPS &gps); |
|||
int value = 0; |
|||
char arr_o[] = { '*', '*', '*', 'o', '!' }, arr_x[] = { '*', '*', '*', 'x', '!' }; |
|||
|
|||
//setup
|
|||
void setup() { |
|||
Serial.begin(9600); |
|||
uart_gps.begin(GPSBAUD); |
|||
|
|||
Serial.println(""); |
|||
Serial.println("GPS Shield QuickStart Example Sketch v12"); |
|||
Serial.println(" ...waiting for lock... "); |
|||
Serial.println(""); |
|||
} |
|||
|
|||
void loop() { |
|||
//FSRsensor
|
|||
value = analogRead(A0); |
|||
if(value >= 300){ |
|||
for(int i = 0; i < 5; i++){ |
|||
Serial.write(arr_o[i]); |
|||
} |
|||
} |
|||
else{ |
|||
for(int i = 0; i < 5; i++){ |
|||
Serial.write(arr_x[i]); |
|||
} |
|||
} |
|||
|
|||
//gps
|
|||
while(uart_gps.available()) |
|||
{ |
|||
int c = uart_gps.read(); |
|||
if(gps.encode(c)) |
|||
{ |
|||
getgps(gps); |
|||
} |
|||
} |
|||
delay(3000); |
|||
} |
|||
|
|||
//parshing code
|
|||
void getgps(TinyGPS &gps) |
|||
{ |
|||
char floatArr[10], buff[15]; |
|||
float latitude, longitude; |
|||
int len; |
|||
gps.f_get_position(&latitude, &longitude); |
|||
|
|||
//latitude
|
|||
dtostrf(latitude, 10, 5, floatArr); |
|||
sprintf(buff, "***%s!", floatArr); |
|||
len = strlen(buff); |
|||
|
|||
for(int i = len; i >= 0; i--){ |
|||
if(buff[i] != ' '){ |
|||
Serial.write(buff[i]); |
|||
} |
|||
} |
|||
|
|||
//longitude
|
|||
dtostrf(longitude, 10, 5, floatArr); |
|||
sprintf(buff, "***%s!", floatArr); |
|||
len = strlen(buff); |
|||
|
|||
for(int i = len; i >= 0; i--){ |
|||
if(buff[i] != ' '){ |
|||
Serial.write(buff[i]); |
|||
} |
|||
} |
|||
|
|||
Serial.println(); |
|||
|
|||
unsigned long chars; |
|||
unsigned short sentences, failed_checksum; |
|||
gps.stats(&chars, &sentences, &failed_checksum); |
|||
} |
|||
@ -0,0 +1,156 @@ |
|||
const express = require('express'); |
|||
const app = express(); |
|||
const http = require('http'); |
|||
const Readline = require('@serialport/parser-readline') |
|||
const server = http.createServer(app); |
|||
const {Server} = require("socket.io"); |
|||
const io = new Server(server); |
|||
// const bodyparser = require('body-parser')
|
|||
// const SerialPort = require('serialport')
|
|||
// const parsers = SerialPort.parsers;
|
|||
|
|||
// const parser = new parsers.Readline({
|
|||
// delimiter: '\n'
|
|||
// });
|
|||
|
|||
|
|||
// const port = new SerialPort("COM6",{
|
|||
// io: io,
|
|||
// route: '/port/ttys002',
|
|||
// bitRate: 115200,
|
|||
// dataBits: 8,
|
|||
// buffersize:1,
|
|||
// parity: 'none',
|
|||
// flowControl: false,
|
|||
// dealay: 9600
|
|||
// });
|
|||
// const ByteLength = require('@serialport/parser-byte-length');
|
|||
// const { ifError } = require('assert');
|
|||
// const { parse } = require('path');
|
|||
// const parser = port.pipe(new ByteLength({length: 1 }))
|
|||
// //const parser = port.pipe(new parsers.Readline({delimiter:'\r\n'}))
|
|||
|
|||
|
|||
app.get('/', (req, res) => { |
|||
res.sendFile(__dirname + '/index1.html'); |
|||
}); |
|||
//SerialPort
|
|||
// port.on("open", () => {
|
|||
|
|||
// console.log("serialport Port open");
|
|||
// });
|
|||
|
|||
|
|||
|
|||
// parser.on('data',function(data){
|
|||
|
|||
// var Pressure = data[0];
|
|||
|
|||
// if(Pressure <=100){
|
|||
|
|||
// io.emit('Pre_War')
|
|||
// }
|
|||
|
|||
// console.log(data);
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
// io.emit('data',dat,dd[1]);
|
|||
|
|||
// });
|
|||
|
|||
var c='\0'; |
|||
var d='\0'; |
|||
var a=0; |
|||
var z=[]; |
|||
var count=0; |
|||
var f={}; |
|||
var i=0; |
|||
f[0] = 35.1; |
|||
f[1] = 36.1; |
|||
f[2] = 'o'; |
|||
f[3] = 33.1; |
|||
f[4] = 22.1; |
|||
f[5]= 'x'; |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
// parser.on('data',function(data){
|
|||
// data=data.toString("ASCII");
|
|||
|
|||
|
|||
// c+=data;
|
|||
// console.log('c'+c);
|
|||
|
|||
|
|||
// if(data=='\n'){
|
|||
// var f= c;
|
|||
// c='\0';
|
|||
|
|||
// if(f!='o'){
|
|||
// z[count] = parseFloat(f.substr(1));
|
|||
// console.log('z:'+(z[count]));
|
|||
// io.emit('data',z[count],count);
|
|||
// if(count==1){
|
|||
// io.emit('data1',z[count],count);
|
|||
// count=0;
|
|||
// }
|
|||
// else{
|
|||
// io.emit('data',z[count],count);
|
|||
// count++;
|
|||
// }
|
|||
|
|||
// }
|
|||
// else if(f=='o'){
|
|||
// io.emit('Pressure',c);
|
|||
// }
|
|||
// else if(f=='x'){
|
|||
// io.emit('Pressure',c);
|
|||
// }
|
|||
|
|||
// }
|
|||
|
|||
|
|||
|
|||
// console.log('c:'+c);
|
|||
// console.log('data:'+data.toString("UTF-8"));
|
|||
// io.emit('data',data);
|
|||
|
|||
// });
|
|||
// socket
|
|||
|
|||
|
|||
|
|||
server.listen(3000, () => { |
|||
console.log('listening on *:5000'); |
|||
for(i=0; i<3; i++){ |
|||
if(f[i]!='o'){ |
|||
z[count] = f[i]; |
|||
console.log('z:'+(z[count])); |
|||
io.emit('data',z[count],count); |
|||
if(count==1){ |
|||
io.emit('data1',z[count],count); |
|||
count=0; |
|||
} |
|||
else{ |
|||
io.emit('data',z[count],count); |
|||
count++; |
|||
} |
|||
|
|||
} |
|||
else if(f=='o'){ |
|||
io.emit('Pressure',c); |
|||
} |
|||
else if(f=='x'){ |
|||
io.emit('Pressure',c); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,9 @@ |
|||
var express = require('express'); |
|||
var router = express.Router(); |
|||
|
|||
/* GET home page. */ |
|||
router.get('/', function(req, res, next) { |
|||
res.render('index', { title: 'Express' }); |
|||
}); |
|||
|
|||
module.exports = router; |
|||
1184
server/package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,9 @@ |
|||
var express = require('express'); |
|||
var router = express.Router(); |
|||
|
|||
/* GET users listing. */ |
|||
router.get('/', function(req, res, next) { |
|||
res.send('respond with a resource'); |
|||
}); |
|||
|
|||
module.exports = router; |
|||
@ -0,0 +1,131 @@ |
|||
<!doctype html> |
|||
<html> |
|||
<head> |
|||
<title>Gps </title> |
|||
<meta charset="utf-8"> |
|||
<title>지도 생성하기</title> |
|||
|
|||
<script src="/socket.io/socket.io.js"></script> |
|||
|
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<div id="map" style="width:100%;height:700px;"></div> |
|||
|
|||
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey= 6f7fabc77f1bff2334bd5521889a7b35"></script> |
|||
|
|||
|
|||
<style> |
|||
|
|||
table { border-collapse: collapse; } |
|||
|
|||
th, td { border: 1px solid black; padding: 50px; } |
|||
|
|||
</style> |
|||
|
|||
|
|||
|
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<table> |
|||
|
|||
<caption>ㅇ센서</caption> |
|||
|
|||
<tr> |
|||
|
|||
<td></td> |
|||
|
|||
<th scope="col">lat(위도)</th> |
|||
|
|||
<th scope="col">lng(경도)</th> |
|||
|
|||
<th scope="col">wear(착용여부)</tH> |
|||
|
|||
</tr> |
|||
|
|||
|
|||
|
|||
<tr> |
|||
|
|||
<th scope="row">GPS/Pressure</th> |
|||
|
|||
|
|||
|
|||
<td rowspan="1"><p id = 'lat'></p></td> |
|||
|
|||
<td rowspan="2"><p id = 'lng'></p></td> |
|||
|
|||
<td rowspan="3"><div id = 'Pressure'></div></td> |
|||
|
|||
</tr> |
|||
|
|||
<tr> |
|||
</table> |
|||
|
|||
<td> </div> </td> |
|||
<script> |
|||
|
|||
var socket = io(); |
|||
var d; |
|||
var c; |
|||
var z=0; |
|||
socket.on('data', function(data,count){ |
|||
|
|||
if(count==1){ |
|||
d= data; |
|||
console.log(data); |
|||
document.getElementById('lat').innerHTML=d; |
|||
} |
|||
else if(count==2){ |
|||
c= data; |
|||
console.log(c); |
|||
document.getElementById('lng').innerHTML=c; |
|||
} |
|||
else if(count==0){ |
|||
|
|||
if(data[1] == 'o'){ |
|||
document.getElementById('Pressure').innerHTML = data.toString(); |
|||
z=0; |
|||
} |
|||
else if(z != data[1]) { |
|||
z = data[1]; |
|||
document.getElementById('Pressure').innerHTML = data.toString(); |
|||
alert("사용자가 헬멧을 착용하고 있지 않습니다. 킥보드를 멈춤"); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
}); |
|||
|
|||
|
|||
var mapContainer = document.getElementById('map'), // 지도를 표시할 div |
|||
mapOption = { |
|||
center: new kakao.maps.LatLng( 35.97043362952654,126.95478849952511), // 지도의 중심좌표 |
|||
level: 3 // 지도의 확대 레벨 |
|||
}; |
|||
|
|||
var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다 |
|||
|
|||
// 지도에 표시될 객체를 가지고 있을 배열입니다 |
|||
const locations = [ |
|||
{ place:"원광대학교1", lat: d, lng: c} |
|||
//{ place:"비교 주소 ", lat: 35.97043362952654, lng: 126.95478849952511 }, |
|||
]; |
|||
|
|||
for (var i = 0; i < locations.length; i++) { |
|||
var marker = new kakao.maps.Marker({ |
|||
map: map, |
|||
position: new kakao.maps.LatLng(locations[i].lat, locations[i].lng) |
|||
}); |
|||
} |
|||
|
|||
|
|||
</script> |
|||
</body> |
|||
</html> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue