# 強衛傘 ☂️
###### 組員: 龔俊元、陳姵慈、楊兆羽、張耘誠、林旻賢
###### 指導教授:張幼珍
動機
===
元智大學為了讓學生們能夠在求學過程中不只學習課本上的知識,也同時去接觸未來科技的趨勢,因此有了創客競賽,使同學能夠報名不同組別進行參賽,並且去學習如何進行團隊合作,電腦程式的編排,電子元件的設計等等。張幼珍老師的創新工程系統與元件設計課程,引導同學們在於報名參加這些比賽的同時,如何去進行一項科技化產品的設計,學習Arduino、Ansys、3D列印等技術,達到做中學、學中做的理念。
創作理念
===
台灣北部是個常常下雨的地區,雨傘是人人都必須有一把的,但是雨傘是個很常被偷走的東西,因此我們希望雨傘具有防盜以及定位的性能。而因為在下雨天時,開車或騎車的人視線會較昏暗,因此而難以注意到步行的用路人,所以我們希望可以在雨傘上加裝可以讓其他駕駛者可以更明顯發現用路人的照明設備,並且偵測環境光線的不足來改變雨傘發出光的強度,當行人要轉彎時也可以利用燈條來打方向燈,提醒駕駛行人接下來的動向,藉此將意外發生的機率降到最低。
產品設計
===

(1)具備蜂鳴器,當遇到危險或遭遇壞人跟蹤時,可以發出警鈴聲嚇跑壞人,也可以使旁邊的人發現你正處於危險之中。
(2)傘柄處具有密碼鎖,當要開傘時,利用藍芽連線需先在手機輸入密碼,假如密碼錯誤,插銷就不會打開,這時就無法打開雨傘,別人也沒有辦法偷走你的傘來使用。
(3)在夜晚以及下雨天時視線較為模糊,所以我們決定在雨傘的傘布尾端以及傘珠的位置增加燈條,在夜晚行走時較為安全,在要轉彎時也可以利用燈條來打方向燈,這樣做駕駛及機車騎士也可以知道行人的動向,可以有效降低意外的發生。
(4)在雨傘內部增加GPS設備,用手機即可精確的定位雨傘的物理位置,不用害怕弄丟雨傘。
(5)在傘頂加入一個光感測器,當走到越暗的地方時,燈條發出光的強度也會更強。
材料
===
| | | | |
| ------------------ | ------- | ---------------- | ---------------- |
| 雨傘 | 杜邦線 | 雨傘手柄(3D列印) | ESP8266 WIFI |
| HC-05藍芽模組 | GPS模組 | NodeMcu Lua WIFI | 18650鋰電池 |
| SG90 tower伺服馬達 | 蜂鳴器 | 麵包板170孔 | 18650電池盒 |
| Arduino nano開發板 | 5V燈條 | 感光元件 | 充電放電保護模組 |

功能介紹
===
* ## 密碼鎖馬達

##### 附圖為馬達線路連接圖
#### 馬達程式碼
[可至Arduino的草稿碼當中匯入程式庫,尋找符合我們功能的Code]
```
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
Servo servo;
char auth[] = "Blynk Auth Token";
char ssid[] = "your ssid";
char pass[] = "wifi password";
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
servo.attach(15); // NodeMCU D8 pin
}
void loop()
{
Blynk.run();
}
BLYNK_WRITE(V1)
{
servo.write(param.asInt());
}
BLYNK_WRITE(V2)
{
servo.write(0);
}
BLYNK_WRITE(V3)
{
servo.write(90);
```
### 密碼鎖馬達作用原理
為了要使按壓開傘的按鈕處外部增加一層保護殼,讓使用中必須要將殼移動下來才能按壓開傘,所以我們利用Node MCU與servo馬達進行結合,在Arduino IDE中編排以上的程式碼,並與軟體Blynk進行結合,設定成當移動blynk內部的滑動軸,就可以使馬達轉動,如設計圖所示,當我們把殼包覆在開傘鈕外部時,如果馬達是關閉的狀態,就會將殼與傘架卡住,無法按到按鈕,而若我們移動了滑動軸,就會使馬達轉動,讓殼可以移動,即可按到開傘鈕。
### Blynk控制馬達示範影片
{%youtube pAmH5CK3ID8%}
* ## 蜂鳴器

##### 附圖為蜂鳴器接線圖
1.接蜂鳴器接線圖
2.按壓按鈕即可發出聲響
{%youtube _6Zpc36Hbfs%}
* ## 方向燈控制

##### 附圖為燈條接線圖

一開始先將燈條的接點與杜邦線焊在一起,使我們能夠與Arduino nano板方便連接

(注意數據線要焊在**DIN**的地方,假如焊在DOUT燈條是不會亮的!!!)

接下來將利用arduino 感光元件結合nano開發版,編寫code在Arduino IDE中,當感應到的光線越弱,燈條亮度會越強,燈條亮度會隨感應光強度而改變,而再利用blynk軟體,去調控兩條燈條的開關控制。

##### 附圖為燈條加上感光元件之線路圖
### 打開Arduino 的程式庫管理工具
##### [可至Arduino的草稿碼當中匯入程式庫,尋找符合我們功能的Code]
```
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 29
#define BRIGHTNESS 16
#define LED_TYPE WS2812
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
#define UPDATES_PER_SECOND 60
CRGBPalette16 currentPalette;
TBlendType currentBlending;
extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
void setup() {
delay( 30 ); // power-up safety delay
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );
currentPalette = RainbowColors_p;
currentBlending = LINEARBLEND;
}
void loop()
{
ChangePalettePeriodically();
static uint8_t startIndex = 0;
startIndex = startIndex + 1; /* motion speed */
FillLEDsFromPaletteColors( startIndex);
FastLED.show();
FastLED.delay(1000 / UPDATES_PER_SECOND);
}
void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
uint8_t brightness = 255;
for( int i = 0; i < NUM_LEDS; i++) {
leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
colorIndex += 3;
}
}
void ChangePalettePeriodically()
{
uint8_t secondHand = (millis() / 1000) % 15;//%X=每幾單位會重跑一次下面的流程
static uint8_t lastSecond = 99;
if( lastSecond != secondHand) {
lastSecond = secondHand;
if( secondHand == 0) { SetupOrginalWhiteLight(); currentBlending = NOBLEND; }
if( secondHand == 5) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; }
if( secondHand == 10) { SetupOrginalWhiteLight(); currentBlending = NOBLEND; }
}
}
void SetupBlackAndWhiteStripedPalette()
{
// 'black out' all 16 palette entries...
fill_solid( currentPalette, 16, CRGB::Black);
// and set every fourth one to white.
currentPalette[ 0] = CRGB::Orange;
currentPalette[ 2] = CRGB::Orange;
currentPalette[ 4] = CRGB::Orange;
currentPalette[ 6] = CRGB::Orange;
currentPalette[ 8] = CRGB::Orange;
currentPalette[10] = CRGB::Orange;
currentPalette[12] = CRGB::Orange;
currentPalette[14] = CRGB::Orange;
currentPalette[16] = CRGB::Orange;
}
void SetupOrginalWhiteLight()
{
fill_solid(currentPalette, 16, CRGB::White);
}
```
安裝FastLED就可以看到內建的範例程式
1. LED燈條 5V 接 Arduino 5V
2. LED燈條 GND 接 Arduino GND
3. LED燈條 DIN 接 Arduino Pin 5
### 方向燈燈條示範影片
{%youtube 0LmuafFoPC8%}
* ## 電池
我們是使用鋰電池充電,鋰電池充電之接線圖如下,經過連接後看到亮紅燈代表在進行充電,藍燈代表充滿電,而在利用鋰電池在這個供電情況下,就可以不用接usb線,進行arduino功能的操作。


* ## 3D列印雨傘把手

1.利用繪圖軟體畫出要的圖型,輸出成stl檔
2.放入3D列印參數模型軟體內
3.使用PLA材料來進行印製
4.確定模型是否吻合
5.進行組裝
* ## GPS

##### 附圖為GPS模組接線圖
1.利用node MCU板與gps模組GY-GPS6MV2接線。
2.接上電源開啟Arduino IDE編寫程式碼。
3.因為要使開發版增加esp8266此選項,先設定開發板管理員網址偏好設定後,至開發版管理員安裝esp8266。
4.設定與編碼完成後,利用blynk程式來追蹤顯示定位位置。
5.將NODE MCU與GPS模組進行連線。
6.利用手機上的BLYNK程式,開啟一個GPS專案後,設定經緯度Valued Label,input V1、V2 pin,Value Displace speed、satellite、distance,inputV3、V4、V5。
7.用Arduino IDE 讀取CODE,使Blynk app中顯示定位地點的經緯度,準確位置。
### GPS示範影片
{%youtube glO-4XFLHAU%}

由圖中可得知雨傘確切位置
強衛傘完成
===

### 上圖為強衛傘完成圖
{%youtube cyBk1xT31nk%}
### 防盜鎖示範影片
{%youtube LQ9I2aB27rA%}
### GPS示範影片
如影片所示,當雨傘被不明人士偷走時,可藉由手機GPS定位得知雨傘確切位置。
{%youtube 9gj7zJEYj_k%}
### 方向燈示範影片
如影片所示,強衛傘可發出亮光來使駕駛注意到行人,並且當行人要左右轉時,可利用雨傘來打方向燈,藉此提醒駕駛及騎士接下來行人的動向為何,並且獨自一人在小巷遇到危險時,可按下緊急鈕,雨傘就會發出警示燈及蜂鳴聲,可用來嚇跑壞人並且達到向外界求救的功用。