DIY一輛屬於自己的 「賽格威」平衡車!

2021-02-15 電子工程專輯

首先向大家表示歉意,去年發帖展示初代平衡車時就已經承諾編輯出一份製作說明,但一直未能完成,很是抱歉!

原因有四:
1、太過粗糙,發出來確實有礙觀瞻;
2、上次做車沒留下幾張照片,無圖無真相;
3、一直工作比較繁忙,實在沒能抽出時間;
4、(接原因2)本意儘快再做一個,留下照片。但女皇遲遲不給批款,所以才延誤至今!

此次為了完成自己的承諾,可是耗費了2月的零花錢。並且有視頻有真相,希望您能喜歡。
原理簡介


「賽格威」平衡車

「賽格威」(英語:Segway)是一種電力驅動、具有自我平衡能力的個人用運輸載具,是都市用交通工具的一種。由美國發明家狄恩·卡門與他的DEKA研發公司(DEKA Research and Development Corp.)團隊發明設計,並創立思維車責任有限公司(Segway LLC.),自2001年12月起將思維車商業化量產銷售。(資料來源:維基百科中文)

「賽格威」是一種讓人留下深刻印象的代步工具,它佔地不足一平方米,乘車人像使用滑板一樣站立其上,雙手解放,但卻可以僅通過身體移動改變重心位置,就進行前進後退,轉彎剎車等操作。傳統的交通工具都無法做到隨心而動,必須把大部分精力放在控制方向和速度上,而「賽格威」並不需要專門的操控裝置,一切由車身自主完成,也由此獲得了「平衡車」的別名。

「賽格威」平衡車看來神奇,但你有沒有發現它的原理其實很簡單呢?拜最新科技所賜,關鍵零件都可以在淘寶上直接買到,而控制程序也可以查閱原理自行編寫。擁有自己的平衡車,其實非常簡單。


倒立擺和機器人

「賽格威」的平衡問題,實際上是一個多級倒立擺問題。當一個人用手託住一根竹竿的底部使它在空中豎直不倒下,這就是一個一級倒立擺系統的模型。如果第一根竹竿上面用鉸鏈連著其他竹竿,或者竹竿本身具有一定的彈性(可比擬「賽格威」上的有骨骼和關節的大活人),就成了多級倒立擺。

用手撐竹竿的遊戲很多人都玩過,印象最深的應當是它是一個靜不穩定系統。在桌面上的水杯能自己站穩,當重心投影落於杯底內時,即使有細小擾動也不會倒下。但是手心裡的竹竿大部分時間重心投影不在接觸點上,讓竹竿保持相對不動靠的是動態調整——竹竿往哪邊倒,手就趕緊往哪邊湊,讓重心回到接觸點周圍。這就是依靠人眼,大腦和人手完成的動態平衡過程。

人類的大腦在處理這類問題上有先天優勢,因為人的走路過程本質上來說是不斷前跌的過程,必須依靠實時伸出支撐腳轉移重心來保證直立行進的動態平衡。而讓機器人做到這一點就很困難,需要綜合解決動態控制過程中的線性問題、魯棒性問題、鎮定問題、隨動問題以及跟蹤問題等諸多細節——所以至今見到的人形機器人裡,能僵硬走路的很多,但能和真人一樣上躥下跳的絕無僅有。


兩名民警駕駛「賽格威」單人警用巡邏車巡邏。

「賽格威」的動態平衡原理和倒立擺相同,將最上方的乘客作為擺臂,然後控制車輪維持系統重心使乘客直立。當駕駛人改變自己身體的角度往前或往後傾時,「賽格威」就會根據傾斜的方向前進或後退,而速度則與駕駛人身體傾斜的程度呈正比以保持平衡。這裡的一個巧妙設計是將乘客傳感和控制二合一了——「賽格威」前進或後退維持平衡的同時,也達成了按乘客意圖前進或後退的目的。最終,熟練的駕駛人可以和自己行走一樣,僅憑直覺就能完成前後左右各方向的運動,同時解放雙手和大腦思維,這一特點使「賽格威」特別適合遊覽和警用巡邏。


DIY自己的「賽格威」

和人類行走一樣,「賽格威」的控制也需要傳感器和致動器。它依靠MEMS技術製造的精密固態陀螺儀和加速度計感應車體的旋轉,速度和傾斜,高速微處理器計算傳感器數據,並驅動輪轂電機完成前進/後退/差速轉彎的動作。而在電路之外,為了讓它從實驗室中的倒立擺變成實用的代步車,還需要準備一些必需的結構零件和附件。
機械部分


此次設計的機械機構包括一個簡單的獨立懸掛。緩衝部分直接採用自行車的避震器(需要更換彈簧),機體做得不很緊湊,主要為了能夠拆卸摺疊,便於收放和運輸。(需要說明的是,結構已提交專利申請,請勿用於商業用途。)

整機材料很簡單,兩個獨立驅動的輪子+電機驅動板+車身角度傳感器+轉彎傳感器+電池+一個裝下這些東西的盒子 。兩個輪子、電機、避震器都是來自淘寶的成品。鈑金和機加件為單獨加工。
這裡貼一些製作圖片,詳細的零件工程圖列在最後。


整機外形

結構細節

電機安裝部分

電機為優耐特電機,250W,24v/質量不好,不作推薦。


電機法蘭部分剖視

轉向機部分:


整機背面


裝配過程

鋰電池倉

原設計為鉛酸電池,後一朋友為我無償提供了鋰電池,在此再次表示感謝。
車銑加工

電機法蘭安裝


整體安裝


電路部分

主控採用AVR的ATMEGA_32,電機驅動為H橋驅動方式,元件選用的IR2184和IRF1405。傳感器選用IDG300和ADXL335,電流傳感器為ACS755。另外還有一些外圍的小功能,可有可無,不詳述了。
控制驅動PCB圖

傳感器PCB圖

PCB空板

焊接需要注意的就是——別太馬虎就行。先焊低矮的元器件,再焊大個的!
焊接基本完成

連接電機測試

散熱器:

遙控和語音模塊

控制程序部分

果殼網友們的素質都很高,這裡就提一些關鍵部分。一些個人認為有用的代碼附在最後。
流程圖

車身角度獲取

選用的傳感器為模擬量輸出,因此只需要用單片機的AD採集數據後計算出角度值即可,需要注意的是,採集後的數據直接使用效果會很糟糕。需要再次進行濾波計算,得到一個準確、及時、抗擾動的真實角度數據。調速過程中可以用串口將數據輸出,輔助調試。
計算車輪速度

這裡就是簡單的PID控制車輪轉速,如果不記得就百度看看。調試參數會花點時間,剛開始參數別調過大,否則抖動起來有危險!另外需要設置角度過大停機的功能。
獲取轉向數據

轉向數據為採集轉向電位器而來,採集後的數據進行濾波處理後再用。轉向中間設置一個無效的死區,也是防止誤動作。
遙控


遙控為最普通的4鍵遙控器,淘寶成品。
語音

語音選用成品語音模塊,廠家提供完整說明文檔。
溫度

硬體原先選用18b20,很是遺憾這部分程序沒調通,可能原因1:系統必須有多處中斷,並且中斷服務程序比較多,因而打亂了18b20的時序,加上沒有示波器,因而沒調通。可能原因2:智商問題。

嘗試調試了近2小時無果後改用模擬量溫度晶片LM35D,電壓直接由電阻分壓而來。

其餘部分可自由發揮。
視頻演示(相關視頻,請百度搜索本文標題)

無視頻無真相,怕熊上門所以拍了一小段視頻。

客廳實在太小,還放了些雜物,能夠行走的地方就只有中間一小塊了,跑不開。

友情提示:此車有一定危險性,不排除摔倒、失控等問題,在空地上玩玩就好,打算用來代步上班的,請給自己買好保險!
附件1:零件工程圖


附件2:重點代碼
2.1車身角度濾波代碼


/************濾波************/
float P[2][2] = {{ 1, 0 },{ 0, 1 }};
float Pdot[4] ={0,0,0,0};
const char C_0 = 1;
float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.01;
void Kalman_Filter(float angle_m,float gyro_m)
{
angle+=(gyro_m-q_bias) * dt;
Pdot[0]=Q_angle - P[0][1] - P[1][0];
Pdot[1]=- P[1][1];
Pdot[2]=- P[1][1];
Pdot[3]=Q_gyro;

P[0][0] += Pdot[0] * dt;
P[0][1] += Pdot[1] * dt;
P[1][0] += Pdot[2] * dt;
P[1][1] += Pdot[3] * dt;

angle_err = angle_m - angle;

PCt_0 = C_0 * P[0][0];
PCt_1 = C_0 * P[1][0];

E = R_angle + C_0 * PCt_0;

K_0 = PCt_0 / E;
K_1 = PCt_1 / E;

t_0 = PCt_0;
t_1 = C_0 * P[0][1];

P[0][0] -= K_0 * t_0;
P[0][1] -= K_0 * t_1;
P[1][0] -= K_1 * t_0;
P[1][1] -= K_1 * t_1;

angle += K_0 * angle_err;
q_bias += K_1 * angle_err;
angle_dot = gyro_m-q_bias;
}
//**************濾波*****************//
static float C_angle,C_angle_dot;
static float bias_cf;
void Complement_filter(float angle_m_cf,float gyro_m_cf)
{
bias_cf=0.998*bias_cf+0.002*gyro_m_cf;
C_angle_dot=gyro_m_cf-bias_cf;
C_angle=0.98*(C_angle+C_angle_dot*0.02)+0.02*angle_m_cf;
}
//***************************** 濾波結束*********************************/


2.2 轉向數據處理代碼

/************轉向************/
void Steering_handle(void)
{

Buf= 0.9 *Buf + 0.1 * AD_Turn;
Turning= Buf -Turn_Zero; //
if(Turning <- Turn_Dead) //死區
Turning+=Turn_Dead;

else if(Turning> Turn_Dead)
Turning-=Turn_Dead;

else Turning= 0;

if (mode==0)
{
Drive_A=0;
Drive_B=0;
if (!(angle>0.1||angle<-0.1))
{
mode=1;
}
}
else
{
if(lab==0)
{
Turning=0;
}
else if (Turning>55||Turning<-55)//
{
Turning=0;
lab=3;// turn error
}
else //按車速整定轉向數據
{

//buf2=Drivespeed;
//if (buf2<0)buf2*=-1;
//buf2/=3;
//Turning/=buf2;
Turning/=1;
}

Drive_A=Drivespeed-Turning;
Drive_B=Drivespeed+Turning;

}
}
//***************************** 轉向結束*********************************/

2.3遙控部分狀態機

/***********按鍵********/
#define BOOL int
#define FALSE 0
#define TRUE 1
#define INT8U unsigned int
/**********硬體接口***********/

#define KEYPIN1 (PINC&(1<<3))
#define KEYPIN2 (~PINB&(1<<0))
#define KEYPIN3 (~PINB&(1<<1))
#define KEYPIN4 (~PINB&(1<<3))
#define KEYPIN5 (~PINB&(1<<4))

/**********按恪鍵屬性**********/
#define KEY_JT 0x0e
#define KEY_A 0x0d
#define KEY_B 0x0b
#define KEY_C 0x07
#define KEY_D 0x08

#define KEY_NULL 0x0f

//
#define KEY_LONG_PERIOD 250
#define KEY_CONTINUE_PERIOD 25

//
#define KEY_DOWN 0x80
#define KEY_LONG 0x40
#define KEY_CONTINUE 0x20
#define KEY_UP 0x10

//
#define KEY_STATE_INIT 0
#define KEY_STATE_WOBBLE 1
#define KEY_STATE_PRESS 2
#define KEY_STATE_LONG 3
#define KEY_STATE_CONTINUE 4
#define KEY_STATE_RELEASE 5

uchar KeyScan(void)
{
if(KEYPIN2==0) return KEY_A;
if(KEYPIN3==0) return KEY_B;
if(KEYPIN4==0) return KEY_C;
if(KEYPIN5==0) return KEY_D;
if(KEYPIN1==0) return KEY_JT;
return KEY_NULL;
}


void GetKey(uchar *pKeyValue)
{
static char KeyState = KEY_STATE_INIT;
static char KeyTimeCount = 0;
static char LastKey = KEY_NULL;
char KeyTemp = KEY_NULL;

KeyTemp = KeyScan();

switch(KeyState)
{
case KEY_STATE_INIT:
{
if(KEY_NULL!=(KeyTemp))
{
KeyState = KEY_STATE_WOBBLE;
}
}
break;

case KEY_STATE_WOBBLE:
{
KeyState = KEY_STATE_PRESS;
}
break;

case KEY_STATE_PRESS:
{
if(KEY_NULL!=(KeyTemp))
{
LastKey = KeyTemp;
KeyTemp|=KEY_DOWN;
KeyState = KEY_STATE_LONG ;
}
else
{
KeyState = KEY_STATE_INIT;
}
}
break;

case KEY_STATE_LONG:
{
if(KEY_NULL !=(KeyTemp))
{
if(++KeyTimeCount > KEY_LONG_PERIOD)
{
KeyTimeCount = 0;
KeyTemp|=KEY_LONG;
KeyState = KEY_STATE_CONTINUE;
}
}
else
{
KeyState = KEY_STATE_RELEASE;
}
}
break;

case KEY_STATE_CONTINUE:
{
if(KEY_NULL !=(KeyTemp))
{
if(++KeyTimeCount > KEY_CONTINUE_PERIOD)
{
KeyTimeCount = 0;
KeyTemp |= KEY_CONTINUE;
}
}
else
{
KeyState = KEY_STATE_RELEASE;
}
}
break;

case KEY_STATE_RELEASE:
{
LastKey |=KEY_UP;
KeyTemp = LastKey;
KeyState = KEY_STATE_INIT;
}
break;
default:break;
}
*pKeyValue = KeyTemp;
}

2.4電池電壓

void Get_Batt_Volt(void)
{
int buf3=0,b=0;
buf3=0.9*buf3+0.1*AD_Batt;
if (b>10)
{
Voltage=buf3*3000.0/1024/65;
b=10;
}
else
{
b++;
}
}

本文轉載自:果殼科技

了解更多電子DIY信息,請搜微信號「dianzidiy」

【分享】如果您覺得本文有用,請點擊右上角「…」擴散到朋友圈!

關注電子工程專輯請搜微信號:「eet-china」或點擊本文標題下方「電子工程專輯」字樣,進入官方微信「關注」。



相關焦點

  • DIY一輛自己的 「賽格威」平衡車!
    原因有四:1、太過粗糙,發出來確實有礙觀瞻;2、上次做車沒留下幾張照片,無圖無真相;3、一直工作比較繁忙,實在沒能抽出時間;4、(接原因2)本意儘快再做一個,留下照片。但女皇遲遲不給批款,所以才延誤至今!此次為了完成自己的承諾,可是耗費了2月的零花錢。並且有視頻有真相,希望您能喜歡。原理簡介「賽格威」平衡車
  • 賽格威路萌機器人國內首秀 一臺平衡車的機器人蛻變
    而在2015年,賽格威被小米投資的納恩博全資收購,雙方共同在全球平衡車市場中佔得了百萬級的保有量。路萌:脫胎於平衡車,身兼多種功能依託於在平衡車上的技術,賽格威在平衡車底盤上集成了多功能的硬體,在CES2016上發布了其概念產品。經過一年的開發,這款概念產品有了具體的形態——一臺兩輪行走的智慧機器人。
  • 看新聞學英語| 智能行李箱不用人拉,自己走.18年底上市,使用賽格威平衡車技術
    公司與賽格威合作,在20寸的行李箱加上一個「重力自適應系統」。賽格威因生產兩輪平衡車而知名。重力自適應系統幫助行李箱在進行時保持平衡。
  • 從馬鞭和賽格威電動平衡車,看美國國家安全和情報技術史上那些沒什麼用的創新
    會為自己是偉大的馬鞭公司的一分子而自豪嗎?不,你們不會的。馬鞭被時代淘汰了,電纜遲早也一樣,所以產業要轉型,只有資本能夠幫助大家實現更大的價值,這是不以情懷轉移的經濟規律。「賽格威」式錯誤創新不符合需求的創新命途多舛的賽格威電動平衡車是商業領域裡一次頗有意義的錯誤創新。
  • 小米生態鏈Segway輪椅平衡車面世, 平衡車產業鏈誰才是龍頭霸主?
    賽格威(Segway)在CES2020大展上推出新型平衡輪椅——S-Pod,被網友調侃「輪椅平衡車」,加個雨棚可以當汽車了。據了解,人們不再是踩上面,而是坐在上面,代步更為舒適,計劃於2021年上市。
  • 小米九號平衡車開箱評測
    自從小米投資的納恩博收了賽格威的消息爆炸以後,遲遲沒有動作,這明顯不符合小米的作風嘛,不過前兩天,醞釀許久後,新品「九號平衡車」跟著小米電視
  • 賽格威(Segway)推時速 12 公裡電動直排輪 Drift W1
    賽格威(Segway)再推出 Drift W1 電動直排輪,單邊重量不到四公斤,充飽電一次可使用 45 分鐘,最高時速達 12 公裡
  • 賽格威機器人將重踏賭城拉斯維加斯 CES展位看點提前劇透!
    我思考了一秒鐘,還是不能讓心裡的猛虎出閘,歡快地堅守自己的崗位,因為「離去的,都是風景;留下的,才是人生。」那個時候的它還在原型機階段,在展示中它可以當正常的平衡車使用,還可以自動跟隨人行走,可以變身「家庭服務機器人」,能夠隨時監控家中狀況,內置的麥克風陣列可以通過語音來接受命令。
  • 為汽車裝上一輛Airwheel平衡車,戶外出行4+2
    為汽車裝上一輛Airwheel平衡車,戶外出行4+2 什麼叫「4+2」出行?最簡單的解釋就是,在你的汽車後備箱裡,再放一輛輕便的自行車,這樣的出行方式。
  • 電動平衡車不是兒童玩具!輕則粉碎性骨折,重則摔斷腿骨
    5月15日中午,湖南懷化某路段,一個5歲男童正在玩電動平衡車,一輛黑色越野車在轉彎時,將男童捲入車底。 從監控視頻畫面可以看到,這臺黑色越野車在路口左轉彎時,未觀察到道路上正在玩耍的男童,車幸運的是,肇事車輛駕駛人緊急剎車,避免了悲劇的發生。
  • cooghi酷騎兒童平衡車,掌控平衡力
    選購及安裝和小區裡的豆豆媽一番千挑萬選之下,終於選定了酷騎平衡車,給我家糖寶選了一輛酷騎黃,豆豆媽則給豆豆選了一輛經典的勝利紅,兩個人年齡差不多,還可以經常結伴一起玩,真不錯。另外,買平衡車一定要考慮重量方面,這是我以前所不知道的,作為一個通用規則,一輛兒童平衡車重量不應超過孩子體重的30%,酷騎平衡車重3.9公斤,糖寶小朋友體重15公斤,正好在她體重的30%以內,實際騎行時也很好的證明了她能夠駕馭得了這個重量,無論是狹窄空間的轉向還是自己扛起平衡車,作為一個剛剛3歲的男寶,都是毫無壓力的。
  • 一車三用,手推車、三輪車、平衡車統統搞定!
    男孩子無一例外地喜歡玩具車,家裡大部分的玩具都是車,大的小的,各式各樣的都有;而對女孩子來說,平衡車、自行車也是她們的心頭愛。開始學走路時,寶貝們會用到學步車,慢慢地從爬到學會自己走路;之後漸漸地長大了,開始喜歡三輪車,每天傍晚在家門的那條小道上滑行,玩得不亦樂乎;再大一點兒,就開始學平衡車了,三個輪子過渡到了2個輪子,開始學會掌握自己的平衡度來控制小車,最後學會騎行。
  • 愛爾威S8電動平衡車:坐立隨行智能車2.0升級力作
    摘要:繼第一代多姿態騎行平衡車愛爾威S6的誕生,愛爾威智能科技公司發揮了一貫高效的研發速度、敏銳的產品嗅覺以及一切以用戶為出發點的研發理念,再一次推出了坐立隨行的智能車升級之作——愛爾威S8。
  • 扭扭車、平衡車、滑板車,寶寶「坐騎」如何選?反正這種不能買!
    有句話說得好,「車是男人的小老婆」,畢竟,車是身份的象徵,它可以把車主襯託得更有魅力!然而事實上,無論是男人、女人,還是寶寶,都對車情有獨鍾!譬如我們家的小小兜,前些天就鬧著要買仿真電動小汽車,差點把天花板鬧翻呢!不過說實話,許多媽媽都會在寶寶10個月左右時,就給寶寶購置一輛「坐騎」,這樣我們「遛娃」方便,寶寶出去玩也開心。
  • 我家最近買了一臺兒童平衡車 網友評論太有才了
    我家姐姐馬上4歲了,之前沒有接觸過兒童平衡車。姐姐跨上Minipy兒童平衡車以後像換了一個人似的,像一個女騎手一樣追逐著更快的速度,爸爸看了我們拍的視頻說:女孩騎Minipy兒童平衡車也可以這麼COOL!當姐姐騎著兒童平衡車在小區練習,經常有人問:「這個車怎麼沒有腳蹬子?」其實兒童平衡車就是通過腳蹬地滑行,特別適合2-6歲的小朋友運動和休閒娛樂。希望姐姐可以越騎越好,可以去兒童平衡車俱樂部玩車!
  • 扭扭車、滑板車、平衡車,孩子的車該咋挑選?這種兒童車不建議買
    2)電動平衡車科技發展迅速,出現了各種電動平衡車,原本是為大人所設計的,卻更受到了孩子們的歡迎。但電動平衡車對孩子來說非常危險,每年都會有孩子因為平衡車而出現交通事故的新聞,所以不推薦給孩子購買電動平衡車。有些孩子看其他小朋友都有,自己也想有,就會央求父母,一些父母扛不住孩子軟磨硬泡的撒嬌,就給孩子買了,這是錯誤的做法。
  • 兒童平衡車中「藏毒」?到底怎麼選才安全又靠譜?
    △ 商家會詳細標明大小和重量等信息來源:thinkerkinds旗艦店而重量的話,平衡車在符合承重標準上,當然是車越輕越好啦!花花通過了解發現,目前市面上大部分的兒童平衡車,重量基本在2.2千克到3.4千克之間。就算2歲的小寶寶,也可以自己把車子扶起來。
  • 啟童扭扭車丨兒童平衡車的好處有哪些?答案看這裡!
    近些年,沒有腳踏板,沒有傳動鏈條,沒有輔輪,乃至沒有腳鐙子的這類靠「雙腳踏地驅動器」行車的兒童平衡車吸引住了許多 父母的關心,慢慢在我國獲得銷售市場,乃至產生了規模化的兒童平衡車比賽。為何兒童平衡車會獲得父母們的關心?兒童平衡車可使少年兒童的平衡力獲得非常好的訓煉,刺激性孩子大腿肌肉的產生,對孩子將來的注意力訓練和社交能力造成優良的推動作用。另一方面,經簡易訓煉,少年兒童便可輕輕鬆鬆把握兒童平衡車的操作方法,單獨掌控一輛車能為孩子產生滿足感,塑造孩子的自覺性,推動孩子信心的培養。
  • 【團購預告】騎平衡車是兩歲小朋友的歷史新篇章
    到孩子兩歲,身高90釐米左右,我由衷建議可以讓孩子開始歷史新篇章了。那就是不單單坐在嬰兒手推車裡,不僅僅賴在爸爸媽媽的抱抱裡,除了更穩當地走路、奔跑,孩子可以嘗試用自己的身體控制一輛車,體會到運用工具的愉快(這是除直立行走之外,人類區別動物的另一個大特徵啊),孩子可以體會到「騎行」的快樂了!
  • 孩子3 歲前到底要買幾種車?扭扭車、 平衡車...一篇文章全講清
    很多媽媽在孩子 10 個月左右時就會開始考慮給他們購置一輛「座駕」,但一看,我的媽,扭扭車滑板車三輪的四輪的,完全不知道該選哪個,又怕寶寶長得快或是玩了一段時間就不感興趣。被娃「拋棄」的代步車放在家裡,既佔地方又浪費。