Você está na página 1de 8

Servo Biblioteca de Blocos para Simulink Arduino Alvo

Contedo
[ esconder ]

1 Introduo 2 Instalao da Biblioteca 3 Usando Biblioteca 4 Demonstraes 5 Como funciona

Introduo
O objetivo da biblioteca permitir que os usurios controlem servos nos modelos Simulink compilados para o alvo Arduino. A biblioteca foi desenvolvida usando o Arduino Alvo localizado aqui: [ Arduino Alvo ] a verso utilizada foi atualizado 2011/11/22. Embora no seja a ltima verso do Arduino IDE (1,0 neste momento), a verso 0023 est sendo usado, pois o mais alto compatvel com esta verso do alvo Arduino.

Supe-se que voc j tem o alvo Arduino instalado e funcionando. Se precisar de ajuda para instalar-lo, ver o meu tutorial localizado aqui: Instalando o alvo Arduino para Simulink

Instalao da Biblioteca
1. Baixar a biblioteca Servo aqui: ( servoLibrary.zip ) 2. Extra-lo para um fcil de localizar o diretrio (C :/ servoLibrary) 3. Copie os arquivos Servo.h, Servo.cpp, io_wrappers.h, io_wrappers.cpp e servo.jpg para o diretrio que voc extraiu o alvo para Arduino (C :/ arduinoTarget)

Permitir janelas para substituir os arquivos io_wrappers. Isto ir permitir que os invlucros estendidos necessrios para a Biblioteca Servo para ser adicionado ao processo Mathworks estoque

4. Lanamento MATLAB e navegue at File-> Set Path ... 5. Selecione "Add Folder" e selecione a pasta servoLibrary (C :/ servoLibrary) 6. Selecione "OK" eo servoLibrary deve aparecer no topo da lista caminho 7. Clique em "Salvar" e "Fechar" 8. Exit e re-aberto MATLAB 9. A Biblioteca Servo Arduino deve aparecer abaixo da meta Arduino (selecione o ttulo "Biblioteca Servo Arduino"

Usando Biblioteca
Os blocos de servo pode ser usado como qualquer um dos outros blocos da Meta Arduino. Clicando duas vezes sobre o bloco ou trazer o dilogo parmetros bloco set voc pode definir o pino que o servo est conectado. O bloco espera uma entrada do tipo uint8

Note-se que no h nenhuma verificao no local para garantir que o valor alimentado est entre 0 e 180 (os mesmos requisitos que a utilizao da Biblioteca Servo no Arduino IDE)

No Arduino UNO, utilizando um servo ir desativar automaticamente PWM nos pinos 9 e 10 Cada servo fsica deve utilizar o seu prprio bloco (ServoA-ServoH). Isto devido ao desenho dos blocos. Cada blocos representa uma instncia de um objeto de Servo.Veja # Como funciona mais mais detalhes. Um Arduino UNO pode, teoricamente, controlar 12 servos, os MEGA pode controlar 48

Note-se que o controle de mais de 12 servos nas MEGA Arduino ir desativar PWM nos pinos 11 e 12

Manifestaes

Este vdeo mostra 8 servos sendo controlados pelo Arduino. O valor atual que est sendo escrito para os servos so enviados via serial para o computador host onde representada graficamente por Simulink. Os dois arquivos de modelo pode ser baixado aps o vdeo.

O modelo de acolhimento de srie a demonstrao do alvo Arduino. Ele pode ser iniciado digitando demo_arduino_serial_communication_host se voc tem o pacote instalado. A foto abaixo mostra a minha verso configurada. Defina a configurao de srie e srie recebem blocos para usar a porta COM seu Arduino est conectado. Eu tinha o meu ligado porta COM9

O modelo de Arduino est disponvel aqui: [ Servo_Demonstration.mdl ] (Boto direito do mouse -> Salvar como) Eu coloquei os arquivos na pasta arduinoTarget :/ C, mas deve funcionar de coloc-los em outros lugares tambm, desde que voc faa essa pasta o diretrio de trabalho atual.

Observe como cada servo (AH Servo) atribuda a uma porta diferente no Arduino (apenas portas digitais). Se voc tiver concludo a configurao do destino Arduino, e ter o seu Arduino conectado, voc deve ser capaz de construir o modelo para o Arduino, pressionando CTRL + B.

Aqui est uma imagem do modelo de lado Arduino:

Como funciona
A base desta biblioteca uma biblioteca Servo includo com o IDE Arduino. Olhando para o arquivos Servo.h e Servo.cpp nos arduino-0023 \ bibliotecas diretrio \ Servo.Porque uma biblioteca C + +, no podemos simplesmente inclu-lo em um arquivo de TLC e utilizar suas funes. A chave para resolver este problema funes wrapper. Utilizando estes, o C + + funes podem ser envoltos em uma funo C, que pode ento ser chamado pelo ficheiro de TLC.

Para entender o que est acontecendo nos bastidores, olhe primeiro para o bloco digitalOutput. uma mscara para a funo S sfunar_digitalOutput e seus arquivos de origem esto localizados na pasta C: \ arduinoTarget diretrio \ blocos. Navegar para este diretrio ir revelar quatro arquivos com o nome sfunar_digitalOutput com extenses. C,. Tlc,. Mex32 e. Mex64. O arquivo C o que define o bloco. Nenhuma chamada para o comando digitalOutput acontecer aqui, ele s diz o nome, a funo S.Para fazer com que os blocos de servo, eu mudei o nome aqui para o que eu usei para cada bloco (digitalServo, digitalServo2, ect.)

A prxima pea do quebra-cabea so os arquivos de TLC. O arquivo TLC diz Simulink como compilar o cdigo para o Arduino e que precisa acontecer. Olhando sfunar_digitalOutput.tlc mostra dois comandos Arduino familiares: pinMode () e digitalWrite (). p1_val a varivel que representa o primeiro parmetro (o nmero de pinos) e u1_val a primeira entrada (o valor de escrever). Perto do topo voc pode ver um arquivo que est sendo includo block_common_includes.tlc. Navegar para este arquivo tambm localizado no diretrio blocos revela que existem dois arquivos que esto sendo includos WProgram.h e io_wrappers.h. WProgram.h um arquivo do Arduino IDE que cuida de definir as portas e tambm inclui as outras bibliotecas necessrias para executar as funes bsicas de I / O em Arduino, juntamente com HardwareSerial.h.

io_wrappers.h e io_wrappers.cpp onde todo o C + + para C mgica acontece. Abrindo os arquivos localizados no diretrio blocos revela trs funes que primeira vista parece familiar: Serial_begin, Serial_read, Serial_write. Em io_wrappers.cpp o embrulho acontece a criao de uma funo C para chamar a funo C + +. Serial_begin chama Serial.begin e o mesmo para as outras duas funes.

Aqueles que esto familiarizados com a programao vai dizer onde est o objeto de srie vem que podemos comear, ler e escrever a partir de? A resposta est no HardwareSerial.h e. Cpp localizado no arduino-0023 \ hardware \ arduino \ ncleos \ arduino. Olhando para o final do arquivo, podemos ver os objetos em srie que est sendo criado com base na placa que foi selecionado. Este o lugar onde eu decidi que ser necessrio pr-definir cada objeto servo que vai usar, o que levou criao de oito blocos servo individuais. Como um aparte eu tentei mudar a placa para a mega 2560 e mudando o Serial.begin para Serial1.begin no arquivo io_wrappers, mas no teve sucesso. Eu acho

que isso pode estar relacionado forma como o if so formuladas e quais variveis so manipulados pelo destino Arduino quando uma configurao de placa particular selecionado.

Com esta nova compreenso de como os blocos de srie trabalhar com o uso de arquivos io_wrappers, eu criei os blocos servo. Aps a sintaxe dos blocos de srie, criei 8 verses das funes Servo_attach e Servo_write tanto na. H e arquivos. Cpp. No arquivo cpp., necessrio incluir o arquivo Servo.cpp no topo para que possamos fazer chamadas para as funes. Outra adio ao arquivo cpp. Est adicionando as definies dos oito objetos servo (Servo ServoA ;).

Depois de modificar os arquivos io_wrappers podemos voltar ao arquivo de TLC. Usando o arquivo sfunar_digitalOutput como base para os blocos de Servo, tomei a configurao servo bsico usado na varredura de demonstrao Arduino (no Arduino IDE em exemplos> Servo-> sweep). H duas coisas necessrias para fazer o trabalho de servo. Primeiro precisamos para anex-lo a uma porta e, em seguida, preciso escrever um valor a ela. Em vez de definir a pinMode (int pin) a partir io_wrappers.h Servo_attach correspondente chamado. Na seo de sadas do arquivo TLC. Que no precisa mais digitalWrite assim chamamos a funo Servo_write correspondente (int posio). Alm disso, note que os nomes da funo foram alterados para cada instncia do arquivo digitalServo.tlc.

A pea final criar os arquivos mex. Os arquivos mex so compilados a partir do arquivo c. E com base em se voc estiver em um computador de 32 ou 64 bits ou um mex32. Mex64 arquivo. Ser concluda. Para criar o arquivo, tipo simples mex no MATLAB prompt de comando "mex your_file.c". Isso ir gerar o arquivo mex. (Eu s criou. Mex32 arquivos desde que eu estou usando 32-bit Windows 7 e MATLAB)

Os blocos so simplesmente S-funes que foram mascarados (novamente eu baseei tudo sobre os blocos alvo Arduino existentes)

Quanto s reas de expanso, como mencionado no incio Arduino UNO e MEGA tanto apoio de mais de 8 servos, mas na poca eu no prevejo eu precisar de mais do que 8. No deve ser muito difcil para um usurio deste pacote para adicionar mais servos, conforme necessrio, seguindo o padro I seguido. As funes adicionais esto disponveis na biblioteca de Servo, e, portanto, os blocos podem ser criados para estes tambm igualmente seguindo a tcnica usada na criao destes blocos. Alguns usurios podem querer definir o seu servo max e min. possvel adicionar parmetros adicionais para a funo de S para max e min (e tambm definir padres deve o usurio

no quiser coloc-las). O usurio teria que adicionar os parmetros adicionais para a funo Servo_attach e tambm alterar a chamada para a funo Servo.attach que pode aceitar um ou trs parmetros.

O Alvo Arduino para Simulink e todos os seus arquivos so direitos autorais dos MathWorks.

Você também pode gostar