查看: 41006
回复: 68
光电围棋盘制作总结
二疼
2
主题
41
回复
发表于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转换结果判断。

棋盘的交叉点是棋子放置的地方,容易想到如下结构:



ChessWorld
36
主题
820
回复
发表于2016-10-31 15:33:57   |  只看该作者
2#
呵呵,这个好像挺好玩,有趣
二疼
2
主题
41
回复
发表于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显示屏驱动未按时完成









二疼
2
主题
41
回复
发表于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

二疼
2
主题
41
回复
发表于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


二疼
2
主题
41
回复
发表于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++)

           {                            

                                  

                                                

                                                

                                  }

               }  

             

     }

}


学生党,苦哈哈交作业。晚上附实物图。。


二疼
2
主题
41
回复
发表于2016-10-31 15:50:55   |  只看该作者
7#

物料BOM

Bill of Material for PCB1.PCB

On 2016/10/15 星期一 at 下午 3:45:04

 Comment             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                                     
 
二疼
2
主题
41
回复
发表于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                                                

锂电池供电,无线传输,剩下的记子记数,复盘就由电脑程序完成了!打完收工。


谁没穿裤子
10
主题
258
回复
发表于2016-10-31 17:08:19   |  只看该作者
9#
比赛可以用啊
工号:8888
二疼
2
主题
41
回复
发表于2016-10-31 19:40:39   |  只看该作者
10#
补交产品实物图
智易捷物联
8
主题
353
回复
发表于2016-11-01 09:25:17   |  只看该作者
11#
这个成本好高呀,这么高光敏电阻
二疼
2
主题
41
回复
发表于2016-11-01 20:06:02   |  只看该作者
12#
因为弟弟是业余组蛮高级别的选手,在搞这个的时候主要考虑的还是用于比赛和教学用,如果实现的话在比赛的时候可以节约很多的人力和减少不少的错误。
二疼
2
主题
41
回复
发表于2016-11-03 02:03:27   |  只看该作者
13#
ChessWorld 发表于2016-10-31 15:33:57  2# 呵呵,这个好像挺好玩,有趣
二疼
2
主题
41
回复
发表于2016-11-03 02:05:04   |  只看该作者
14#
二疼 发表于2016-11-03 02:03:27  13#

弟弟说手感和常规围棋没区别。

Lz良
0
主题
9
回复
发表于2016-11-03 17:33:41   |  只看该作者
15#

给力啊,这个。


真的实现了嘛?

1、棋局的实时自动录入,记录下棋局的整个过程。

2、棋局的复盘功能,能重现棋局的落子步骤。

MiaoKo
4
主题
94
回复
发表于2016-11-03 18:50:13   |  只看该作者
16#

楼主这个设计趣味性不错,也还有一定的商业价值。区分黑白棋子的方法很巧妙,也应该很实用。你这个目标功能2的复盘是指在上位机软件上实现吗?

其它几个功能看起都还挺有价值的,不过楼主貌似只完成了基本的棋子录入啊,后面的希望能够加油做完。

最后想问下,提子这功能实现,应该需要MCU每次都对棋盘进行全面扫描,这么多的落棋位置需要用ADC逐个扫描,而对于每个落点的检测,都一般需要多次ADC转换求平均值,这类似的方法。即便ADC转换频率很高,我想一次全面扫描也需要不少时间吧。不知道这是否会影响到棋盘的刷新频率。也因为你贴出的图太小了,看不清楚到底是怎么接入的。不知楼主是否可以解答下,谢谢。

红尘客
29
主题
4308
回复
发表于2016-11-03 20:15:46   |  只看该作者
17#
呵呵,可以换VB.net了!
二疼
2
主题
41
回复
发表于2016-11-03 21:20:26   |  只看该作者
18#
MiaoKo 发表于2016-11-03 18:50:13  16# 楼主这个设计趣味性不错,也还有一定的商业价值。区分黑白棋子的方法很巧妙,也应该很实用。你这个目标功能2的复盘是指在上位机...
谢谢您的关注,有兴趣可以讨论,您提到的不是难点,提子的时候扫描不需要分辨黑白子,只 需要判断有无子,所以不需要太多次积分。
二疼
2
主题
41
回复
发表于2016-11-03 21:26:01   |  只看该作者
19#
红尘客 发表于2016-11-03 20:15:46  17# 呵呵,可以换VB.net了!
黑猫白猫,抓到耗子的才是好猫,演示程序当然用简单方法做
二疼
2
主题
41
回复
发表于2016-11-03 21:35:27   |  只看该作者
20#
Lz良 发表于2016-11-03 17:33:41  15# 给力啊,这个。真的实现了嘛?1、棋局的实时自动录入,记录下棋局的整个过程。2、棋局的复盘功能,能重现棋局的落子步骤。
光源和光敏电阻的匹配没有完全调好,之前没仔细查响应曲线,以为白光好。细心的可能看到 演示时白子的后面贴有东西,这是因为上层透光材料选择有问题。做好一个东西不易,独创一个更不容易
二疼
2
主题
41
回复
发表于2016-11-03 21:42:24   |  只看该作者
22#
MiaoKo 发表于2016-11-03 18:50:13  16# 楼主这个设计趣味性不错,也还有一定的商业价值。区分黑白棋子的方法很巧妙,也应该很实用。你这个目标功能2的复盘是指在上位机...
还有既然您问到了这亇问题,说明您仔细阅读了文档,是同道中人, 这个从比赛开始设计到现在已经成型,正申请专利,所以不做太多讨论,如 果有兴趣可次共同研究象棋
二疼
2
主题
41
回复
发表于2016-11-03 21:53:33   |  只看该作者
23#
MiaoKo 发表于2016-11-03 18:50:13  16# 楼主这个设计趣味性不错,也还有一定的商业价值。区分黑白棋子的方法很巧妙,也应该很实用。你这个目标功能2的复盘是指在上位机...
复盘可以在棋盘上做,不需要电脑,如果不是为了棋赛,根本不用电脑,这也是核心价值之一,如果不是为了重现,大可用摄像头做二值判断,就不用那么多硬件了
二疼
2
主题
41
回复
发表于2016-11-03 22:06:01   |  只看该作者
24#
问一下关注这个设计的朋友,网络部分编程很难吗.舅舅说写出来容易,要稳定运行难,需要做 许多冗余,是这样吗
老人智能手表
1
主题
4
回复
发表于2016-11-03 22:58:50   |  只看该作者
25#
厉害,挺有趣的!1
阳阳得亿
0
主题
2
回复
发表于2016-11-04 11:00:31   |  只看该作者
26#
1、棋局的实时自动录入,记录下棋局的整个过程。2、棋局的复盘功能,能重现棋局的落子步骤。
这二项棋盘功能都能实现的话,应该是不错的产品,能批量生产吧,我来帮你代理销售!
佳嘉
0
主题
2
回复
发表于2016-11-04 11:08:00   |  只看该作者
27#

牛,实现了这二个功能,给力

1、棋局的实时自动录入,记录下棋局的整个过程。

2、棋局的复盘功能,能重现棋局的落子步骤。

TFAD
0
主题
1
回复
发表于2016-11-04 14:44:20   |  只看该作者
28#
很不错的作品,对于围棋的教学和比赛都很实用,对专业围棋人员也是很好的工具,尤其对很少用电脑但热爱围棋的老人和小孩来说非常不错。
MiaoKo
4
主题
94
回复
发表于2016-11-04 16:37:20   |  只看该作者
29#
二疼 发表于2016-11-03 21:42:24  22# 还有既然您问到了这亇问题,说明您仔细阅读了文档,是同道中人,这个从比赛开始设计到现在已经成型,正申请专利,所以不做太多讨...

也是,提子不需要进行颜色检测。只需要对有棋子的地方进行颜色检测即可。我就抱着欣赏和学习的眼光来看看各位的作品做的是什么,怎么做的。楼主这个确实有商业价值,其它地方也确实还没看到类似的。

一般没接触过相关的,还真没这种设计想法。你这个设计的复盘应该是指自动复盘,这个在棋盘上怎么实现呢?没看到设计里有说有移动棋子的结构哦

MiaoKo
4
主题
94
回复
发表于2016-11-04 16:39:52   |  只看该作者
30#
二疼 发表于2016-11-03 22:06:01  24# 问一下关注这个设计的朋友,网络部分编程很难吗.舅舅说写出来容易,要稳定运行难,需要做许多冗余,是这样吗
网络部分的编程,确实是做稳定不容易。这种wifi芯片我没用过,但有线以太网接口协议芯片接触过,要做稳定还是需要一定功底和耐心的哦
二疼
2
主题
41
回复
发表于2016-11-04 16:48:11   |  只看该作者
31#
MiaoKo 发表于2016-11-04 16:37:20  29# 也是,提子不需要进行颜色检测。只需要对有棋子的地方进行颜色检测即可。我就抱着欣赏和学习的眼光来看看各位的作品做的是什么,...

嗐,在下一个应该落子的交点闪烁不就得了,不成还做个机械臂不成

赶快投我一票呀,老大

二疼
2
主题
41
回复
发表于2016-11-04 17:08:57   |  只看该作者
32#
那么多来看的,都不投我票,意见也不留一句,难道我的作品不好,不实用? 不投我票,我不讲关键点,让你们看也白看
长空
3
主题
43
回复
发表于2016-11-05 11:08:50   |  只看该作者
33#

这个成本很高吧。

握资基所德
0
主题
1
回复
发表于2016-11-05 20:32:54   |  只看该作者
34#
沉沙
0
主题
1
回复
发表于2016-11-05 20:45:38   |  只看该作者
35#
是否可以通过原有的发光元件变色进行复盘,加上面板透光孔位置做半透明处理,增强视觉效果
二疼
2
主题
41
回复
发表于2016-11-06 12:36:25   |  只看该作者
36#
沉沙 发表于2016-11-05 20:45:38  35# 是否可以通过原有的发光元件变色进行复盘,加上面板透光孔位置做半透明处理,增强视觉效果
谢谢支持,这个想法在后续产品完善中考虑进去.
宏景
5
主题
20
回复
发表于2016-11-06 17:09:54   |  只看该作者
37#

用光敏会不会受外届的环境光影响?用红外会不会更好点?


深海
1
主题
9
回复
发表于2016-11-06 17:42:51   |  只看该作者
38#
宏景 发表于2016-11-06 17:09:54  37# 用光敏会不会受外届的环境光影响?用红外会不会更好点?
仔细读一读这个设计的原理,你的问题正是这个设计的精彩之处
二疼
2
主题
41
回复
发表于2016-11-07 13:06:21   |  只看该作者
40#
红尘客 发表于2016-11-07 11:08:21  39# 该回复已被删除。
问得好,谢谢,不过你没领会这个设计,你提的这几个问题的解决方案在设计中已体现,这个设计中是隐含了一个不容易克服的问题,如果你能找出来,我们愿意公开讨论
红尘客
29
主题
4308
回复
发表于2016-11-07 13:29:40   |  只看该作者
41#
用红光照射也没有问题?分成两半,一半有一半没有也能行?
二疼
2
主题
41
回复
发表于2016-11-07 13:39:09   |  只看该作者
42#
红尘客 发表于2016-11-07 13:29:40  41# 用红光照射也没有问题?分成两半,一半有一半没有也能行?
你要愿意在紫外灯下边下棋边消毒,那我承认这个是失败的,你可以自已去查光敏电阻的光谱响应
红尘客
29
主题
4308
回复
发表于2016-11-07 13:46:56   |  只看该作者
43#
二疼 发表于2016-11-07 13:39:09  42# 你要愿意在紫外灯下边下棋边消毒,那我承认这个是失败的,你可以自已去查光敏电阻的光谱响应

我只是想说,环境光是各种各样的,有些光颜色很复杂。特别是接近红色的光。

不排除有些红色的光,在特定环境中,这些光不闪烁,并不影响人。

你不能给人家说,你不能用红光照,也不能闪几下红光吧!很多都是意外。虽然少,但不排除。这是要考虑的!

从产品角度来说,我想这种不确定,还是不容易让人接受!

二疼
2
主题
41
回复
发表于2016-11-07 14:32:52   |  只看该作者
44#
红尘客 发表于2016-11-07 13:46:56  43# 我只是想说,环境光是各种各样的,有些光颜色很复杂。特别是接近红色的光。不排除有些红色的光,在特定环境中,这些光不闪烁,并...
感谢您的意见,这个问题在设计中已充分考虑,变采样速率,积分,动态门限。另外原理上已避免了这个问题。这个作品虽然是因为比赛而创作出来的,但我们已经决定把它产品化,所以主功能部分是严格测试的,如果只是做一个玩具,我想我们不至于要花半个多月来干这个事儿。具体讲,由于光敏电阻对远红外光还有一定的响应,但远红外光经过透光窗口时会有很大衰减,影响不大
老酒
3
主题
101
回复
发表于2016-11-08 11:51:56   |  只看该作者
45#
直接用摄像头,然后配合WIFI上传抓拍照片到PC端,用PC端软件进行OCR处理,白棋黑棋都知道,放置到哪里也知道,这是低成本模式,而且也最广泛使用,我又漏了
老酒
3
主题
101
回复
发表于2016-11-08 11:58:37   |  只看该作者
46#

1.初始化,从图像获取棋盘位置,校准软件棋盘尺寸;

2.下棋,手势离开后,2张图片不一致的地方即为棋子刚放置的区域,拍下来,区别棋子颜色,接着计算棋子;

二疼
2
主题
41
回复
发表于2016-11-08 12:29:07   |  只看该作者
47#
老酒 发表于2016-11-08 11:58:37  46# 1.初始化,从图像获取棋盘位置,校准软件棋盘尺寸;2.下棋,手势离开后,2张图片不一致的地方即为棋子刚放置的区域,拍下来...
谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有问题,比如用摄像头,放在棋盘下方,你的视角不够,放在棋盘上方,你要立支柱,坚固性怎么解决 复盘的显示如何解决?再放一个运动激光头? 纸面上的主意大把,关键是去做。
红尘客
29
主题
4308
回复
发表于2016-11-08 12:29:31   |  只看该作者
48#
老酒 发表于2016-11-08 11:58:37  46# 1.初始化,从图像获取棋盘位置,校准软件棋盘尺寸;2.下棋,手势离开后,2张图片不一致的地方即为棋子刚放置的区域,拍下来...

呵呵,你这个啥都不用做了!就写软件了!至少我更相信你这个,图像的特性更多。

其本质也是光反射原理。只是点更多。厉害的连物体形状都能识别。是不是现在的棋盘就是这样干的???

红尘客
29
主题
4308
回复
发表于2016-11-08 12:34:06   |  只看该作者
49#
二疼 发表于2016-11-08 12:29:07  47# 谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有问题,比如用摄像头,放在棋盘下方,你的视角不够,放在棋盘上方...
距离不是问题,方向这些都不是问题,只要有足够的参考点。能看清楚就能处理。二维码那么小。都能识别。 很多二维码的密集成度,远高于棋盘,斜着也能识别。 
二疼
2
主题
41
回复
发表于2016-11-08 12:46:30   |  只看该作者
50#
二疼 发表于2016-11-08 12:29:07  47# 谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有问题,比如用摄像头,放在棋盘下方,你的视角不够,放在棋盘上方...
实际上,还有些初入门者不切实际,以为Wifi传输很快,在这里普及一下。 Usb,PcI接囗的wifi模块传输速率很快,但是本身造价很高,加上配合的微处理器,七八十吧 不要和我说两家串口wifi.我使用sDk改成了SP|模式也不到一百K字节速率,还经常发不出去。 这东西勉强有wifi的功能而已,厂家也只定义为物联网中小数据节点,传即时图片,视频,请放弃 吧。
二疼
2
主题
41
回复
发表于2016-11-08 12:50:28   |  只看该作者
51#
红尘客 发表于2016-11-08 12:34:06  49# 距离不是问题,方向这些都不是问题,只要有足够的参考点。能看清楚就能处理。二维码那么小。都能识别。很多二维码的密集成度,远...
既然都不是问题,做一个嘛,知道鱼眼摄像头的最大视角是多少吗?知道大张角摄像头边缘分辩率是多少吗?
二疼
2
主题
41
回复
发表于2016-11-08 13:07:35   |  只看该作者
53#
红尘客 发表于2016-11-08 12:34:06  49# 距离不是问题,方向这些都不是问题,只要有足够的参考点。能看清楚就能处理。二维码那么小。都能识别。很多二维码的密集成度,远...
孩子回去上学了,这几天我代为回复,事实上从事开发工作需要经验,需要知识,更需要创意。 新的实现方式,新的电路结构是值得鼓励的,之所以在这里展示,是因为孩子的这种创新思维, 如果为了那点奖金,我大可以像其他人一样把成熟产品放在这里。 做人要讲诚信,设计比赛就是要从创意到完成都在规定时间内去做,这才是能力
二疼
2
主题
41
回复
发表于2016-11-08 13:26:02   |  只看该作者
54#
各位看官,本人工作比较忙,这个帖子以后不再回复,也不再参加下一届比赛,这个作品已为孩子申请专利。后续有对此作品或者对电子技术感兴趣的朋友请加QQ945369482.请加注电子爱好者字样

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部