資料介紹
描述
“Segbot”是 UIUC ME 461 級制造的平衡 segway 機器人。segbot 由 Dan Block (d-block@illinois.edu) 教授設計的電路板和 F28379D 微控制器組成,該微控制器是德州儀器 C2000 系列的一部分。該項目的目標是讓 segbot 播放歌曲和舞蹈以響應檢測到不同的音符。
音符檢測
音符檢測是使用模數轉換完成的,將從麥克風接收到的模擬信號轉換為數字值。沒有占空比輸出的脈寬調制被用作定時器,以 10 kHz 的采樣率觸發 ADC 中斷。為了識別不同的頻率,使用Goertzel 算法一次對 1000 個 ADC 值進行離散傅里葉變換。如果算法的輸出超過某個閾值,則檢測到音符。閾值是一個稍微隨意的值,調整為在適當的時間做出響應,這意味著如果由于意外事件(例如落筆)而出現頻率,則不會檢測到音符。
// DFT with Goertzel Algorithm
float goertzel_mag(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data)
{
int k,i;
float floatnumSamples;
float omega,sine,cosine,coeff,q0,q1,q2,magnitude,real,imag;
float scalingFactor = numSamples / 2.0;
floatnumSamples = (float) numSamples;
k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
omega = (2.0 * PI * k) / floatnumSamples;
sine = sin(omega);
cosine = cos(omega);
coeff = 2.0 * cosine;
q0=0;
q1=0;
q2=0;
for(i=0; i
{
q0 = coeff * q1 - q2 + data[i];
q2 = q1;
q1 = q0;
}
// calculate the real and imaginary results
// scaling appropriately
real = (q1 - q2 * cosine) / scalingFactor;
imag = (q2 * sine) / scalingFactor;
magnitude = sqrtf(real*real + imag*imag);
return magnitude;
}
乒乓緩沖器
實現了一個乒乓緩沖器版本,以將 ADC 讀數存儲在單獨的陣列中,這樣一個可以收集數據,而另一個可以在 Goertzel 函數中執行計算。使用了三個這樣的數組,以便 Goertzel 算法在檢查對應于三種不同歌曲和舞蹈的三個單獨音符之間交替。當檢測到其中一個目標頻率時,它會發出歌舞開始的信號。
//Use three-part "Ping-Pong" Buffer in ADC interrupt
//Ping
if(PingPong == 0){
adcb_arrayPing[adcbcount] = adcb0result; // add ADC reading to array
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunPing = 1; //check in while loop
PingPong = 1; //switch to Pong buffer
}
}
//Pong
if(PingPong == 1){
adcb_arrayPong[adcbcount] = adcb0result;
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunPong = 1;
PingPong = 2; //switch to Dong buffer
}
}
//Dong
if(PingPong == 2){
adcb_arrayDong[adcbcount] = adcb0result;
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunDong = 1;
PingPong = 0; //switch to Ping buffer
}
}
// IDLE loop. Use to pass arrays through Goertzel fxn and check for note detection
while(1)
{
//after n samples, pass data through Goertzel fxn
// use Ping Pong buffer
if(RunPing == 1){
goer_result = goertzel_mag(n_samples,NOTE,sampling_rate, adcb_arrayPing);
RunPing = 0;
if(goer_result > thresh){
note_detected = 1;
}
}
if(RunPong == 1){
goer_result2 = goertzel_mag(n_samples,NOTE2,sampling_rate, adcb_arrayPong);
RunPong = 0;
if(goer_result2 > thresh){
note2_detected = 1;
}
}
if(RunDong == 1){
goer_result3 = goertzel_mag(n_samples,NOTE3,sampling_rate, adcb_arrayDong);
RunDong = 0;
if(goer_result3 > thresh){
note3_detected = 1;
}
}
歌舞
為了讓 segbot 播放歌曲,蜂鳴器由脈沖寬度調制控制。三個 CPU 定時器中斷中的每一個都被設置為不同的周期以對應歌曲的節奏。歌曲的音符組合成一個數組,用來改變PWM的周期,在檢測到第一個音符的情況下,每次發生定時器中斷時,蜂鳴器都會播放相應的音符。播放的歌曲是對披頭士的“Hey Jude”、夏奇拉的“Hips Don't Lie”和海灘男孩的“Little Saint Nick”的演繹。為了增強“小圣尼克”的表現,增加了一個鈴鐺,并結合 RC 伺服電機使用 PWM,在歌曲的不同部分敲擊表面。
讓 segbot 平衡是在此項目中完成的,再次使用 PWM 觸發 ADC,其中值通過 SPI 寫入,以便從 MPU-9250 讀取加速度和陀螺儀值。實施卡爾曼濾波器以在將值發送到平衡 segbot 的控制律之前對其進行過濾。與播放歌曲類似,為了讓 segbot 跳舞,為轉彎速率和向前/向后偏移創建了一個數組。當檢測到相應的音符時,在 CPU 定時器中斷中執行舞蹈。
//Sing and dance when the Goertzel value exceeds threshold
if(note_detected == 1){
GPIO_SetupPinMux(16, GPIO_MUX_CPU1, 5);// set up buzzer
if (numtimer1calls < songsize){
//play the song
if(song[numtimer1calls]==0){
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // ground the buzzer
}else{
EPwm9Regs.TBPRD = (int)(3125000/song[numtimer1calls]/2);
}
//dance
FwdBkOffset = fwddance[numtimer1calls];
turnrate = turndance[numtimer1calls];
} else{
GPIO_SetupPinMux(16, GPIO_MUX_CPU1, 0); // set GPIO16 back to GPIO
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // ground the buzzer
note_detected = 0;
numtimer1calls = 0;
FwdBkOffset = 0;
turnrate = 0;
}
numtimer1calls++; // only increment after note is detected
}
?
- 手勢控制機器人開源項目
- WiFi控制機器人開源項目
- 二輪自平衡機器人開源設計
- 掃地機器人開源資料 44次下載
- 關于傳感器機器人的開源項目
- 兒童助理機器人開源項目
- Arduino機器人開源項目
- 消毒機器人開源項目
- 線跟隨機器人開源項目
- 5合1 Arduino機器人開源項目
- 機器人開源項目
- 自主機器人開源項目
- 基于STM32開源項目:球上自平衡機器人
- 基于JJBoover的遠程控制ARDUNO自平衡機器人資料下載 2次下載
- 自平衡人形機器人動作控制器的設計
- 字節發布機器人領域首個開源視覺-語言操作大模型,激發開源VLMs更大潛能 561次閱讀
- 機器人技術中常用的路徑規劃算法的開源庫 1188次閱讀
- 機器人項目涉及的技術 1067次閱讀
- 利用STM32實現自平衡機器人功能項目 1081次閱讀
- 基于STM32的自平衡機器人設計 981次閱讀
- 如何使用Arduino制造一個自動平衡機器人 4833次閱讀
- 基于使用A4988驅動程序和HC-05 bt模塊構建自平衡機器人 2152次閱讀
- 基于ATmage128單片機和紅外測距傳感器實現自平衡機器人系統的設計 2474次閱讀
- 基于ATmega128單片機實現自平衡機器人控制系統的應用方案 4106次閱讀
- 面對疫情 醫療機器人能幫上什么忙? 2236次閱讀
- dfrobotSparki機器人套裝簡介 2207次閱讀
- 協作機器人的起源_為什么需要協作機器人 8322次閱讀
- Segway路萌機器人新酷潮品極速開箱,真機上手一驗便知 8619次閱讀
- 機器人自動化工程項目方案設計包括的6個步驟解析 1.3w次閱讀
- 11個機器學習開源項目 2829次閱讀
下載排行
本周
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 29次下載 | 2 積分
- 2雙極型三極管放大電路的三種基本組態的學習課件免費下載
- 4.03 MB | 23次下載 | 1 積分
- 3多級放大電路的學習課件免費下載
- 1.81 MB | 20次下載 | 2 積分
- 4PC4401_DC-DC 42V反激式隔離開關電路
- 0.85 MB | 4次下載 | 免費
- 5AIWA HS-J505MKⅡ維修手冊
- 22.63 MB | 2次下載 | 10 積分
- 6GPRS智能超聲波液位監測終端
- 835.55 KB | 2次下載 | 免費
- 7電磁兼容性原理與設計
- 6.18 MB | 1次下載 | 3 積分
- 8AIWA HS-JX3000/HS-JX3000D維修手冊
- 14.78 MB | 次下載 | 10 積分
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 29次下載 | 2 積分
- 2雙極型三極管放大電路的三種基本組態的學習課件免費下載
- 4.03 MB | 23次下載 | 1 積分
- 3第十一屆 藍橋杯 單片機設計與開發項目 省賽 程序設計試題及源碼
- 90.88KB | 23次下載 | 3 積分
- 4Python從入門到精通背記手冊
- 18.77 MB | 21次下載 | 1 積分
- 5多級放大電路的學習課件免費下載
- 1.81 MB | 20次下載 | 2 積分
- 6STM32F103C8T6開發板最小系統原理圖
- 0.78 MB | 17次下載 | 免費
- 7SX1308應用電路圖與SX1308升壓電路圖
- 0.18 MB | 8次下載 | 1 積分
- 8東芝彩色電視機29SF6C維修說明書
- 4.86 MB | 8次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81584次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論