DIY智能車賽優勝獎開源作品——手機遙控麥克納姆輪小車(1)

2021-02-21 RTThread物聯網作業系統

本文由 EMakeFun-軍弟 編寫.

隊伍名

項目名Github 地址鯤鵬戰隊鯤鵬戰車https://github.com/Eronwu/roc_robot

以下是RT-Thread DIY 智能車賽1000元優勝獎得主——鯤鵬戰隊的作品分享!

附上完整作品視頻:

記得小時候大約10歲的時候那個時候家裡窮沒有玩具玩,某天發現老爸以前礦山裡挖煤留下的工具箱裡有幾個嶄新的軸承,如獲至寶,趕緊找來鋸子和木板製作了人生第一臺車,大概效果如下

當時帶著自製小車,在村口玩的時候,在小夥伴們裡的風靡程度,不亞於現在一臺跑車的回頭率

就這樣這輛小車陪伴我過了美好的童年,不過我永遠不會忘記當年山坡翻車那個場景,如今我手背那塊傷疤就是當年的記憶。最後一次見到那臺車,應該是14年回老家還看到老屋角落躺著我的那輛木製軸承車,後面就沒有了。。。。。放一張我想我當時玩的時候大概是這樣子做個紀念吧!!!

後來上大學選了自己最愛的電子專業,錯過了飛思卡爾智能車比賽(兩年一屆),但是那個時候還沒有Robomaster都沒機會再玩到車,非常的遺憾。工作5,6年後偶然看到RT-thread舉辦的戰車製作活動,就毫不猶豫就參加了,一路製作沒有遇到太多艱辛,只完成了最基礎的功能,有些遺憾,但是恰好30來臨之際,記錄一下做車的過程,算是給自己的生日禮物好了。


製作過程

一. 器材選擇篇

在做這個車之前,有參考大量資料和車模,和隊友們一起商量,希望做一臺類似大疆步兵戰車,所以我們在器件選型的時候大量參考了RobotMaster的器件參數,但是考慮大疆配件昂貴,我們自己綜合了價格和性能進行選型。


主板

MCU:STM32L475

主頻:80M

完善RT-Theard系統支持

板載AP6181

集成ST-Link非常方便調試

電機選擇

直接選用編碼電機參數如下:


電機參數類型AB雙相增量式霍爾編碼電機供電電機24V,編碼器5V減速比1比19額定轉速504rpm額定轉矩14kg.cm負載電流2.6A峰值電流9.5A
電機驅動板選擇

有了前面電機參數,我們選擇驅動板就簡單得多了,需要關注參數為驅動電壓超過24V,驅動電流大於3A,功率要超過 3*24 = 72W.

淘寶找到如下一塊滿足要求

產品參數
供電電壓6.5V~27V 不能超過27V雙路電機接口沒路額定輸出電流7A,峰值50A功率24V電機115W  12V電機40W控制信號電平3~6.5V電壓

控制方式:

IN1IN2ENA1OUT1,OUT2輸出00X剎車11X懸空10PWM正轉調速01PWM反轉調速101全速正轉011全速反轉
電池和開關選擇

前面電機需要24V供電,所以需要串聯3組2S 7.4V鋰電池組(或者2組3S 11.1V電池組)我們選用3組1800mA 25C航模電池,最大放電 1.8A * 25 = 45A,大於 4個電機,峰值電流 4 * 9 =36A要求


選用LM2596S 24V轉5V,最大電流3A,給loT-board和編碼電機供電

麥克納姆輪

我們購買了100mm 具體參數如下:

型號100mm直徑重量1.52kg負載能力40kg厚度50mm支撐輪抽直徑3mm支撐輪個數9個

底盤由於我們器材都是自選,市面上底盤都無法安裝,所以只要自己畫個底盤,為了方便調試先做成亞克力,後面定型再做成鋁合金

組合圖

二. 小車組裝篇


電池改造

為了獲取24V高電壓,我們需要將3節7.4V航模電池正負極串聯起來(操作過程千萬注意同一個電池正負不要碰到)並安裝一個撥動開關,改造之後的電池如下: 

供電連接

我們先把所需的供電需求列出來:

模塊需要電壓供電方式IoT-Board+5V電池經過LM2596S降壓到5V電機驅動板電源接口+24V電池電壓直出電機驅動板5V引腳+3.3VloT-board的GPIO電平一致所以只能給3.3V否則pwm不能調速編碼電機5V+5V電池經過LM2596S降壓到5V

接線如下:

主控板GPIO口引腳規劃如下

IoT-Board GPIO引腳名字GPIO引腳序號PWM namePWM channel電機驅動板引腳PD1259pwm4channel 1電機驅動板A 引腳EN1PD1360

電機驅動板A 引腳IN1PA429

電機驅動板A 引腳IN2PB895pwm4channel 3電機驅動板A 引腳EN2PB996

電機驅動板A 引腳IN3PA867

電機驅動板A 引腳IN4PA023pwm2channel 1電機驅動板B 引腳EN1PA124

電機驅動板B 引腳IN1PC217

電機驅動板B 引腳IN2PB103pwm2channel 1電機驅動板B 引腳EN2PB1148

電機驅動板B 引腳IN3PC433

電機驅動板B 引腳IN4PB1251

左前編碼電機APB1352

左前編碼電機BPB1453

右前編碼電機APB1554

右前編碼電機BPD1461

左後編碼電機APD1562

左後編碼電機BPC663

右後編碼電機APC764

右後編碼電機B整機安裝效果圖

正面:

底面:

三. 軟體環境搭建篇


這部分直接參考官方給的環境搭建,非常完整,不在重複編寫STM32 運行:https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32

ENV工具可以通過以下連結獲取:https://pan.baidu.com/s/1cg28rk#list/path=%2F

四. PWM 板載wifi驅動移植篇

BSP code base選擇

由於購買是IoT-Board潘多拉主板有兩個bsp可以使用第一個是https://github.com/RT-Thread/rt-thread整個軟體比較龐大,支持非常多型號主板和晶片,架構也完善。另外一個是 https://github.com/RT-Thread/IoT_Board這個是專門針對潘多拉板子官方做得bsp,潘多拉板子上所有硬體的庫都完美支持,拿來即可用,比如板載wifi AP6181完全移植好,只需要實現tcp service即可完成wifi遙控。

一開始我這邊是用RT-Thread BSP移植好pwm,一切調試正常,後面移植wifi時發現,AP6181,lwip,wlan等網絡組件默認並沒有打開,一頓操作終於移植完成,最後移植編譯正常,發現無法連接wifi, 由於對wifi驅動了解不深,解決不了最後只好放棄這個方案。直接使用IoT-Board固件的wifi_manage工程,wifi問題解決,但是這個固件也不完美,這個板子是專門物聯網開發的,對於pwm配置工程裡面本身不包含配置選型,這樣就需要把pwm從驅動到應用到配置去打通,下面是移植簡單過程。

pwm驅動移植

本次製作的小車驅動方式為單pwm驅動方式,兩個IO控制電機方向,具體看之前驅動板的介紹。

早已習慣源碼簡單粗暴的開發方式 我並沒有去使用STM32官網先進的工具stm32CubeMX首先找到pwm驅動入口文件drivers\drv_pwm.cstm32_pwm_init(void)函數開始查看代碼根據之前配置好的pwm頻道

1#define LEFT_FORWARD_PWM            "pwm4"
2#define LEFT_FORWARD_PWM_CHANNEL    1           
3
4#define LEFT_BACKWARD_PWM           "pwm4"   
5#define LEFT_BACKWARD_PWM_CHANNEL   3          
6
7#define RIGHT_FORWARD_PWM           "pwm2"
8#define RIGHT_FORWARD_PWM_CHANNEL   1          
9
10#define RIGHT_BACKWARD_PWM          "pwm2"
11#define RIGHT_BACKWARD_PWM_CHANNEL   3          

填充相關枚舉和結構體

1宏定義 PWM2_CONFIG  PWM4_CONFIG
2static struct stm32_pwm stm32_pwm_obj[] 
3最後rtconfig.h
4#define RT_USING_PWM
5
6#define BSP_USING_PWM
7#define BSP_USING_PWM2
8#define BSP_USING_PWM2_CH1
9#define BSP_USING_PWM2_CH2
10#define BSP_USING_PWM2_CH3
11#define BSP_USING_PWM2_CH4
12#define BSP_USING_PWM4
13#define BSP_USING_PWM4_CH1
14#define BSP_USING_PWM4_CH2
15#define BSP_USING_PWM4_CH3
16#define BSP_USING_PWM4_CH4

實現如下幾個函數,一定要注意時鐘的使能:

1void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
2void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
3static void pwm_get_channel(void)
4

在調試pwm的過程中 我們如果遇到電機不動,可以如下將drv_pwm的log打開,然後看log哪裡出錯,如果整個流程都通還不動,可以對照pwm裸機程序調試

1#define DBG_SECTION_NAME     "drv.pwm"
2#define DBG_LEVEL     DBG_LOG
3#include <rtdbg.h>

wifi tcp service收發數據

IoT-board板載wifi實在覺得另外接wifi或者其他控制方式沒有必要,所以只需要實現tcp service就可以了.

1void tcprecvserv(void *parameter)
2{
3    unsigned char *recv_data; 
4    socklen_t sin_size;
5    int sock, bytes_received;
6    struct sockaddr_in server_addr, client_addr;
7    rt_bool_t stop = RT_FALSE;
8    int ret;
9    int nNetTimeout = 20;
10    recv_data = (unsigned char *)rt_malloc(BUFFER_SIZE);
11    rt_kprintf("tcpserv start .\n");
12    if (recv_data == RT_NULL)
13    {
14        rt_kprintf("No memory\n");
15        return;
16    }
17
18    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
19    {
20        rt_kprintf("Socket error\n");
21
22        rt_free(recv_data);
23        return;
24    }
25
26    server_addr.sin_family = AF_INET;
27    server_addr.sin_port = htons(5000);
28    server_addr.sin_addr.s_addr = INADDR_ANY;
29    rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
30    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int)); 
31    if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
32    {
33        rt_kprintf("Unable to bind\n");
34        rt_free(recv_data);
35        return;
36    }
37
38    if (listen(sock, 5) == -1)
39    {
40        rt_kprintf("Listen error\n");
41
42        
43        rt_free(recv_data);
44        return;
45    }
46
47    rt_kprintf("\nTCPServer Waiting for client on port 5000...\n");
48    while (stop != RT_TRUE)
49    {
50        sin_size = sizeof(struct sockaddr_in);
51
52        rt_kprintf("Listen start = %d\n", connected);
53        connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
54        rt_kprintf("Listen end = %d\n", connected);
55        if (connected < 0)
56        {
57            rt_kprintf("accept connection failed! errno = %d\n", errno);
58            continue;
59        }
60
61        rt_kprintf("I got a connection from (%s , %d)\n",
62        inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
63
64        while (1)
65        {
66            bytes_received = recv(connected, recv_data, BUFFER_SIZE, MSG_WAITALL);
67            if (bytes_received < 0)
68            {
69                closesocket(connected);
70                break;
71            } else if (bytes_received == 0) {
72                rt_kprintf("\nReceived warning,recv function return 0.\r\n");
73                closesocket(connected);
74                connected = -1;
75                break;
76            }
77           rt_ringbuffer_put_force(tcp_dat, (const rt_uint8_t *)recv_data, bytes_received);
78        }
79    }
80
81    closesocket(sock);
82    rt_ringbuffer_destroy(tcp_dat);
83    rt_free(recv_data);
84    return ;
85}

默認埠號為5000 ,這裡特別強調一下,wifi收數據時一開始收發不知道怎麼處理,正打算實現做一個ringbuffer,結果一看RT-thread有個rt_ringbuffer非常好用,使用也非常簡單,解決收數據,解析數據一大麻煩.

1rt_ringbuffer_create(2*BUFFER_SIZE); 
2rt_ringbuffer_put_force(tcp_dat, (const rt_uint8_t *)recv_data, bytes_received);  

然後主循環裡只需要判斷是否有數據就行

1while (rt_ringbuffer_data_len(tcp_dat) != 0) {
2    .
3    rt_ringbuffer_getchar(tcp_dat, &dat);
4    
5    }

就可以了,完全不用擔心丟包問題好了wifi測試來一張圖

五. 軟體框架,控制協議、全向控制基礎原理篇

代碼目錄:application\roc_car\applications

代碼架構:

roc_car│├─docs│      *.md                // 文檔介紹│├─applications│      main.c                // 主入口│      main.h│      protocol.h            // 協議頭文件│      protocol_parser.c        // 協議解析文件│ protocol_parser.h│ roc_robot.c            // 小車控制函數文件│ roc_robot.h│ tcprecv.c            // tcp 接受數據函數│ wifi_connect.c│ ├─ports└─SConscript                // RT-Thread 默認的構建腳本

對於電機的控制直接採用了 RT-Thread官方的rt-robot框架,我使用的單路pwm驅動方式,為了方便使用這個框架我對rt-robot再做了一層封裝

1typedef struct {
2    single_pwm_motor_t left_forward_motor, left_backward_motor, right_forward_motor, right_backward_motor;
3    ab_phase_encoder_t left_forward_encoder, left_backward_encoder, right_forward_encoder, right_backward_encoder;
4    inc_pid_controller_t left_forward_pid, left_backward_pid, right_forward_pid, right_backward_pid;
5    wheel_t left_forward_wheel, left_backward_wheel, right_forward_wheel, right_backward_wheel;
6
7    motor_t x_servo, y_servo;
8    kinematics_t c_kinematics;
9    E_ROC_ROBOT_STATUS status;
10    rt_int8_t speed ;
11    rt_int16_t degree;
12}ST_ROC_ROBOT;

使用的時候再封裝如下幾個操作函數:

1roc_robot_init() 
2roc_robot_go_forward()
3roc_robot_go_backward() 
4roc_robot_turn_right()
5roc_robot_turn_right_rotate()
6roc_robot_turn_left()
7roc_robot_turn_left_rotate()
8roc_robot_stop()

控制基礎原理

為了實現上面幾個函數我們需要了解一些最基本的原理,首先我們控制小車前進,後退,向左,向右,左旋,右旋這六個個基本功能。

旋轉原理

前面只是幾個基本動作的控制,如果我們要實現全相控制呢?那麼我們需要學習一下基礎原理知識通過這篇麥克納姆輪控制原理文章的講解我們知道,全向移動底盤是一個純線性系統,而剛體運動又可以線性分解為三個分量。那麼只需要計算出麥輪底盤在Vx「沿X軸平移」、Vy「沿Y軸平移」、w「繞幾何中心自轉」時,四個輪子的速度,就可以通過簡單的加法,計算出這三種簡單運動所合成的「平動+旋轉」運動時所需要的四個輪子的轉速。而這三種簡單運動時,四個輪子的速度可以通過簡單的測試,或是推動底盤觀察現象得出。

當底盤沿著 X 軸平移時:

1V左前 = +Vx
2V右前 = -Vx
3V左後 = - Vx
4V右後 = +Vx

當底盤沿著 Y 軸平移時:

1V左前 =  Vy
2V右前 =  Vy
3V左後 =  Vy
4V右後 =  Vy

當底盤繞幾何中心自轉時:

1V左前 =  W
2V右前 =  -W
3V左後 = W
4V右後 = -W

將以上三個方程組相加,得到的恰好是根據「傳統」方法計算出的角度,綜合到一起就是

1V左前 = +Vx + Vy + W
2V右前 = -Vx + Vy -W
3V左後 = - Vx + Vy + W
4V右後 = +Vx + Vy -W

由於 rt-robot 的全向控制和我遙控程序的坐標系不同所以重新實現了一下這個函數:

1void roc_robot_run(rt_int16_t x, rt_int16_t y, rt_int16_t rotate)
2{
3    rt_int16_t lf_speed = x + y + rotate; 
4    rt_int16_t lb_speed = -x + y + rotate;
5    rt_int16_t rf_speed = -x + y -rotate;
6    rt_int16_t rb_speed = x + y - rotate;
7    single_pwm_motor_set_speed(roc_robot.left_forward_motor, lf_speed *10);
8    single_pwm_motor_set_speed(roc_robot.left_backward_motor, lb_speed *10);
9    single_pwm_motor_set_speed(roc_robot.right_forward_motor, rf_speed *10);
10    single_pwm_motor_set_speed(roc_robot.right_backward_motor, rb_speed *10);
11}

前面已經把基礎原理介紹了一遍,那我們到底怎麼來實現wifi遙控呢?

協議部分

1typedef struct
2{
3    rt_uint8_t start_code ;   
4    rt_uint8_t len;           
5    E_ROBOT_TYPE type;
6    rt_uint8_t addr;
7    E_CONTOROL_FUNC function;      
8    rt_uint8_t *data;         
9    rt_uint16_t sum;       
10    rt_uint8_t end_code;      
11} ST_PROTOCOL; 
12
13typedef enum
14{
15    E_BATTERY = 1,
16    E_LED,
17    E_BUZZER,
18    E_INFO,
19    E_ROBOT_CONTROL_DIRECTION,  
20    E_ROBOT_CONTROL_SPEED,      
21    E_TEMPERATURE,
22    E_INFRARED_TRACKING,
23    E_ULTRASONIC,
24    E_INFRARED_REMOTE,
25    E_INFRARED_AVOIDANCE,
26    E_CONTROL_MODE,  
27    E_BUTTON,
28    E_LED_MAXTRIX,
29    E_CMD_LINE,
30    E_VERSION,
31    E_UPGRADE,
32    E_PHOTORESISTOR,
33    E_SERVER_DEGREE,
34    E_CONTOROL_CODE_MAX,
35} E_CONTOROL_FUNC; 

我們先來看下wifi遙控界面什麼樣子:

Android端APP界面示意圖

我們先建立如下一個xy 軸和0~360度的對應控制關係坐標系如下

假如這個時候我們從wifi獲取到角度 為 degree,由於apk設計原因,沒有做旋轉角度指盤那麼x軸和y軸的速度為如下:

1Vx = cos(degree) * speed
2Vy = sin(degree)*speed

上面這個計算公式,就可以很容易實現如下代碼:

1void roc_robot_drive(rt_uint16_t degree)
2{
3    LOG_D("roc_robot_drive %d", degree);
4    rt_int16_t x, y;
5
6    if (degree == 0XFFFF) {
7        roc_robot_stop();
8    } else {
9        x = cos(degree)*roc_robot.speed;
10        y = sin(degree)*roc_robot.speed;
11        roc_robot_run(x, y, 0);
12    }
13}
14整個程序流程如下:
15
16main.c:
17
18wifi_auto_connect(); 
19
20roc_robot_init(0); 
21
22rt_thread_create("led_flash", led_flash... 
23
24ret = rt_thread_create("wifi_control", wifi_control... 
25
26tcprecvserv((void *)pareser_package.buffer); 

六. 應用編寫,手機遙控器篇


簡介

開發環境

Android studio

需要的可以通過這裡下載android app

https://github.com/emakefun/hummer-bot/blob/Hummer-bot4.0/APP/Emakefun_Robot.apk

總結


一開始想做戰車類型,所以電機選型太大,驅動板功率很大,但是車上是亞克力,整個車容易「暴動」,需要裝減震器。

前期太注重軟體框架和wifi控制協議編寫,導致沒有時間做閉環控制調試,但是後面加入進去。

未能把攝像頭雲臺加進去。

後面有想法用樹莓派4或者jetson nano主板來做

最開心的是RT-Thread組織這個活動認識了一大幫做車的大牛,特別是指導老師吳博的知識淵博打開我的視野,另外一個吳鵬對技術的純粹執著的態度令我敬佩。

當然也要非常感謝阿波基友和其他隊友的支持

最後,恭喜鯤鵬戰隊全體成員,也感謝各位在文檔整理上的付出!

RT-Thread線上活動

1、RT-Thread開發者大會報名】2019年RT-Thread開發者大會將登入成都、上海、深圳與開發者們見面,還有RT-Thread在中高端智能領域的應用、一站式RTT開發工具、打造IoT極速開發模式等乾貨演講,期待您的參與!本次大會也設立了codelab動手實驗室活動,開發者可在現場體驗RT-Thread給開發帶來的便捷!


立即報名

2、RT-Thread能力認證考前線上培訓,將於11月25日全線截止報名,如果您有晉升、求職、尋找更好機會的需要,有深入學習和掌握RT-Thread的需求,請儘快垂詢/報考!學生優惠價:168/人 

學生專屬報名通道

能力認證官網連結:https://www.rt-thread.org/page/rac.html(在外部瀏覽器打開)

立即報名(非學生)

#題外話# 喜歡RT-Thread不要忘了在GitHub上留下你的STAR哦,你的star對我們來說非常重要!連結地址:https://github.com/RT-Thread/rt-thread

你可以添加微信17775983565為好友,註明:公司+姓名,拉進 RT-Thread 官方微信交流群

RT-Thread


讓物聯網終端的開發變得簡單、快速,晶片的價值得到最大化發揮。Apache2.0協議,可免費在商業產品中使用,不需要公布源碼,無潛在商業風險。

相關焦點

  • 【編程造物】手把手教你如何製作一輛手機遙控藍牙小車?(Arduino+AppInventor+HC-06藍牙模塊)
    先看視頻演示:(由於小編玩的太嗨以至視頻錄製時由於電池電量不足,致使左右轉力量不夠,抱歉哈)大家好,相信大家小時候都玩過遙控小車吧
  • 《來實戰》之智能車開源項目01期:一起開源吧!(含先導片)
    關於開源項目,我們計劃這樣來操作:1.對標摩爾吧中相關主題智能小車項目(基於恩智浦平臺智能汽車),我們這次用基於意法半導體的STM32平臺來打造多功能智能小車,最終實物性能如何?基於意法半導體平臺的智能小車PK恩智浦智能小車,誰更勝一籌?電路城開源項目組現在開始就通過逐步實操並最終打造出來,最後實物演示操作對比。
  • 3D建模,打造遙控小球,一不小心逗樂你!
    接線圖:接線很簡單,就是一個藍牙小車的接線方式我在GitHub上找到了一個android開源的藍牙遙控App把源碼修改成自己想要的,我不會iOS,所以就沒有iOS蘋果手機的App啦。遙控App演示:自定義編碼默認值為:前進 1、後退 2、左轉 3、右轉 4、停止 0滑動虛擬搖杆上-前進、下-後退、左-左轉、右-右轉、鬆開為停止;也可以作為其它藍牙小車的遙控app。
  • 18位工程師DIY實例教你玩STM系列的微控制器,快速易上手!
    板卡上集成眾多硬體單元,以方便用戶對微控制器上各個外設功能的評估和開發 (馬達控制、USART、TFT LCD、USB、CAN總線、智慧卡、NOR Flash、NAND Flash、IrDA、MicroSD卡、串行Flash,以及溫度傳感器等)。板上還提供了擴展插針方便用戶擴展。
  • 專訪悟空遙控,在智能電視紅海與巨頭共舞的創業者
    智能電視的柳暗花明電視智能化早算不上新聞,目前全國智能電視(包括盒子)大約 1.2 億,而中國電視的保有量大約 5.4 億臺,這些電視會在將來的某個時候徹底智能化。不過隨著手機性能越來越強大,電腦將慢慢回歸純粹的生產力工具,而手機和智能電視將重新分配娛樂行業市場。手機完成碎片化娛樂,而電視則滿足人長時間更沉浸的娛樂體驗。「悟空遙控」的 CEO 孫鵬告訴極客公園,正是出於上面的考慮,他毅然決然進入了智能電視這一領域。以高頻工具為入口切入智能電視市場這件事,「悟空遙控」同樣有自己的考量。
  • 這可能是最詳細的索尼智能遙控APP說明書
    [智能遙控]是一種相機應用程式,可讓您在智慧型手機或平板電腦上結合遙控應用程式來遙控相機。 Sony針對智慧型手機或平板電腦提供了遙控應用程式如果您使用其他遙控應用程式,則連接步驟與操作可能有所不同。您可以使用智慧型手機或平板電腦來遙控相機以拍攝照片,同時將影像傳輸到智慧型手機或平板電腦。在智慧型手機或平板電腦上安裝「PlayMemories Mobile」。選擇MENU →[應用程式]→[智能遙控]。如果相機已準備好連接,相機上會顯示信息畫面。
  • 【關注】意念遙控飛機,手機無線充電,中國智博會上充滿想像力的智能產品
    ,「啪」地一聲,飛機就掉下來了,用意念遙控飛機能培養人的專注力;  出門在外沒帶電源線無法給手機充電,只要走進安裝有無線供電裝置的公共場所,所有的手機都會默默地自動開始充電……  9月12日至14日,第四屆中國智慧城市技術與應用產品博覽會在寧波舉行,智博會上各種充滿想像力的奇特產品,讓生活變得充滿樂趣。
  • 兩種智能小車的建模與仿真
    兩種智能小車的構造簡介在市面上常見的兩種智能小車都是基於輪式的,在某寶上面賣的最多的,各位在學生時代拿來應付課程設計和畢業設計用的各種小車分為兩種。1.後輪驅動:前輪阿克曼轉向的,通常後軸通過有刷直流電機驅動,前軸通過舵機帶動連杆轉向。
  • 創客童年•Arduino創作大賽(入圍作品展示)
    主要元器件: 超聲波傳感器,小喇叭,主板硬體接線圖:1、作者:林廣榮(貝塔機器人俱樂部)2、作品介紹:現如今生活中的電子產品中,大多數產品都是充電使用,可移動型的,例如手機、電動車等,雖然現在充電器電路設計的越來越完美,基本都有充滿電自動斷電的保護功能,但長久使用電路可能會老化
  • 杜蕾斯推智能遙控震動內衣,用手機也能爽歪歪
    「智能化」概念的普及,不僅讓我們享受到了科技帶來的樂趣,同時也讓一些傳統行業也不得不加入「智能」的行列。
  • 【參考】智慧型手機用作電視機遙控器的設計
    因為在我國的城鎮人口中,基本上實現了人手一臺智慧型手機,而且,智慧型手機是隨身攜帶,但電視機的遙控器不是隨身攜帶,常常遇到要開電視機或換臺時找不到電視機遙控器。如果使用智慧型手機來遙控電視機,那麼,這個問題就不存在了。
  • 動漫也可以實現,哆啦A夢已經可以實現的道具,智能手錶人人都有
    說起童年動漫,相信很多朋友閃過非常多的經典作品,像《寶可夢》、《數碼寶貝》、《四驅兄弟》、《秀逗魔導師》等等,但是這些作品未必每個人都看過,要說一部每個人都看過的作品或許只有《蠟筆小新》、《哆啦A夢》等國民級別作品。
  • 「顏值」和實力兼備 億聯網絡產品獲紅點「CGD當代好設計」優勝獎
    億聯網絡推出的可攜式免提會議電話CP900、會議無線輔流傳屏器WPP20,斬獲「CGD當代好設計」優勝獎!過關斬將國際品質收穫權威點讚「當代好設計」獎(ContemporaryGoodDesign)簡稱CGD,是由德國紅點獎機構發起的針對中國的全新國際化設計獎項。獎項範圍覆蓋全球30餘個國家和地區,累計超過萬餘件作品參與評選。
  • 斐訊S7智能體脂秤榮獲"中國好設計"優勝獎
    斐訊S7智能體脂秤榮獲"中國好設計"優勝獎。斐訊S7智能體脂秤榮獲"中國好設計"優勝獎斐訊S7和DC1頒獎時刻,由官政能教授頒獎智能體脂秤S7極力追求完美,15mm纖薄尺寸、一體化磨砂底殼成為其"顏值"代名詞;隱藏式LED顯示屏,白色光字體與白色機身完美融合。斐訊智能體脂秤S7好產品不僅有出色的設計,更注重產品體驗。
  • 基礎製作兩輪自平衡小車-硬體原理講解篇
    MWbalancedSTC15是一款為初學而生的可二次開發的開源兩輪自平衡小車。代號MWbalancedSTC15的命名遵循「MW+xxx」的方式,MW為大寫,是Miaow的縮寫,balanced為小寫,意為「平衡的」,STC15為系統所用的控制晶片型號。
  • 遙控精靈超強獨特功能有網沒網都能遙控!
  • 4月17日: 2019年智慧型手機處理器下跌11%; openEuler打造多樣計算...
    Strategy Analytics手機元件技術研究服務最新發布的研究報告《2019年Q4智慧型手機應用處理器市場份額追蹤:出貨量下跌13%》指出,2019年全球智慧型手機應用處理器(AP)市場收益同比下降3%,至196億美元
  • 小車輪好還是大車輪好?老司機手把手的告訴你!
    車輪對汽車的舒適度也有不小的影響,懂車的人都說買車一定要買小車輪的車,為什麼這麼說?隨著小編一起來看看。如今跟著生活品質的迅速的提高,家家戶戶都買車已經成為我們了生活中無獨有偶的一件事情,所以人們相對汽車的不停的消費也就激進了廠商之間強烈的競爭,相對許多廠牌來說,現如今的汽車需要全面的發展,才取得消費者的喜愛。
  • 假如,鴻蒙能讓你用電飯煲來遙控電視...
    ​在回答這個問題之前,首先要回答 ~~為什麼要用電飯煲遙控電視~~(劃掉)# 1. 什麼是鴻蒙?鴻蒙,中國神話傳說的遠古時代,傳說盤古在崑崙山開天闢地之前,世界是一團混沌的元氣,這種自然的元氣叫做鴻蒙,因此把那個時代稱作鴻蒙時代,後來此一詞也常被用來泛指稱遠古時代。