查看:
43758
回复: 68 |
光电围棋盘制作总结
|
|||
|
发表于2016-10-31 15:21:55
|
只看该作者
1#
电梯直达
立创君11月7日晚21点插楼提示:该作品已荣获首届立创商城电子制作节二等奖,点我查看6强完整名单。 立创君11月3日晚21点插楼提示:该作品已进入首届立创商城电子制作节15强,点我投票参与公投,选出最终6强!
光电围棋盘制作总结
前言 近年来,围棋运动在青少年中逐渐普及,越来越多的棋院出现在人们的视线中,各种职业和业余的赛事不断举办。选手和棋院都想尽快提高教学水平和比赛成绩。随着计算机的普及,很多地方利用计算机进行教学和比赛。然而,观察实际的教学和比赛过程,我们发现如下特点: 一、选手低龄化。学习围棋的人群主要集中在6-12岁,启蒙阶段的孩子有些还不能掌握电脑的用法,有些会把电脑用于游戏,家长也不赞成孩子们长时间使用电脑、智能手机。 二、选手面对真实的棋盘有所谓“手感”,使用真实棋盘和使用计算机屏幕下棋,注意力和思维活跃程度有较大差别。 三、“复盘”是棋类竞技项目提高水平的重要手段,在教学中,老师如果能经常针对学生下过的棋局进行复盘指导,教学质量能得到较好地提高。有鉴于此,我们决心开发一种具有网络功能的电子棋盘,以解决围棋在教学、比赛中出现的一些困难。 一、目标功能 1、棋局的实时自动录入,记录下棋局的整个过程。 2、棋局的复盘功能,能重现棋局的落子步骤。 3、教学功能,实现围棋术语中死活题,定势等不同走法。 4、比赛功能,选手身份录入(RFID卡读入),比赛计时。 5、网络功能,例如用于赛场实时直播(非视频方式)。 二、设计构思(技术要点难点) 曾经有人设计过用磁性传感器(干簧管或者霍尔传感器)配合磁性棋子实现的电子棋盘,这种棋盘是根据围棋中“黑方先落子,之后轮流落子”的规则来记录棋局。由于不能区分黑白棋子,当遇到提子等情形时会发生误记。有时候,低龄的选手在比赛中会有需要让子的情形,这些情况下,不能正确记录。 针对这些问题,我们首先要解决的问题是区分黑白子。 解决的办法是利用黑白棋子对光线有不同反射率的原理,我们可以对棋子发出一束光,然后利用光敏电阻接收反射光线,光敏电阻的内阻变化可以用ADC转换结果判断。 棋盘的交叉点是棋子放置的地方,容易想到如下结构:
|
|||
|
发表于2016-10-31 15:33:57
|
只看该作者
2#
呵呵,这个好像挺好玩,有趣
|
|||
|
发表于2016-10-31 15:35:30
|
只看该作者
3#
另一个问题,在这种结构下,如何区分外部射入的光(无棋子处)和LED发出的光(有棋子处)。解决的方法是进行两次扫描:首先,所有LED不发光,有棋子的地方无光线,无棋子的地方有自然光射入,这样就先区别出有无棋子。然后,点亮有棋子处的LED,由于自然光被棋子遮挡,可以根据反射强度判断黑白子。 LED的存在使我们有了重现棋局的显示功能,一切问题迎刃而解。
四,硬件系统框图
五、设备雏形(如下图) 六、设备调试 由于比赛准备时间过短,一个月时间要完成全部功能没有可能,因此我们选择实现主要功能: 1、PC端程序 用VB语言写电脑程序,这个过程比较顺利,主要的问题是棋子透明叠加到棋盘上的实现以及网络通信协议,这里用到了UDP广播技术来实现未知PC端的接入。 2、设备端调试 用C语言编写MCU程序。 在提交结果时,我们只够时间调试了ESP8266模块的驱动及和PC端的通信、棋子的黑白子检测,实现了正常和异常情况下的棋局实时录入。 硬件系统设计较为成功,除了忘记引电源开机键引线外,基本一次制版成功。 经测试LED选用红光比较好,由于光敏电阻的光谱灵敏度区间在500-800纳米,选用红光LED有较高的灵敏度。 键盘输入和LCD显示屏驱动未按时完成
|
|||
|
发表于2016-10-31 15:40:51
|
只看该作者
4#
Public x_offer As Long Public y_offer As Long
Private Sub com_load_Click() Dim file_name As String top_status = "load" CommonDialog1.Filter = "*.chs" CommonDialog1.ShowOpen file_name = CommonDialog1.FileName Open file_name For Random As #1 Len = 23 restore_chess_max = LOF(1) / 23 For i = 0 To restore_chess_max - 1 Get #1, i + 1, chess_record(i) Next i Close #1
restore_chess_step = 0 Timer_restore.Interval = 1000 Timer_restore.Enabled = True End Sub
Private Sub com_match_Click() top_status = "ready" chess_record_num = 0 For x = 0 To 18 For y = 0 To 18 chess_real(x, y) = Asc("N") Next y Next x chess_refresh End Sub
Private Sub com_save_Click() Dim i As Integer i = Len(chess_record(0)) CommonDialog1.Filter = "*.chs" CommonDialog1.ShowSave file_name = CommonDialog1.FileName Open file_name For Random As #1 Len = 23 For i = 0 To chess_record_num Put #1, i + 1, chess_record(i) Next i Close #1 MsgBox "当前棋局" + file_name + "保存成功!", vbOKOnly, "提示" End Sub
Private Sub com_sh_Click() top_status = "sh" End Sub
Private Sub Command1_Click()
Picture1.FillColor = vbBlack
Dim i As Byte Dim j As Byte
Picture1.Cls
For i = 0 To 18 For j = 0 To 18 Picture1.Circle (360 + x_offer * j, 380 + y_offer * i), 220, vbBlack ExtFloodFill Picture1.hdc, 9234, 380, vbBlack, FLOODFILLBORDER Next j Next i End Sub
Public Sub chess_refresh() Dim i As Byte Dim j As Byte Picture1.FillColor = vbBlack
Picture1.Cls For i = 0 To 18 For j = 0 To 18 If chess_real(j, i) = Asc("W") Then Picture1.FillColor = vbWhite Picture1.Circle (360 + x_offer * j, 380 + y_offer * i), 220, vbBlack ExtFloodFill Picture1.hdc, 9234, 380, vbBlack, FLOODFILLBORDER End If If chess_real(j, i) = Asc("B") Then Picture1.FillColor = vbBlack Picture1.Circle (360 + x_offer * j, 380 + y_offer * i), 220, vbBlack ExtFloodFill Picture1.hdc, 9234, 380, vbBlack, FLOODFILLBORDER End If Next j Next i End Sub
Private Sub Command2_Click() chess_real(1, 5) = Asc("W") chess_real(10, 5) = Asc("B") chess_real(1, 9) = Asc("W") chess_real(10, 10) = Asc("B") chess_real(15, 13) = Asc("W") chess_real(13, 15) = Asc("B") chess_refresh End Sub
Private Sub Form_Load() x_offer = 494 y_offer = 519 top_status = "ready" chess_record_num = 0 Label1.Caption = "状态:未连接" WKUDP.Bind 10080, WKTCP.LocalIP WKTCP.Close WKTCP.LocalPort = 10081 WKTCP.Listen End Sub
Private Sub Timer_restore_Timer() Dim s As String Dim i As Integer Dim j As Integer Dim k As Integer Dim n As Integer Dim x As Byte Dim y As Byte Dim col As String Dim com As String s = chess_record(restore_chess_step) i = InStr(s, "com=") j = InStr(s, "x=") k = InStr(s, "y=") n = InStr(s, "col=") If i <> 0 And j <> 0 And k <> 0 And n <> 0 Then com = Mid(s, i + 4, 3) x = CByte(Mid(s, j + 2, 2)) y = CByte(Mid(s, k + 2, 2)) col = Mid(s, n + 4) If com = "add" Then '加入新棋子 chess_real(x, y) = Asc(col) End If If com = "del" Then '提子 chess_real(x, y) = Asc("N") End If If com = "new" Then '开始新棋局 For x = 0 To 18 For y = 0 To 18 chess_real(x, y) = Asc("N") Next y Next x End If chess_refresh End If restore_chess_step = restore_chess_step + 1 If restore_chess_step = restore_chess_max Then Timer_restore.Enabled = False MsgBox "复盘结束!", vbOKOnly, "提示" End If End Sub
Private Sub WKTCP_Close() WKTCP.Close While WKTCP.State <> sckClosed DoEvents Wend WKTCP.LocalPort = 10081 WKTCP.Listen Label1.Caption = "状态:未连接" End Sub
Private Sub WKTCP_ConnectionRequest(ByVal requestID As Long) If WKTCP.State <> sckClosed Then WKTCP.Close WKTCP.Accept requestID Label1.Caption = "状态:已连接" End If End Sub
Private Sub WKTCP_DataArrival(ByVal bytesTotal As Long) Dim s As String Dim i As Integer Dim j As Integer Dim k As Integer Dim n As Integer Dim x As Byte Dim y As Byte Dim col As String Dim com As String WKTCP.GetData s, vbString If (top_status <> "rec") And (top_status <> "ready") Then Exit Sub End If i = InStr(s, "com=") j = InStr(s, "x=") k = InStr(s, "y=") n = InStr(s, "col=") If i <> 0 And j <> 0 And k <> 0 And n <> 0 Then com = Mid(s, i + 4, 3) x = CByte(Mid(s, j + 2, 2)) y = CByte(Mid(s, k + 2, 2)) col = Mid(s, n + 4) If (com = "add") And (top_status = "rec") Then '加入新棋子 chess_record_num = chess_record_num + 1 chess_real(x, y) = Asc(col) End If |
|||
|
发表于2016-10-31 15:42:02
|
只看该作者
5#
If (com = "del") And (top_status = "rec") Then '提子 chess_record_num = chess_record_num + 1 chess_real(x, y) = Asc("N") End If If com = "new" Then '开始新棋局 top_status = "rec" chess_record_num = 0 For x = 0 To 18 For y = 0 To 18 chess_real(x, y) = Asc("N") Next y Next x End If WKTCP.SendData "ok" chess_refresh chess_record(chess_record_num) = s Else WKTCP.SendData "err" End If End Sub
Private Sub WKUDP_DataArrival(ByVal bytesTotal As Long) Dim s As String Dim s_tx As String WKUDP.GetData s, vbString If s = "chess sever ip?" Then WKUDP_TX.RemoteHost = WKUDP.RemoteHostIP WKUDP_TX.RemotePort = WKUDP.RemotePort s_tx = "chess_sever:" + Chr(34) + WKTCP.LocalIP + Chr(34) + "," + CStr(WKTCP.LocalPort) + "<" WKUDP_TX.SendData s_tx End If En 附件6是部分扫描端代码截图 #include "stml15x.h" #include "init.h" #include "user_define.h"
u8 history[19][19]; u8 current[19][19]; u8 manual[1000][2]; u8 chess_step;
void var_init(void) {
}
u8 chess_check(u8 px,u8 py,u8 led_on) { u16 delay; switch(px) { case 0: S0_H; if(led_on!=0) LED0_L; else LED0_H; break; case 1: S1_H; if(led_on!=0) LED1_L; else LED1_H; break; case 2: S2_H; if(led_on!=0) LED2_L; else LED2_H; break; case 3: S3_H; if(led_on!=0) LED3_L; else LED3_H; break; case 4: S4_H; if(led_on!=0) LED4_L; else LED4_H; break; case 5: S5_H; if(led_on!=0) LED5_L; else LED5_H; break; case 6: S6_H; if(led_on!=0) LED6_L; else LED6_H; break; case 7: S7_H; if(led_on!=0) LED7_L; else LED7_H; break; case 8: S8_H; if(led_on!=0) LED8_L; else LED8_H; break; case 9: S9_H; if(led_on!=0) LED9_L; else LED9_H; break; case 10: S10_H; if(led_on!=0) LED10_L; else LED10_H; break; case 11: S11_H; if(led_on!=0) LED11_L; else LED11_H; break; case 12: S12_H; if(led_on!=0) LED12_L; else LED12_H; break; case 13: S13_H; if(led_on!=0) LED13_L; else LED13_H; break; case 14: S14_H; if(led_on!=0) LED14_L; else LED14_H; break; case 15: S15_H; if(led_on!=0) LED15_L; else LED15_H; break; case 16: S16_H; if(led_on!=0) LED16_L; else LED16_H; break; case 17: S17_H; if(led_on!=0) LED17_L; else LED17_H; break; case 18: S18_H; if(led_on!=0) LED18_L; else LED18_H; break; default: break; } ADC1->CR3=py; d Sub |
|||
|
发表于2016-10-31 15:43:48
|
只看该作者
6#
if(led_on!=0) { for(delay=0;delay<30000;delay++); //30ms } ADC1->CR1=0x43; //8bit adc start while((ADC1->SR&0x1)==0); ADC1->SR&=0xfe; //clr EOC if(led_on==0) { if(ADC1->DRL>DARK_THREAHOLD) temp_return=1; else temp_return=0; } else { if(ADC1->DRL>BW_THREAHOLD) temp_return=1; else temp_return=0; }
GPIOE->ODR=0; GPIOG->ODR=0; GPIOH->ODR=0;
GPIOF->ODR=0xFF; GPIOA->ODR|=0x8B; GPIOC->ODR|=0x60; S18_H; return(temp_return); }
#define BH_THREAHOLD 0x80 //黑子高门限 #define BL_THREAHOLD 0x80 //黑子低门限 #define WH_THREAHOLD 0x80 //白子高门限 #define WL_THREAHOLD 0x80 //白子低门限
u8 chessboard_scan(void) //返回0 无改变 返回1 { u8 x; u8 y; u8 result; //扫描棋盘 for(x=0;x<19;x++) { for(y=0;y<19;y++) { result=chess_check(x,y,0); if(result>DARK_THREAHOLD) { current[x][y]=0; //none } else { result=chess_check(x,y,1); current[x][y]=3; //非法棋子 if((result>WL_THREAHOLD)&&(result>WH_THREAHOLD)) { current[x][y]=1; //白子 } if((result>BL_THREAHOLD)&&(result>BH_THREAHOLD)) { current[x][y]=1; //黑子 } if(current[x][y]==3) //非法 } } } //新加子和提子检查 for(x=0;x<19;x++) { for(y=0;y<19;y++) { if(history[x][y]!=current[x][y]) {
} } } }
void new_march(void) //新的棋局 { u8 i; u8 j; chess_step=0; for(i=0;i<19;i++) { for(j=0;j<19;j++) { history[i][j]=0; current[i][j]=0; } }
GPIOE->ODR=0; GPIOG->ODR=0; GPIOH->ODR=0;
GPIOF->ODR=0xFF; GPIOA->ODR|=0x8B; GPIOC->ODR|=0x60; S18_H; //检查棋子清空情况
}
main() { u8 x; u8 y; Init_Device(); var_init();
while(1) { for(x=0;x<19;x++;) { for(y=0;y<19;y++) {
} }
} } 学生党,苦哈哈交作业。晚上附实物图。。 |
|||
|
发表于2016-10-31 15:50:55
|
只看该作者
7#
物料BOM Bill of Material for PCB1.PCB On 2016/10/15 星期一 at 下午 3:45:04Comment Pattern Quantity Components ------------------------------------------------------------------------------ COMMONL-UU9.8 1 L1 IDC30 8 J1, J1_1, J1_1_1, J1_2, JP5 JP6, JP7, JP8 LED3MM 400 R1_1, R1_1_1, R1_1_1_1 PB12550 5 K1, K2, K3, K4, K5 PWR384*3 1 JP1 RB.2/.4 1 SP1 SIP4 2 JP4, JP9 0.1u 0805 2 C26, C27 0.1u 1206 5 C1, C3, C4, C10, C21 0.1uJ630V RAD-0.6 2 C6, C7 0.22/0.5W 1812 1 R15 1.2M 0805 5 R45, R46, R47, R48, R49 1000n 0805 1 C16 100n 0805 5 C5, C13, C31, C32, C33 100u/50V 2220 1 C12 10k 0805 22 R16, R17, R18, R26, R27, R28 R29, R30, R31, R32, R33, R34 R35, R36, R37, R38, R39, R40 R41, R42, R43, R44 10u/450V RB.3/.6 1 C8 120 0805 2 R13, R14 120K 0805 1 R24 15K 0805 3 R3, R5, R20 16M XTAL1 1 X1 1K 0805 3 R2, R10, R11 1N4007 DO-214 5 D2, D3, D4, D5, D6 1N4148 0805 401 D1, D1_1, D1_1_1, D1_1_1_1 1u 0805 3 C2, C17, C30 2.2 0805 3 R21, R22, R23 |
|||
|
发表于2016-10-31 15:51:01
|
只看该作者
8#
2.2n 630V RAD0.2 1 C11
2.2n 1206 1 C9 2.2u 0805 1 C23 2.2uH 2220 1 L3 200 0805 19 R51, R52, R53, R54, R55, R56 R57, R58, R59, R60, R61, R62 R63, R64, R65, R66, R67, R68 R69 200K 1210 1 R8 220n 0805 1 C14 22P 0805 1 C19 22u/10V 2220 2 C18, C20 22uH 2220 1 L2 2K 0805 1 R25 3.3V 0805 1 D8 30K 0805 2 R4, R6 470k axial0.4 1 R7 47P 0805 2 C22, C24 47u/16V 2220 1 C15 5.1K 0805 1 R12 50k 0805 1 R19 680 0805 1 R9 74ABT04 NXP-TSSOP14 1 IC5 8550 SOT-23 1 Q4 86T:10T EE28-5*5 1 T1 9014 SOT-23 1 Q3 ANT SIP2 1 JP2 AO3407 SOT-23 2 Q1, Q2 APW7323 SO8P 1 IC3 BAT PWR384*3 1 JP3 CN3781 SSOP10X 1 IC2 EL817 SOP-4 1 IC9 FUSE1 FUSE-BOX 1 F1 GREEN 0805 1 LED2 JXL1.77 JXL4542 1 IC7 LMV358 SO-8 1 IC4 NTC30D-20 AXIAL0.3 1 R1 RED 0805 1 LED1 RED LED3MM 400 LED1_1, LED1_1_1, LED1_1_1_1 SS34 DO-214 5 D7, D9, D10, D11, D12 STM8L151M8T6 LQFP80 1 IC8 STM8S105C6T6 LQFP-48 1 IC6 TNY264 SOP-8 1 IC1 WIFI_MODULE SO-22 1 M1 锂电池供电,无线传输,剩下的记子记数,复盘就由电脑程序完成了!打完收工。 |
|||
|
发表于2016-10-31 17:08:19
|
只看该作者
9#
比赛可以用啊
|
|||
|
发表于2016-10-31 19:40:39
|
只看该作者
10#
补交产品实物图
|
|||
|
发表于2016-11-01 09:25:17
|
只看该作者
11#
这个成本好高呀,这么高光敏电阻
|
|||
|
发表于2016-11-01 20:06:02
|
只看该作者
12#
因为弟弟是业余组蛮高级别的选手,在搞这个的时候主要考虑的还是用于比赛和教学用,如果实现的话在比赛的时候可以节约很多的人力和减少不少的错误。
|
|||
|
发表于2016-11-03 02:03:27
|
只看该作者
13#
|
|||
|
发表于2016-11-03 02:05:04
|
只看该作者
14#
弟弟说手感和常规围棋没区别。 |
|||
|
发表于2016-11-03 17:33:41
|
只看该作者
15#
给力啊,这个。 真的实现了嘛? 1、棋局的实时自动录入,记录下棋局的整个过程。 2、棋局的复盘功能,能重现棋局的落子步骤。 |
|||
|
发表于2016-11-03 18:50:13
|
只看该作者
16#
楼主这个设计趣味性不错,也还有一定的商业价值。区分黑白棋子的方法很巧妙,也应该很实用。你这个目标功能2的复盘是指在上位机软件上实现吗? 其它几个功能看起都还挺有价值的,不过楼主貌似只完成了基本的棋子录入啊,后面的希望能够加油做完。 最后想问下,提子这功能实现,应该需要MCU每次都对棋盘进行全面扫描,这么多的落棋位置需要用ADC逐个扫描,而对于每个落点的检测,都一般需要多次ADC转换求平均值,这类似的方法。即便ADC转换频率很高,我想一次全面扫描也需要不少时间吧。不知道这是否会影响到棋盘的刷新频率。也因为你贴出的图太小了,看不清楚到底是怎么接入的。不知楼主是否可以解答下,谢谢。 |
|||
|
发表于2016-11-03 20:15:46
|
只看该作者
17#
呵呵,可以换VB.net了!
|
|||
|
发表于2016-11-03 21:20:26
|
只看该作者
18#
谢谢您的关注,有兴趣可以讨论,您提到的不是难点,提子的时候扫描不需要分辨黑白子,只 需要判断有无子,所以不需要太多次积分。
|
|||
|
发表于2016-11-03 21:26:01
|
只看该作者
19#
黑猫白猫,抓到耗子的才是好猫,演示程序当然用简单方法做
|
|||
|
发表于2016-11-03 21:35:27
|
只看该作者
20#
光源和光敏电阻的匹配没有完全调好,之前没仔细查响应曲线,以为白光好。细心的可能看到 演示时白子的后面贴有东西,这是因为上层透光材料选择有问题。做好一个东西不易,独创一个更不容易
|
|||
|
发表于2016-11-03 21:42:24
|
只看该作者
22#
还有既然您问到了这亇问题,说明您仔细阅读了文档,是同道中人, 这个从比赛开始设计到现在已经成型,正申请专利,所以不做太多讨论,如 果有兴趣可次共同研究象棋
|
|||
|
发表于2016-11-03 21:53:33
|
只看该作者
23#
复盘可以在棋盘上做,不需要电脑,如果不是为了棋赛,根本不用电脑,这也是核心价值之一,如果不是为了重现,大可用摄像头做二值判断,就不用那么多硬件了
|
|||
|
发表于2016-11-03 22:06:01
|
只看该作者
24#
问一下关注这个设计的朋友,网络部分编程很难吗.舅舅说写出来容易,要稳定运行难,需要做 许多冗余,是这样吗
|
|||
|
发表于2016-11-03 22:58:50
|
只看该作者
25#
厉害,挺有趣的!1
|
|||
|
发表于2016-11-04 11:00:31
|
只看该作者
26#
1、棋局的实时自动录入,记录下棋局的整个过程。2、棋局的复盘功能,能重现棋局的落子步骤。
这二项棋盘功能都能实现的话,应该是不错的产品,能批量生产吧,我来帮你代理销售! |
|||
|
发表于2016-11-04 11:08:00
|
只看该作者
27#
牛,实现了这二个功能,给力 1、棋局的实时自动录入,记录下棋局的整个过程。 2、棋局的复盘功能,能重现棋局的落子步骤。 |
|||
|
发表于2016-11-04 14:44:20
|
只看该作者
28#
很不错的作品,对于围棋的教学和比赛都很实用,对专业围棋人员也是很好的工具,尤其对很少用电脑但热爱围棋的老人和小孩来说非常不错。
|
|||
|
发表于2016-11-04 16:37:20
|
只看该作者
29#
也是,提子不需要进行颜色检测。只需要对有棋子的地方进行颜色检测即可。我就抱着欣赏和学习的眼光来看看各位的作品做的是什么,怎么做的。楼主这个确实有商业价值,其它地方也确实还没看到类似的。 一般没接触过相关的,还真没这种设计想法。你这个设计的复盘应该是指自动复盘,这个在棋盘上怎么实现呢?没看到设计里有说有移动棋子的结构哦 |
|||
|
发表于2016-11-04 16:39:52
|
只看该作者
30#
网络部分的编程,确实是做稳定不容易。这种wifi芯片我没用过,但有线以太网接口协议芯片接触过,要做稳定还是需要一定功底和耐心的哦
|
|||
|
发表于2016-11-04 16:48:11
|
只看该作者
31#
嗐,在下一个应该落子的交点闪烁不就得了,不成还做个机械臂不成 赶快投我一票呀,老大 |
|||
|
发表于2016-11-04 17:08:57
|
只看该作者
32#
那么多来看的,都不投我票,意见也不留一句,难道我的作品不好,不实用? 不投我票,我不讲关键点,让你们看也白看
|
|||
|
发表于2016-11-05 11:08:50
|
只看该作者
33#
这个成本很高吧。 |
|||
|
发表于2016-11-05 20:32:54
|
只看该作者
34#
|
|||
|
发表于2016-11-05 20:45:38
|
只看该作者
35#
是否可以通过原有的发光元件变色进行复盘,加上面板透光孔位置做半透明处理,增强视觉效果
|
|||
|
发表于2016-11-06 12:36:25
|
只看该作者
36#
谢谢支持,这个想法在后续产品完善中考虑进去.
|
|||
|
发表于2016-11-06 17:09:54
|
只看该作者
37#
用光敏会不会受外届的环境光影响?用红外会不会更好点? |
|||
|
发表于2016-11-06 17:42:51
|
只看该作者
38#
仔细读一读这个设计的原理,你的问题正是这个设计的精彩之处
|
|||
|
发表于2016-11-07 13:06:21
|
只看该作者
40#
问得好,谢谢,不过你没领会这个设计,你提的这几个问题的解决方案在设计中已体现,这个设计中是隐含了一个不容易克服的问题,如果你能找出来,我们愿意公开讨论
|
|||
|
发表于2016-11-07 13:29:40
|
只看该作者
41#
用红光照射也没有问题?分成两半,一半有一半没有也能行?
|
|||
|
发表于2016-11-07 13:39:09
|
只看该作者
42#
你要愿意在紫外灯下边下棋边消毒,那我承认这个是失败的,你可以自已去查光敏电阻的光谱响应
|
|||
|
发表于2016-11-07 13:46:56
|
只看该作者
43#
我只是想说,环境光是各种各样的,有些光颜色很复杂。特别是接近红色的光。 不排除有些红色的光,在特定环境中,这些光不闪烁,并不影响人。 你不能给人家说,你不能用红光照,也不能闪几下红光吧!很多都是意外。虽然少,但不排除。这是要考虑的! 从产品角度来说,我想这种不确定,还是不容易让人接受! |
|||
|
发表于2016-11-07 14:32:52
|
只看该作者
44#
感谢您的意见,这个问题在设计中已充分考虑,变采样速率,积分,动态门限。另外原理上已避免了这个问题。这个作品虽然是因为比赛而创作出来的,但我们已经决定把它产品化,所以主功能部分是严格测试的,如果只是做一个玩具,我想我们不至于要花半个多月来干这个事儿。具体讲,由于光敏电阻对远红外光还有一定的响应,但远红外光经过透光窗口时会有很大衰减,影响不大
|
|||
|
发表于2016-11-08 11:51:56
|
只看该作者
45#
直接用摄像头,然后配合WIFI上传抓拍照片到PC端,用PC端软件进行OCR处理,白棋黑棋都知道,放置到哪里也知道,这是低成本模式,而且也最广泛使用,我又漏了
|
|||
|
发表于2016-11-08 11:58:37
|
只看该作者
46#
1.初始化,从图像获取棋盘位置,校准软件棋盘尺寸; 2.下棋,手势离开后,2张图片不一致的地方即为棋子刚放置的区域,拍下来,区别棋子颜色,接着计算棋子; |
|||
|
发表于2016-11-08 12:29:07
|
只看该作者
47#
谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有问题,比如用摄像头,放在棋盘下方,你的视角不够,放在棋盘上方,你要立支柱,坚固性怎么解决 复盘的显示如何解决?再放一个运动激光头? 纸面上的主意大把,关键是去做。
|
|||
|
发表于2016-11-08 12:29:31
|
只看该作者
48#
呵呵,你这个啥都不用做了!就写软件了!至少我更相信你这个,图像的特性更多。 其本质也是光反射原理。只是点更多。厉害的连物体形状都能识别。是不是现在的棋盘就是这样干的??? |
|||
|
发表于2016-11-08 12:34:06
|
只看该作者
49#
距离不是问题,方向这些都不是问题,只要有足够的参考点。能看清楚就能处理。二维码那么小。都能识别。 很多二维码的密集成度,远高于棋盘,斜着也能识别。
|
|||
|
发表于2016-11-08 12:46:30
|
只看该作者
50#
实际上,还有些初入门者不切实际,以为Wifi传输很快,在这里普及一下。 Usb,PcI接囗的wifi模块传输速率很快,但是本身造价很高,加上配合的微处理器,七八十吧 不要和我说两家串口wifi.我使用sDk改成了SP|模式也不到一百K字节速率,还经常发不出去。 这东西勉强有wifi的功能而已,厂家也只定义为物联网中小数据节点,传即时图片,视频,请放弃 吧。
|
|||
|
发表于2016-11-08 12:50:28
|
只看该作者
51#
既然都不是问题,做一个嘛,知道鱼眼摄像头的最大视角是多少吗?知道大张角摄像头边缘分辩率是多少吗?
|
|||
|
发表于2016-11-08 13:07:35
|
只看该作者
53#
孩子回去上学了,这几天我代为回复,事实上从事开发工作需要经验,需要知识,更需要创意。 新的实现方式,新的电路结构是值得鼓励的,之所以在这里展示,是因为孩子的这种创新思维, 如果为了那点奖金,我大可以像其他人一样把成熟产品放在这里。 做人要讲诚信,设计比赛就是要从创意到完成都在规定时间内去做,这才是能力
|
|||
|
发表于2016-11-08 13:26:02
|
只看该作者
54#
各位看官,本人工作比较忙,这个帖子以后不再回复,也不再参加下一届比赛,这个作品已为孩子申请专利。后续有对此作品或者对电子技术感兴趣的朋友请加QQ945369482.请加注电子爱好者字样
|
|