论坛首页 > 创客天地 > 往届立创商城电子制作节 > 光电围棋盘制作总结
查看:9187  |  回复:65
光电围棋盘制作总结
二疼
2
主题
41
回复
发表于Mon Oct 31 15:21:55 CST 2016   |  只看该作者 1# 电梯直达

立创君11月7日晚21点插楼提示:该作品已荣获首届立创商城电子制作节二等奖,点我查看6强完整名单。

立创君11月3日晚21点插楼提示:该作品已进入首届立创商城电子制作节15强,点我投票参与公投,选出最终6强!




光电围棋盘制作总结

 

前言

近年来,围棋运动在青少年中逐渐普及,越来越多的棋院出现在人们的视线中,各种职业和业余的赛事不断举办。选手和棋院都想尽快提高教学水平和比赛成绩。随着计算机的普及,很多地方利用计算机进行教学和比赛。然而,观察实际的教学和比赛过程,我们发现如下特点:

一、选手低龄化。学习围棋的人群主要集中在6-12岁,启蒙阶段的孩子有些还不能掌握电脑的用法,有些会把电脑用于游戏,家长也不赞成孩子们长时间使用电脑、智能手机。

二、选手面对真实的棋盘有所谓“手感”,使用真实棋盘和使用计算机屏幕下棋,注意力和思维活跃程度有较大差别。

三、“复盘”是棋类竞技项目提高水平的重要手段,在教学中,老师如果能经常针对学生下过的棋局进行复盘指导,教学质量能得到较好地提高。有鉴于此,我们决心开发一种具有网络功能的电子棋盘,以解决围棋在教学、比赛中出现的一些困难。

一、目标功能

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

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

3、教学功能,实现围棋术语中死活题,定势等不同走法。

4、比赛功能,选手身份录入(RFID卡读入),比赛计时。

5、网络功能,例如用于赛场实时直播(非视频方式)。

二、设计构思(技术要点难点)

曾经有人设计过用磁性传感器(干簧管或者霍尔传感器)配合磁性棋子实现的电子棋盘,这种棋盘是根据围棋中“黑方先落子,之后轮流落子”的规则来记录棋局。由于不能区分黑白棋子,当遇到提子等情形时会发生误记。有时候,低龄的选手在比赛中会有需要让子的情形,这些情况下,不能正确记录。

针对这些问题,我们首先要解决的问题是区分黑白子。

解决的办法是利用黑白棋子对光线有不同反射率的原理,我们可以对棋子发出一束光,然后利用光敏电阻接收反射光线,光敏电阻的内阻变化可以用ADC转换结果判断。

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



该帖子已被立创君于Mon Nov 07 21:12:34 CST 2016编辑过
回复 收藏
  举报
ChessWorld
32
主题
675
回复
发表于Mon Oct 31 15:33:57 CST 2016   |  只看该作者 2#
呵呵,这个好像挺好玩,有趣
二疼
2
主题
41
回复
发表于Mon Oct 31 15:35:30 CST 2016   |  只看该作者 3#

另一个问题,在这种结构下,如何区分外部射入的光(无棋子处)和LED发出的光(有棋子处)。解决的方法是进行两次扫描:首先,所有LED不发光,有棋子的地方无光线,无棋子的地方有自然光射入,这样就先区别出有无棋子。然后,点亮有棋子处的LED,由于自然光被棋子遮挡,可以根据反射强度判断黑白子。

LED的存在使我们有了重现棋局的显示功能,一切问题迎刃而解。


四,硬件系统框图


五、设备雏形(如下图)

六、设备调试

由于比赛准备时间过短,一个月时间要完成全部功能没有可能,因此我们选择实现主要功能:

1、PC端程序

VB语言写电脑程序,这个过程比较顺利,主要的问题是棋子透明叠加到棋盘上的实现以及网络通信协议,这里用到了UDP广播技术来实现未知PC端的接入。

2、设备端调试

C语言编写MCU程序。

在提交结果时,我们只够时间调试了ESP8266模块的驱动及和PC端的通信、棋子的黑白子检测,实现了正常和异常情况下的棋局实时录入。

硬件系统设计较为成功,除了忘记引电源开机键引线外,基本一次制版成功。

经测试LED选用红光比较好,由于光敏电阻的光谱灵敏度区间在500-800纳米,选用红光LED有较高的灵敏度。

键盘输入和LCD显示屏驱动未按时完成









二疼
2
主题
41
回复
发表于Mon Oct 31 15:40:51 CST 2016   |  只看该作者 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
回复
发表于Mon Oct 31 15:42:02 CST 2016   |  只看该作者 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
回复
发表于Mon Oct 31 15:43:48 CST 2016   |  只看该作者 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
回复
发表于Mon Oct 31 15:50:55 CST 2016   |  只看该作者 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
回复
发表于Mon Oct 31 15:51:01 CST 2016   |  只看该作者 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                                                

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


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

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

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

给力啊,这个。


真的实现了嘛?

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

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

MiaoKo
1
主题
49
回复
发表于Thu Nov 03 18:50:13 CST 2016   |  只看该作者 16#

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

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

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

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

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

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

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

TFAD
0
主题
1
回复
发表于Fri Nov 04 14:44:20 CST 2016   |  只看该作者 28#
很不错的作品,对于围棋的教学和比赛都很实用,对专业围棋人员也是很好的工具,尤其对很少用电脑但热爱围棋的老人和小孩来说非常不错。
MiaoKo
1
主题
49
回复
发表于Fri Nov 04 16:37:20 CST 2016   |  只看该作者 29#
二疼 发表于 Thu Nov 03 21:42:24 CST 2016  22# 还有既然您问到了这亇问题,说明您仔细阅读了文档,是同道中人...

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

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

MiaoKo
1
主题
49
回复
发表于Fri Nov 04 16:39:52 CST 2016   |  只看该作者 30#
二疼 发表于 Thu Nov 03 22:06:01 CST 2016  24# 问一下关注这个设计的朋友,网络部分编程很难吗.舅舅说写出来容...
网络部分的编程,确实是做稳定不容易。这种wifi芯片我没用过,但有线以太网接口协议芯片接触过,要做稳定还是需要一定功底和耐心的哦
二疼
2
主题
41
回复
发表于Fri Nov 04 16:48:11 CST 2016   |  只看该作者 31#
MiaoKo 发表于 Fri Nov 04 16:37:20 CST 2016  29# 也是,提子不需要进行颜色检测。只需要对有棋子的地方进行颜色...

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

赶快投我一票呀,老大

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

这个成本很高吧。

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

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


深海
1
主题
9
回复
发表于Sun Nov 06 17:42:51 CST 2016   |  只看该作者 38#
宏景 发表于 Sun Nov 06 17:09:54 CST 2016  37# 用光敏会不会受外届的环境光影响?用红外会不会更好点?
仔细读一读这个设计的原理,你的问题正是这个设计的精彩之处
红尘客
51
主题
2742
回复
发表于Mon Nov 07 11:08:21 CST 2016   |  只看该作者 39#

环境光不均匀,影子这些问题能不能解决,特定环境我光色可能不一样?

还有发光管,光敏电阻本身偏差,安装位置造成的偏差这些。以及上面层的材质不一样,能明确的区分黑白吗。

很多东西在测试,或特定环境中是没有问题的,量多了,就会出问题。


◆爱浦电源模块, 网线, 水晶头, 语音合成(SYN6288), 电源滤波器(ACM7060), 万用表(UT890C+), 旋转编码开
二疼
2
主题
41
回复
发表于Mon Nov 07 13:06:21 CST 2016   |  只看该作者 40#
红尘客 发表于 Mon Nov 07 11:08:21 CST 2016  39# 环境光不均匀,影子这些问题能不能解决,特定环境我光色可能不...
问得好,谢谢,不过你没领会这个设计,你提的这几个问题的解决方案在设计中已体现,这个设计中是隐含了一个不容易克服的问题,如果你能找出来,我们愿意公开讨论
红尘客
51
主题
2742
回复
发表于Mon Nov 07 13:29:40 CST 2016   |  只看该作者 41#
用红光照射也没有问题?分成两半,一半有一半没有也能行?
◆爱浦电源模块, 网线, 水晶头, 语音合成(SYN6288), 电源滤波器(ACM7060), 万用表(UT890C+), 旋转编码开
二疼
2
主题
41
回复
发表于Mon Nov 07 13:39:09 CST 2016   |  只看该作者 42#
红尘客 发表于 Mon Nov 07 13:29:40 CST 2016  41# 用红光照射也没有问题?分成两半,一半有一半没有也能行?
你要愿意在紫外灯下边下棋边消毒,那我承认这个是失败的,你可以自已去查光敏电阻的光谱响应
红尘客
51
主题
2742
回复
发表于Mon Nov 07 13:46:56 CST 2016   |  只看该作者 43#
二疼 发表于 Mon Nov 07 13:39:09 CST 2016  42# 你要愿意在紫外灯下边下棋边消毒,那我承认这个是失败的,你可以...

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

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

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

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

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

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

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

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

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

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

◆爱浦电源模块, 网线, 水晶头, 语音合成(SYN6288), 电源滤波器(ACM7060), 万用表(UT890C+), 旋转编码开
红尘客
51
主题
2742
回复
发表于Tue Nov 08 12:34:06 CST 2016   |  只看该作者 49#
二疼 发表于 Tue Nov 08 12:29:07 CST 2016  47# 谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有...
距离不是问题,方向这些都不是问题,只要有足够的参考点。能看清楚就能处理。二维码那么小。都能识别。 很多二维码的密集成度,远高于棋盘,斜着也能识别。 
◆爱浦电源模块, 网线, 水晶头, 语音合成(SYN6288), 电源滤波器(ACM7060), 万用表(UT890C+), 旋转编码开
二疼
2
主题
41
回复
发表于Tue Nov 08 12:46:30 CST 2016   |  只看该作者 50#
二疼 发表于 Tue Nov 08 12:29:07 CST 2016  47# 谢谢您的意见,上面我已做过解释,有些方案看起来可行,实际上有...
实际上,还有些初入门者不切实际,以为Wifi传输很快,在这里普及一下。 Usb,PcI接囗的wifi模块传输速率很快,但是本身造价很高,加上配合的微处理器,七八十吧 不要和我说两家串口wifi.我使用sDk改成了SP|模式也不到一百K字节速率,还经常发不出去。 这东西勉强有wifi的功能而已,厂家也只定义为物联网中小数据节点,传即时图片,视频,请放弃 吧。
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部