冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 483|回覆: 0
打印 上一主題 下一主題

[討論] Atmel ATtiny2313-20PU 聲控地球儀 自動顯示

[複製鏈接]

2609

主題

0

好友

949

積分

高級會員

Rank: 4

UID
373967
帖子
7589
主題
2609
精華
0
積分
949
楓幣
1935
威望
928
存款
26000
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
413 小時
註冊時間
2023-1-12
最後登入
2024-5-22

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-8 08:45:16 |只看該作者 |倒序瀏覽
製作聲控地球儀所需的零件清單如下:

Atmel ATtiny2313-20PU 微控制器
MAX4466 麥克風放大器模塊
3D列印的地球儀模型
SG90 9克微型伺服馬達
L293D 馬達驅動器IC
HC-05 藍牙模組
5V 電源供應器
電線、焊錫、焊接工具等
連接腳位如下:

ATtiny2313        MAX4466        SG90        L293D        HC-05
PB0        OUT        -        -        TXD
PB1        -        SIGNAL        IN1        RXD
PB2        -        VCC        VCC        VCC
PB3        -        GND        GND        GND
PB4        -        -        IN2        -
PB5        -        -        ENABLE        -
程式碼如下:


#include <avr/io.h>
#include <util/delay.h>
#include <string.h>

#define F_CPU 1000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

void usart_init(unsigned int ubrr) {
    UBRRH = (unsigned char)(ubrr >> 8);
    UBRRL = (unsigned char)ubrr;
    UCSRB = (1 << RXEN) | (1 << TXEN);
    UCSRC = (1 << URSEL) | (1 << USBS) | (3 << UCSZ0);
}

void usart_transmit(unsigned char data) {
    while (!(UCSRA & (1 << UDRE)));
    UDR = data;
}

void servo_write(int angle) {
    OCR1A = (unsigned int)(2000 + angle * 11.11); // calculate duty cycle for given angle
    _delay_ms(500);
}

int main(void) {
    DDRB |= (1 << PB4) | (1 << PB5); // configure motor driver pins as outputs
    PORTB &= ~((1 << PB4) | (1 << PB5)); // set motor driver pins to low

    TCCR1A |= (1 << COM1A1) | (1 << WGM11); // configure timer1 for fast PWM mode
    TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS11); // prescaler = 8
    ICR1 = 20000; // f_PWM = 50 Hz
    servo_write(0); // initial position

    usart_init(MYUBRR); // initialize USART

    while (1) {
        unsigned char data;
        while (!(UCSRA & (1 << RXC))); // wait for data to be received
        data = UDR;

        if (data == 'N') { // North
            servo_write(0);
        } else if (data == 'S') { // South
            servo_write(180);
        } else if (data == 'E') { // East

Copy code
        servo_write(90);
    } else if (data == 'W') { // West
        servo_write(270);
    }
}
}



這個程式使用了ATtiny2313的PWM功能控制SG90微型伺服馬達的角度,當接收到HC-05藍牙模組發送的聲控指令時,會根據指令調整伺服馬達的角度,以顯示正確的地球儀方向。
[發帖際遇]: 洪嵐峰 正確回答議員「陳彥伯」的「肚臍」提問,因而獲得獎勵 1 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-5-23 00:57

回頂部