Visual Basic como Scratch Board

Podemos simular a Scratch Board apenas utilizando softwares para a simulação de uma porta serial, através do com0com e utilizando o Visual Basic para enviar dados, assim como pode ser visto no PicoBoard Emulator.

Para gerar o primeiro pacote de bytes, neste caso poderemos utilizar as duas alternativas abaixo:

Label1.Text = (&H80 + &H38 + &H1)
Label2.Text = (10000000 + 111000 + 1)

Ao olharmos o valor &H38, poderemos ficar confusos, no entanto se trata da conversão do valor binário 111, relativo ao valor 7, rotacionado três casas à esquerda.

Agora, depois da formatação dos bytes, deveremos enviá-los à porta serial no formato caracteres, ou seja Chr().

VB6: Socket Server – II

Este é o código utilizado em nosso servidor:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strdados As String
Winsock1.GetData strdados
Label1.Caption = strdados
End Sub

Private Sub Command1_Click()
Label1.Caption = strdados
End Sub

Private Sub Form_Load()
Winsock1.LocalPort = 42001
Winsock1.Listen
Label1.Caption = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub

VB6: Socket Server

scscsvr

Esta é a tela sugerida para nosso servidor socket escrito em Visual Basic 6. Ela exibirá a informação recebida através da porta 42001, mesma utilizada pelo Scratch para sensoriamento remoto.

Para exemplificar a conexão, nosso cliente será escrito utilizando o Labview 2010, em breve

Socket: Gogo Board + VB – II

Abaixo temos o código utilizado no VB:


Private Sub Command1_Click()
Winsock1.Connect
End Sub

Private Sub Command2_Click()
Winsock1.SendData "beep"
End Sub

Private Sub Form_Load()
Winsock1.RemoteHost = "192.168.5.101"
'Winsock1.RemotePort = "42001"
Winsock1.RemotePort = "9873"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub

Ao executá-lo a placa emitirá o sinal sonoro de beep. Outros comandos podem ser utilizados, vide documentação.

Como controlar motores servo

Como controlar motores servo?

Com base nesta documentação, é possivel controlar até quatro motores servo.

Diferente dos motores comuns ou dc, os servo necessitam de parâmetros adicionais para seu correto funcionamento, não bastando apenas alimenta-los.

São movidos através de pulsos pwm, que determinarão sua posição.

Como fazemos isso via Visual Basic? Primeiro é necessário ativar o canal do motor via “GoGoX1.TalkTo 1″, tomando como exemplo o motor A. A seguir definimos sua posição com “GoGoX1.setPWMdutyCycle (X)”. Este X será o ângulo em graus desejado.

Continue lendo aqui.

Gogo Board + ActiveX: Sensores – Final

Para utilizar o comando “BurstMode”, além do sensor existe o parâmetro de como ativa-lo, ou não, ou seja acrescentando 1 ou 0, respectivamente, deste modo:

BurstMode Sensor, 1
BurstMode, 0, 0

Em conjunto a este comando, devemos utilizar o “SensorBuffer (Sensor Number)”, que armazena o valor do sensor ou sensores, facilitando com isso a leitura e visualização.

Sua tabela de atuação segue este critério:

sensor 1 = SensorBuffer 0
sensor 2 = SensorBuffer 1
sensor 3 = SensorBuffer 2
sensor 4 = SensorBuffer 3
sensor 5 = SensorBuffer 4
sensor 6 = SensorBuffer 5
sensor 7 = SensorBuffer 6
sensor 8 = SensorBuffer 7

Em breve, um exemplo de protótipo utilizando estes comandos.

Gogo Board + ActiveX: Sensores – IV

Para leituras constantes de um determinado sensor ou grupo de sensores, temos o comando “BurstMode (Sensor bits)”, que ao ser ativado determina que a placa envie o valor e assim podemos inserir em um formulário e exibi-lo na tela do computador.

A tabela para este comando segue este critério:

sensor 1 = 1
sensor 2 = 2
sensor 3 = 4
sensor 4 = 8
sensor 5 = 16
sensor 6 = 32
sensor 7 = 64
sensor 8 = 128

De modo que devemos somar estes valores se desejarmos realizar a leitura de um grupo de sensores. Exemplo: Para leitura dos sensores 3 e 5, somamos os respectivos valores, ou seja, 4+16 = 20.

No capítulo final, o comando que deverá ser usado com este que foi apresentado.

Gogo Board + ActiveX: Sensores – III

Através dos comandos “ReadSensorMax (Sensor number)” e “ReadSensorMin (Sensor number)”, podemos obter os valores máximos e mínimos de um determinado sensor.

Para definir qual o sensor a ser lido, basta usar esta tabela:

sensor 1 = 1
sensor 2 = 2
sensor 3 = 3
sensor 4 = 4
sensor 5 = 5
sensor 6 = 6
sensor 7 = 7
sensor 8 = 8

Assim como o comando “ReadSensor”, deve ser usado para leituras rápidas, para leituras constantes e em tempo real, existem outros comando que serão abordados no próximo capítulo.

Gogo Board + ActiveX: Sensores – II

O comando “ReadSensor (Sensor number)” é utilizado para retornar o valor de um determinado sensor. Este valor, geralmente é direcionado para algum formulário e exibido na tela do computador.

Para definir qual o sensor a ser lido, basta usar esta tabela:

sensor 1 = 1
sensor 2 = 2
sensor 3 = 3
sensor 4 = 4
sensor 5 = 5
sensor 6 = 6
sensor 7 = 7
sensor 8 = 8

Geralmente, deve ser usado para leituras rápidas, para leituras constantes e em tempo real, existem outros comandos que serão abordados logo mais.

Gogo Board + ActiveX: Sensores – I

No site da Gogo Board: http://gogoboard.stanford.edu/activex-control-documentation, temos o modelo de uso para o controle activex que trabalha junto com a placa, servindo como interface entre ela e o Visual Basic.

Para trabalharmos com sensores, temos os seguintes comandos:
– ReadSensor (Sensor number)
– ReadSensorMax (Sensor number)
– ReadSensorMin (Sensor number)
– BurstMode (Sensor bits)
– SensorBuffer (Sensor Number)

Cada um deste comando tem seu significado e seu modo de atuação, bem como, a maneira como deve ser ativado.

FlexPicker e Visual Basic – III

Como de fato programar um FlexPicker?

Há muito mistério acerca disso, mesmo com uma ampla e vasta documentação teórica a este respeito.

Podemos notar que há várias formas de implementação, mas todas são parecidas, principalmente no fato da responsabilidade de processar o algorítimo ser do computador e não das interfaces microcontroladas. Por exemplo, a tese mencionada anteriormente, utiliza aproximadamente 2000 linhas de código para poder controlar os quatro motores servo e realizar a leitura dos sensores, o que geralmente, supera a capacidade dos microcontroladores.

Por fim, a solução, se assemelha em muito às utilizadas em máquinas CNC com vários eixos, assim a programação não aparenta ser impossível. Já sobre a estrutura mecânica envolvida, suas dimensões e componentes, também encontramos outro mistério, o qual a tese parece facilitar a compreensão e trazer uma solução.

Foto: http://singularityhub.com

FlexPicker e Visual Basic – II

Continuando o post anterior, várias coisas aconteceram.

Em contato com o Dr. Ahmed, ele nos explicou o funcionamento e nos enviou uma cópia da tese encaminhada à banca examinadora, cuja qualidade é bem superior a obtida no site da universidade, além de ser em cores.

Houve uma proposta de colaboração para que pudéssemos construir nosso protótipo de FlexPicker, mas pos diversas razões, técnicas e operacionais, perdemos o contato.

Mesmo assim, com base na tese, reproduzimos toda a programação desenvolvida em Visual Basic, com um sucesso satisfatório.

A próxima etapa será a construção ou uso de um hardware capaz de comandar servo motores. Nisso, surgem duas vertentes, usar por exemplo, Arduino e/ou Gogo Board, o que em se tratando de programação, independe, ambas suportariam este tipo de interação e programação.

Gogo Real + Visual Basic 2005 – III

Uma vez inserido o componente SerialPort em seu formulário, um botão simples deve ser inserido também. Nele, o código abaixo, deve ser associado:

Dim data(4) As Byte
data(0) = 84
data(1) = 254
data(2) = 196
data(3) = 0
SerialPort1.Write(data, 0, 4)

Ainda, temos mais duas coisas que não podem ser esquecidas, com validade para várias linguagens de programação que utilizam uma porta de comunicação.

A primeira é a definição da porta, com o seguinte código:

SerialPort1.PortName = "COMX"

Que pode ser atribuido ao botão acima, ou a outro botão ou ainda na propriedade de “load” do formulário, não esquecendo de abrir a porta, deste modo:

SerialPort1.Open()

Por fim, não se esqueça de encerrar a conexão, assim:

SerialPort1.Close()

Lembrando que estes códigos se refencem ao Visual Basic e o que vale é a lógica, independente da linguagem.

O “COMX” deve ser alterado de acordo com a porta utilizada pela placa. Exemplo: COM11

Gogo Real + Visual Basic 2005 – II

Diferentemente do post, que utilizava o componente ActiveX Mscomm, a suíte de ferramentas Visual Studio, assume novas formas de programação, se tornando de fato, orientada à objetos e não mais à eventos.

Deixando de lado o componente Mscomm, que poderá não estar presente em algumas versões de Windows, surge um novo componente promissor, o SerialPort.

Como visto aqui, ele possui características próprias a serem exploradas.