痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 1946|回復: 11

[我有好點子] MOD 定時遙控錄影(Arduino)

[複製鏈接]
發表於 2023-5-25 04:09:25 | 顯示全部樓層 |閱讀模式
本帖最後由 hi80482 於 2023-5-25 04:07 AM 編輯

想要錄下喜歡的電視節目,可是人不在家裡怎麼辦?
市售的錄影機沒辦法自動轉台,
機上盒錄影功能無法導出檔案。
科技始終來自於人性,DIY 吧!

分享我的定時遙控器,已經運作一年以上了。
警告:節目內容受版權保護,請勿散佈錄影,以免觸法。
如何錄影 HDMI 訊號,這裡不討論。


支援平台:
1. MOD
502、503、504 機上盒測試 OK,其他型號未試。
MOD 全系列應是同一支遙控器。

優點:
1. 定時無人自動遙控錄影
2. 可排程十組以上
3. 排程按照「星期幾加時間」循環
4. 偵測時鐘不走
5. 可暫停

缺點:
1. 單純發送紅外線訊號,轉台無確認機制
2. 無 WiFi 更新排程,必須有燒錄器
3. 自行查節目表,設定排程
4. 手動校正時鐘
5. 無外殼外觀醜

材料:
1. 種花 MOD
2. 紅外線延長線、HDMI 線
3. 可遙控的 HDMI 錄影機、HDCP Splitter 分配器
4. Arduino + 燒錄器 (5V 的 Arduino 皆可,程式約 10K)
5. USB 孔 (5V 供電)
6. 腳架
7. 其他,見電路圖


連接圖.jpg
連接圖如上

mod_rec.jpg
電路圖如上

IMAG6911.jpg

IMAG6914.jpg

IMAG6915.jpg

IMAG6916.jpg

我用的是 Arduino Pro Mini (5V, 16MHz, atmega328P),
DS1307 時鐘模組 + CR2032,
雲台 + 腳架。

DS1307 模組改成 CR2032 供電,
不要用他附的充電電池,容易沒電不走。
改造方法:
disable the charging circuit by removing R4, R5, R6 and D1.
And if there is a resistor installed in R7 - remove that as well.
Short R6, for example, by soldering a short wire between the pads.
資料來源:DS3231 & DS1307 RTC in C64

軟體設定:
1. 安裝 Arduino IDE 1.8.19
2. 工具 -> 管理程式庫:安裝 IRremote 2.8.0 (一定要這個版本)
3. 工具 -> 開發板:Arduino Pro or Pro Mini
4. 工具 -> 處理器:ATmega328P (5V, 16MHz)
5. 工具 -> 燒錄器:AVRISP mkII
上面 3, 4, 5 僅供參考,實際以你的型號為主,
如何安裝,連接燒錄器,上傳程式,請查網路。

修改參數:
1.jpg
按電路圖接上紅外線接收器,燒錄 IR_Recv 程式。
工具 -> 序列埠監控視窗,對準接收器按下錄影機的遙控器。
就可以得到遙控編碼,只支援 NEC 協定。


設定時間:
2.jpg
jumper 短路 = 要更新時間。
jumper 開路 = 不更新時間。
填入未來約二分鐘內的時間,然後上傳程式。
上傳好了,重開機,當綠 LED 亮 = 已更新,
把 jumper 插回開路狀態,綠 LED 滅 = OK。
配合序列埠監控視窗 + 重開機鍵 + jumper,設定準確的時間。


設定排程:
3.jpg
參考程式 152 行之後的星期幾選項,不夠可以自己加。
程式是每秒鐘循環一次,理論上執行一條排程不用一秒,
試過二十個排程也都順利完成。
注意每個排程的時間不要衝突,
程式由上而下執行,若有多個排程衝突,
只會執行其中一個排程(看當時程式跑到何處),
其他衝突的排程通通跳過。


測試遙控和錄影:
4.jpg
在此加入你要錄的頻道。
開機或重開機後,首先執行測試程序。
看著電視螢幕,是否正確遙控 0 至 9 + 你的頻道。
如果遙控不準確,調整紅外線發射/接收器位置。
機上盒反應速度跟不上,調整參數(第 15 行之後)。

顯示燈號(範例是 Arduino Pro Mini):
1. 電源:通電時亮紅燈
2. 錄影:傳送錄影開始/停止訊號亮紅燈,錄影中閃紅燈(二秒一次)
程式中使用 LED_BUILTIN,若缺少此燈可用別的換。

3. 時間:時間已更新 = 亮綠燈
4. 暫停:按下暫停鍵亮黃燈 = 暫停,再按一次黃燈滅 = 取消暫停
在開機後的測試程序中,按暫停無效。
錄影中按暫停,只有定時遙控暫停,
並不會停止錄影,要手動按停止錄影。
錄影中按暫停,然後再按一次取消暫停,
並不會暫停原本下一段要執行的停止錄影的排程,
必須是暫停到下一段要執行的停止錄影的排程時間之後,
再按一次取消暫停,才是暫停整個排程時間。
注意此邏輯,手動錄影,最好全程暫停,以免中途被停止。

5. 時鐘:快速閃紅燈(很快) = 時鐘不走,檢查電池或接線
程式中使用 LED_BUILTIN,若缺少此燈可用別的換。
跟錄影共用同一個燈號。

其他狀況:
1. 遙控原本都很正常,突然轉台不準
Arduino 重開機,MOD 機上盒重開機。
調整紅外線發射/接收位置。
不要在發射訊號時,同步按其他遙控器,會干擾。

2. 沒在正確時間遙控
接上電腦,開啟序列埠監控視窗,調整為正確時間。
時間又不準就換電池。
增加緩充時間,提前錄影/延後停止錄影。

歡迎大家 DIY 哦!


補充內容 (2023-6-5 12:50 PM):
2023/6/5 更新在 #7

補充內容 (2023-7-16 09:21 PM):
2023/7/16 更新在 #12

評分

17

查看全部評分

 樓主| 發表於 2023-5-25 04:16:08 | 顯示全部樓層
程式碼如附件,我自己寫的,引用或分享請註明來源。

mod_rec.zip

526.74 KB, 下載次數: 7

評分

2

查看全部評分

發表於 2023-5-26 00:52:55 | 顯示全部樓層
太神了!!
發表於 2023-5-26 12:03:32 | 顯示全部樓層
老闆請問 MOD 503 / 504 / 505 的遙控器是不是同一支
看起來遙控碼跟 MR42 有些不同的

  1. // xiaolaba
  2. // 2018-OCT-28
  3. // MOD, Taiwan CHT OTT service.
  4. // http://mod.cht.com.tw/download/file/mrc42_userguide_www_20141111.pdf

  5. // IR remote control model, MRC42
  6. // MOD IR remote signal, NEC, RAW code 0x7d7dxxxx,
  7. // that is result of LSB first send first of a byte
  8. // ie. 0x7D = 0b0111,1101, send it MSB fisrt, but store LSB first,
  9. // it became  0b1011,1110 = 0xBE

  10. #define MOD_NEC_ADDRESS 0xBEBE00
  11. #define MOD_CH_UP 0x7B
  12. #define MOD_CH_DN 0x7C
  13. #define MOD_POWER 0x70
  14. #define MOD_VOL_UP 0x54
  15. #define MOD_VOL_DN 0x55

  16. //#define MOD_CH_UP 0x0f0f0f0f  ;;test dummy
複製代碼



 樓主| 發表於 2023-5-26 13:20:19 | 顯示全部樓層
本帖最後由 hi80482 於 2023-5-26 01:26 PM 編輯

MOD 遙控器應該都是和舊型 MRC30 相同編碼,同一支沒改。

IRremote 新版本 3.0 以上,編碼經過轉換。
09 // ie. 0x7D = 0b0111,1101, send it MSB fisrt, but store LSB first,
10 // it became  0b1011,1110 = 0xBE
詳細見:GitHub - Arduino-IRremote
How to convert old MSB first 32 bit IR data codes to new LSB first 32 bit IR data codes


MRC52.jpg
以上用電晶體測試器(AVR Transistor Tester)擷取,for IRremote 3.0。
聲音已經學習電視了,我就沒測。
如果機上盒不支援新的頻道上下鍵,再自行抓一下編碼。

我一直沒換成新版本 IRremote,2.8.0 運作良好就不改了。
#2 的附件裡有 IR_Recv 程式,可擷取 RAW code。
非 Arduino Pro Mini ,抓不到編碼的話,修改一下程式裡的 Pin/Port 喔。

評分

1

查看全部評分

 樓主| 發表於 2023-5-26 13:54:50 | 顯示全部樓層
另外補充:

這個 Arduino 遙控器單純是「時間到了發送紅外線訊號」,沒有驗證機制。
非常喜歡的節目,多錄重播比較保險。

不設計傳送開關機訊號,Power 鍵訊號同一個。
在無人的狀況下,沒辦法確定機器到底是開是關。
所以 MOD 機上盒很長時間都開著,電視螢幕關掉省電。
機上盒開久了就 lag,大約二星期重開一次。

遙控失敗率,大約一個月不到一次,平均每天錄三組左右。
失敗的時候,重開機上盒/Arduino 就好。

評分

1

查看全部評分

 樓主| 發表於 2023-6-5 12:49:14 | 顯示全部樓層
2023/6/5 更新:

1. 新版 IRremote,支援 LSB first 編碼
直接安裝最新的 4.x 版本,不用舊的 2.8.0 了。

2. 改善程式,減少記憶體佔用
3. 附轉碼程式 MSB2LSB
我自己寫的,不是網上抓的,請放心使用。


2.jpg


6.jpg


MSB2LSB.jpg

stb.jpg
資料來源:谷哥

NEC.jpg
資料來源:SB-Projects

簡介一下 NEC 的編碼格式,總共 32-bit。
Normal:
8-bit Address
8-bit Address 的補數
8-bit Command
8-bit Command 的補數
以補數檢查資料是否正確。

Extended:
16-bit Address
8-bit Command
8-bit Command 的補數

例一:
MSB first Code:0x807F20DF
807F20DF 分解 → Address 807F,Command 20DF
807F(HEX) = 1000 0000 0111 1111(BIN)
80 = 1000 0000
7F = 0111 1111
7F 等於 80 的補數,為 Normal 格式,
Address = 0x80,
Command = 0x20,DF 為檢查用的補數。
MSB to LSB:
80 = 1000 0000
01 = 0000 0001 (80 的反轉)
20 = 0010 0000
04 = 0000 0100 (20 的反轉)
結果 LSB first Code:
Address 0x01,Command 0x04。

例二:
MSB first Code:0x7D7D04FB
7D7D04FB 分解 → Address 7D7D,Command 04FB
7D7D(HEX) = 0111 1101 0111 1101(BIN)
7D = 0111 1101
82 = 1000 0010
7D 的補數應為 82,此為 Extended 格式,
Address = 0x7D7D (16-bit),
Command = 0x04,FB 為檢查用的補數。
MSB to LSB:
7D7D = 0111 1101 0111 1101
BEBE = 1011 1110 1011 1110 (7D7D 的反轉)
04 = 0000 0100
20 = 0010 0000 (04 的反轉)
結果 LSB first Code:
Address 0xBEBE,Command 0x20。

轉為 LSB first Code 有什麼優點?
可以減少記憶體的使用量。
MSB 佔 32-bit,
LSB 佔 16-bit + 8-bit 或 8-bit + 8-bit,
其中同一支遙控器的 Address 是固定的,
所以實際上用的記憶體會更少。

如何擷取遙控器的 LSB first Code?
1. 附紅外線測試功能的電晶體測試器(AVR Transistor Tester)
2. IRremote 的範例程式 TinyReceiver.ino
路徑:My Documents\Arduino\libraries\IRremote\examples\TinyReceiver
3. 已知 MSB first Code,用轉碼程式 MSB2LSB

遙控器不是 NEC 協定怎麼辦?
1. 參考 IRremote 的範例程式 ReceiveDemo 和 SendDemo
路徑:My Documents\Arduino\libraries\IRremote\examples
2. 谷哥

new.zip

2.17 MB, 下載次數: 9

評分

1

查看全部評分

發表於 2023-6-16 12:35:14 | 顯示全部樓層
hi80482 發表於 2023-6-5 12:49 PM
2023/6/5 更新:

1. 新版 IRremote,支援 LSB first 編碼

有毒?                              
 樓主| 發表於 2023-6-16 13:22:54 | 顯示全部樓層
無毒,我自寫的轉碼程式。
某些防毒軟體對 AutoIt 敏感,無解。
不放心就手動轉換編碼,不要用 MSB2LSB。
發表於 2023-6-16 13:43:00 | 顯示全部樓層
機上盒開久了就 lag 及數據機怕過熱問題 使用不鏽鋼隔熱架 不銹鋼蒸架(選高度5公分),應該有效改善

評分

1

查看全部評分

 樓主| 發表於 2023-6-16 21:41:31 | 顯示全部樓層
種花的機器算是堪用而已,前手不知用了多久。
有問題打 0800-080-123 or 128,請工程師來換機子。
換過好多台,都不是新的,502/503/504,還分 A/B 型。
無法說哪一台絕對比較好,而是換換換,換到好像是好的。
 樓主| 發表於 2023-7-16 21:18:14 | 顯示全部樓層
2023/7/16 更新:

錄影完自動切回首頁再按下,
待機減少佔用網路頻寬。
種花 MOD 50X 系列適用(其他機型沒試過)。

避免未錄影整天播放節目,
切換到首頁+下鍵時,
不會播放廣吉或節目,佔用頻寬少,
數據機及機上盒的指示燈不會狂閃。
感覺機上盒開久了也比較不會 lag,更穩定些。
可能只是心靈馬力啦,
畢竟網速 16M,對於種花網路設備應是綽綽有餘。

不過若是網速不快者,
錄影完不用再關機上盒,
網速也不會下降太多了。

0.jpg
台大測速

1.JPG

2.JPG

0716.zip

2.17 MB, 下載次數: 1

評分

2

查看全部評分

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-4-20 10:28 AM , Processed in 0.075699 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.