Tabela de conteúdos
Componentes
No simulador sBotics, o termo “componentes” refere-se a blocos com comportamentos especiais que podem ser controlados através da programação. Esses componentes permitem que os robôs interajam com o ambiente virtual e realizem tarefas complexas.
Tipos de Componentes
Os componentes são divididos em duas categorias principais:
Nomes
Todo componente acessível possui um nome, que serve como chave de acesso. Em robôs tradicionais, o programador tem que chamar uma função como cor(1)
e então descobrir qual sensor do robô corresponde ao sensor na porta de número 1
. Já no sBotics você nomeia seu próprio sensor, então você pode chamar seus sensores de cor como SensorCorEsquerdo e SensorCorDireito, e assim o código pode ser executado como Cor(“SensorCorEsquerdo”)
ou Cor(“SensorCorDireito”)
.
Como pode perceber, estes nomes são EXTREMAMENTE importantes para acessar componentes e realizar comandos na programação. Estes nomes são dados na "Oficina de Robôs", clicando em um componente e alterando o nome no campo que aparece a direita e clicando no botão de alterar, como mostrado nas imagens abaixo.
Atenção: Em alguns computadores o botão de alterar está com a ativação um pouco descentralizada, então ao clicar no botão verifique que a mensagem “Editado com Sucesso!” aparece no topo da tela. Caso não apareça inicialmente basta apertar em um local menos centralizado do botão.
Para ver o nome dos componentes do seu robô, basta ir na tela de Robôs e visualizar na parte superior deste menu:
Controlador do Robô
O controlador do robô pode ser considerado por muitos um componente, já que o mesmo é capaz de executar alguns comandos de sensores “embutidos” e de saída.
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Abrir Console | Abre o painel do console. | AbrirConsole() | IO.OpenConsole(); |
Escrever | Escreve no console logo após o último texto. | Escrever("texto") | IO.Print("texto" ); |
Escrever em uma Linha | Escreve no console em uma nova linha. | EscreverLinha("texto") | IO.PrintLine("texto"); |
Limpar Console | Limpa todo o texto do console. | LimparConsole() | IO.ClearPrint(); |
Bússola / Direção | Retorna a direção (em graus) observada pelo robô. | Direcao() | Bot.Compass |
Inclinação | Retorna número que indica a inclinação em graus do robô. | Inclinacao() | Bot.Inclination |
Velocidade | Retorna número que indica a velocidade que o controlador (robô como um todo) está se movimentando. | Velocidade() | Bot.Speed |
(Avançado) Arquivo de Registro:
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Registrar | Escreve no registro logo após o último texto. | Registrar("texto") | IO.Write("texto" ); |
Registrar em uma Linha | Escreve no registro em uma nova linha. | RegistrarLinha("texto") | IO.WriteLine("texto"); |
Limpar Registro | Limpa todo o texto do arquivo de registro. | LimparRegistro() | IO.ClearWrite(); |
O arquivo de registro é como um console mas que fica inteiramente fora do sBotics em um arquivo separado. Ele pode ser acessado através do painel de console clicando no ícone de “Documento”. Pode ser utilizado para gerar gráficos, csvs e outras implementações que o usuário queira fazer fora do sBotics a partir de dados gerados dentro do sBotics.
Componentes Simples
Os componentes simples são blocos que realizam ações específicas quando programados. O sBotics oferece os seguintes componentes simples:
Servomotor: Gira um grupo de blocos em um ângulo definido.
Entendendo Melhor o Servomotor
Embora aparentemente o servomotor seja um “simples” componente, ele é o componente mais importante de todo robô, pois ele permite a movimentação programada de grupos de blocos e possui muitas formas de interação.
TODO MOTOR INICIA TRAVADO, sendo necessário DESTRAVAR O MOTOR para usá-lo.
Caso use múltiplos motores, não esqueça de destravá-los individualmente para poder usá-los.
TravarMotor("motor1", falso)
TravarMotor("motor2", falso)
TravarMotor("motor3", falso)
TravarMotor("motor4", falso)
Motores podem ser travados ou destravados. Um motor travado se comporta um pouco como um bloco sólido e cria arrasto/atrito e pode ser usado para realizar curvas (um motor travado e outro destravado, por exemplo). Já um motor solto pode se movimentar livremente, mesmo que não haja uma força sendo aplicada no mesmo, e pode receber comandos para movimentação.
Selecionando um motor genérico no menu de Depuração é possível brincar com cada uma das propriedades do mesmo.
Motores no sBotics se movimentam com duas propriedades: Força e Velocidade Alvo. Para 90% dos usuários, esta informação é irrelevante, basta utilizar o comando Mover("motor", força)
em rEduc / Blockeduc para mover o motor. Motores podem se movimentar com velocidades de -500 a 500, sendo o sentido determinado se o número é positivo ou negativo.
Avançado: Para usuários mais avançados, basta entender que a velocidade alvo é a mais importante, pois é a velocidade que o motor vai alcançar, sendo ela positiva (girando no sentido das setinhas) ou negativa (girando contra as setinhas); Já a força é a força a ser aplicada a cada 1/60 segundos para atingir a “velocidade alvo” desejada, sendo assim apenas números positivos.
Por este motivo, no C# a movimentação é dada sempre por dois valores, sendo um a força sendo aplicada e outra a velocidade a ser alcançada. Se você não quer lidar com isso, pode sempre usar o mesmo valor em ambos os campos, mas lembrando que o primeiro parâmetro sempre deverá ser positivo
Bot.GetComponent<Servomotor>("Nome Motor").Apply(100, -500)
Comandos para Componentes Simples
Como cada componente simples possui funções únicas, seus comandos variam. Consulte a tabela abaixo para obter informações detalhadas sobre os comandos de cada componente.
Lembre-se! Para acessar um componente através de um comando é necessário informar o nome do mesmo. Certifique-se que um nome foi informado na Oficina de Robôs e verifique o nome do componente em questão no painel de Robôs.
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Está Tocando? | Retorna se o buzzer informado está tocando algo ou não (verdadeiro/falso). | EstaTocando("Nome") | Bot.GetComponent<Buzzer>( "Nome" ).Playing |
Tocar Nota | Toca uma nota musical no buzzer informado. | TocarNota("Nome", "Sol") | Bot.GetComponent<Buzzer>( "Nome" ).PlaySound("Sol"); |
Tocar Frequência | Toca uma frequência específica em Hz no buzzer informado. | TocarFrequencia("Nome", 24.5) | Bot.GetComponent<Buzzer>( "Nome" ).PlaySound( 24.5 ); |
Parar Som | Desativa o buzzer informado. | PararSom("Nome") | Bot.GetComponent<Buzzer>( "Nome" ).StopSound(); |
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Ligar | Define a cor do LED informado e o acende. | LigarLuz("Nome", 255, 255, 255) | Bot.GetComponent<Light>( "Nome" ).TurnOn( new Color(255, 255, 255) ); |
Desligar | Desliga o LED informado. | DesligarLuz("Nome") | Bot.GetComponent<Light>( "Nome" ).TurnOff(); |
Comandos Básicos | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Travar / Destravar Motor | Trava ou Destrava o motor de se mover. | TravarMotor("Nome Motor", falso) | Bot.GetComponent<Servomotor>("Nome Motor").Locked = false; |
Mover Motor | Move o servomotor destravado na velocidade informada entre -500 e 500. | Motor("Nome Motor", -500) | Bot.GetComponent<Servomotor>("Nome Motor").Apply(10, -50) |
Comandos Avançados | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Definir Motor | Aplica gradualmente uma força informada para atingir a outra velocidade informada. | DefinirMotor("Nome Motor", 10, -500) | Bot.GetComponent<Servomotor>("Nome Motor").Apply(10, -50) |
Ângulo do Motor* | Retorna o ângulo do motor informado. | AnguloMotor("Nome Motor") | Bot.GetComponent<Servomotor>("Nome Motor").Angle |
Força do Motor | Retorna a força sendo aplicada no motor informado. | ForcaMotor("Nome Motor") | Bot.GetComponent<Servomotor>("Nome Motor").Force |
Velocidade Alvo do Motor | Retorna a velocidade alvo a ser atingida pelo motor informado. | VelocidadeAlvoMotor("Nome Motor") | Bot.GetComponent<Servomotor>("Nome Motor").Target |
Velocidade do Motor | Retorna a velocidade (aceleração) do motor informado. | VelocidadeMotor("Nome Motor") | Bot.GetComponent<Servomotor>("Nome Motor").Velocity |
* A função de sensor de ângulos (giroscópico) do sBotics as vezes pode apresentar um erro conhecido devido a limitações na plataforma Unity (plataforma usada para criar o simulador). O erro se manifesta na dificuldade em interpretar corretamente a movimentação do objeto em outros eixos, afetando a leitura do eixo específico desejado.
Soluções alternativas podem ser exploradas, como recolocar o motor e rotacioná-lo de maneiras diferentes (clicando nos botões de rotacionar bloco na "Oficina de Robôs"), tentar rotações aparentemente idênticas com valores distintos ou trocar o bloco onde o motor está ancorado. A correção deste problema é inviável no momento.
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Ligar Caneta | Define a cor da caneta informada e a liga. | LigarCaneta("Nome", 255, 255, 255) | Bot.GetComponent<Pen>( "Nome" ).TurnOn( new Color(255, 255, 255) ); |
Apagar Caneta | Apaga tudo que foi desenhado com a caneta informada. | ApagarCaneta("Nome") | Bot.GetComponent<Pen>( "Nome" ).Clear(); |
Desligar Caneta | Desliga a caneta informada. | DesligarCaneta("Nome") | Bot.GetComponent<Pen>( "Nome" ).TurnOff(); |
Ver Todos os Comandos e Explicações Detalhadas
Sensores
Os sensores permitem que os robôs “percebam” o ambiente virtual, coletando informações sobre cores, distâncias, toques e imagens. O sBotics oferece os seguintes sensores:
Observação: Os sensores de cor e ultrassônico também possuem versões inclinadas, que permitem ler áreas diferentes.
Leitura de Sensores
Cada sensor oferece dois tipos de leitura: A leitura analógica e a leitura digital. Para usuários de rEduc e Blockeduc, esta separação não é tão óbvia, já que todos são tratados por comandos distintos diferentes.
Lembre-se! Para acessar um componente através de um comando é necessário informar o nome do mesmo. Certifique-se que um nome foi informado na Oficina de Robôs e verifique o nome do componente em questão no painel de Robôs.
Leitura Analógica:
Retorna um valor numérico que representa a intensidade da leitura (pode ser um valor numérico, em texto, ou outro*).
Sensor de Cor: Variável do tipo cor* (C#) ou numero/texto (rEduc/Blockeduc).
Comandos | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Cor | Retorna o “nome da cor”** lida pelo sensor informado. | Cor("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Analog.ToString() |
Luminosidade | Retorna o valor numérico que representa a intensidade de luz (leitura preta-e-branca) do sensor informado. | Luz("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Analog.Brightness |
Tom de Azul | Retorna o valor numérico de azul da cor lida pelo sensor informado. | CorAzul("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Analog.Blue |
Tom de Verde | Retorna o valor numérico de azul da cor lida pelo sensor informado. | CorVerde("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Analog.Green |
Tom de Vermelho | Retorna o valor numérico de azul da cor lida pelo sensor informado. | CorVermelho("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Analog.Red |
Sensor Ultrassônico: Mede a distância até um objeto.
Comandos | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Ultrassônico | Retorna a distância (nas unidades próprias do simulador) percebida pelo sensor informado. | Ultra("Nome do Sensor") | Bot.GetComponent<UltrasonicSensor>( "Nome do Sensor" ).Analog |
Sensor de Toque: Sensor de toque não possui leitura analógica, apenas digital, por se tratar de um simples botão.
* Outros tipos de retorno só se aplicam a C#
** Os tipos de cores que existem no sBotics são:
rEduc / Blockeduc:"Preto"
,"Branco"
,"Verde"
,"Vermelho"
,"Azul"
,"Amarelo"
,"Magenta"
,"Ciano"
.
C#:Colors.Black
,Colors.White
,Colors.Green
,Colors.Red
,Colors.Blue
,Colors.Yellow
,Colors.Magenta
,Colors.Cyan
.
Leitura Digital:
Retorna um valor booleano (verdadeiro/falso) que indica se uma condição foi atendida.
Sensor de Cor: Variável booleana (verdadeiro ou falso) que informa se o sensor está lendo alguma cor ou não (preto).
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Colorido? | Retorna se o sensor informado está lendo alguma cor. | Colorido("Nome do Sensor") | Bot.GetComponent<ColorSensor>( "Nome do Sensor" ).Digital; |
Sensor Ultrassônico: Mede a distância até um objeto.
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Tem Algo? | Retorna se o sensor informado está vendo alguma coisa, independente da distância. | TemAlgo("Nome do Sensor") | Bot.GetComponent<UltrasonicSensor>( "Nome do Sensor" ).Digital; |
Sensor de Toque: Detecta se um objeto está em contato com o sensor.
Comando | Descrição | rEduc / Blockeduc | C# |
---|---|---|---|
Toque? | Retorna se o sensor informado está sendo pressionado. | Toque("Nome do Sensor") | Bot.GetComponent<TouchSensor>( "Nome do Sensor" ).Digital; |
Importante: A câmera ainda não está totalmente funcional e pode não ser utilizável na maioria dos casos. Ela possui comandos em C# que podem ser visualizados na página de Referência para Programação C#, mas não está na wiki por não ter suporte.