collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Ontem às 15:31]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: BallDuino  (Lida 27801 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #30 em: 01 de Abril de 2009, 13:20 »
Pois já estou farto de fazer "tuning" ao código, Já quase todas as variáveis Int estão em Byte  ;D

Estou sempre a tentar reduzir o código...
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re:BallDuino
« Responder #31 em: 01 de Abril de 2009, 13:22 »
Ok, depois vejo mais atentamente.

Uma excelente técnica, é em vez de andares a importar as bibliotecas na totalidade, abres com um editor de texto, e copias para o teu código apenas as variáveis e métodos de que precisas, embora acredite que o compilador já as descarte se não forem chamadas, não custa experimentar (em vez de fazeres a todas, faz só um teste, com uma delas, num fazes include, no outro fazes copy past de tudo menos um método, e verificas se existe diferenças no tamanho).

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:BallDuino
« Responder #32 em: 01 de Abril de 2009, 13:24 »
Ah pois, são as musiquinhas, hehehe...
2 dicas para encolher o código:

a) Experimenta declarar as tuas funções como static, só as tuas (é só adicionar "static" antes da declaração, tipo "static void ...")

b) As strings ocupam espaço de programa e SRAM (quando o programa arranca elas são copiadas da FLASH para a SRAM). É possível colocar as strings na EEPROM, mas depois tens que usar outras funções para as enviar por porta série; não sei se o Arduino tem algum suporte para isso. Mas podes sempre fazer uma função tua que aceita um endereço de EEPROM, lê os caracteres e despeja-os para a porta série, pode ficar mais curto.

Em relação à alimentação, dá uma olhadela nos conversores DC-DC por exemplo da National, vais encontrar circuitos bem pequenos.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #33 em: 01 de Abril de 2009, 14:02 »
Ah pois, são as musiquinhas, hehehe...
2 dicas para encolher o código:

a) Experimenta declarar as tuas funções como static, só as tuas (é só adicionar "static" antes da declaração, tipo "static void ...")

b) As strings ocupam espaço de programa e SRAM (quando o programa arranca elas são copiadas da FLASH para a SRAM). É possível colocar as strings na EEPROM, mas depois tens que usar outras funções para as enviar por porta série; não sei se o Arduino tem algum suporte para isso. Mas podes sempre fazer uma função tua que aceita um endereço de EEPROM, lê os caracteres e despeja-os para a porta série, pode ficar mais curto.

Em relação à alimentação, dá uma olhadela nos conversores DC-DC por exemplo da National, vais encontrar circuitos bem pequenos.

Já consegui reduzir para 13414 já a chamar as funcoes do LCD.  Obrigado retirei a lib wire.h e pus static em todas as minhas funcoes.

Funcionou. Obrigado

Mesmo assim vai levar o upgrade para o 328  ;D
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #34 em: 01 de Abril de 2009, 15:07 »
Bem tenho mesmo que fazer upgrade ao Atmega

Quando chamo a rotina putstr("BALLDUINO"); do Lcd o programa aumenta bastante. consigo compila-lo mas depois o Robot fica completamente bloqueado.

Penso mesmo que é falta de memória, pois a rotina nem se quer está no setup() e ele bloqueia antes...

Vou esperar pelos ATmega328 para testar melhor o LCD.

Entretanto vou melhor o sistema de mola que abre e fecha a bola. esse sistema está um pouco empenado...
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:BallDuino
« Responder #35 em: 01 de Abril de 2009, 15:48 »
Se passares as strings para EEPROM, libertas espaço de FLASH e SRAM. Faz umas experiências. É que ainda por cima a EEPROM é sempre tão pouco usada. Exemplo que deve funcionar em Arduino (tou a codificar meio de cabeça):

Código: [Seleccione]
static const char EEMEM geWellcomeMsg[] = "BALLDUINO";

void USendEE (const char *str)
{
    while (1)
    {
        char ch = ReadMEM((byte*)(str++));
        Serial.print (ch);
        if (!ch) break;
    }
}

...

USendEE(geWellcomeMsg);

O atributo EEMEM diz ao compilador para colocar a variável na EEPROM. Depois não sei é se o bootloader do Arduino está preparado para gravar dados na EEPROM...

Ah!!! É verdade.... o static também se aplica às variáveis globais (só as globais) usadas apenas dentro do mesmo ficheiro (penso que no teu caso serão todas). Declarar variáveis globais e funções como static diz ao compilador que elas só são usadas no ficheiro onde estão a ser declaradas, e então ele passa a poder fazer optimizações que não podia fazer se outros módulos (ficheiros) usassem as variáveis/funções (por exemplo, pode manter uma variável mais tempo em registos). Em C/C++, quando declaramos uma variável ou função ela é exportada por omissão.
« Última modificação: 01 de Abril de 2009, 15:50 por Njay »

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #36 em: 01 de Abril de 2009, 23:32 »
Normalmente para escrever na eeprom do arduino faço assim:

EEPROM.write(addr, val);

Mas não sabia que podia escrever strings. pensava que fosse bytes 0..255

Se fizerem uma função que "escreva" strings na eeprom. Acho que era muito bem vinda. talvez convertendo o Ascii ...
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:BallDuino
« Responder #37 em: 02 de Abril de 2009, 00:14 »
Strings são arrays de bytes como outros quaisquer. Simplesmente o último byte de cada string é um zero, para marcar o fim da mesma.

O que vou dizer a seguir aplica-se ao AVR-GCC, sobre o qual o Arduino funciona. Não sei como o ambiente de programação do Arduino gere isto, mas em GCC é assim que funciona.
Quando declaras variáveis com EEMEM, o compilador gera uma secção especial no .ELF com esses dados. Depois aplica-se-lhe um utilitário chamado objcopy que extrai do .ELF um ficheiro só com os bytes a colocar na EEPROM:

objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex prog.elf eeprom.eep

O ficheiro .eep pode ser programado directamente na EEPROM do AVR, quando é usado um programador ICSP ou um bootloader que o suporte... não sei se o bootloader do Arduino suporta a EEPROM. Não é o programa a correr no Arduino que vai lá gravar os dados na EEPROM (também o pode fazer, mas no caso das strings, como são constantes, a gravação é feita "cá fora", evitando assim ocupar espaço de programa ou SRAM).
Uma hipótese mais trabalhosa mas que não exige suporte do bootloader seria ter um outro programa só para gravar as strings na EEPROM, e só depois gravar o programa "principal".
« Última modificação: 02 de Abril de 2009, 02:53 por Njay »

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #38 em: 02 de Abril de 2009, 00:59 »
Algumas alterações a implementar no robot: Versão 1.1

- Acrescentar mais um led transmissor IR para detectar objectos mais depressa e com algum angulo.
- Retirar o sensor de temperatura (por agora não faz sentido) disponibiliza um pin analógico.
- Alterar a pilha e o regulador de tensão para uma bateria de litium e um booster de 3.5v->5Volts. (Encomendados)
- Upgrade do ATMega168 paar ATMega328 (encomendado)
- Melhorar o sistema mecanico de abertura da bola com umas melhores molas e um braço do servo central maior.
- Alterar a Bola "Shield" para uma bola maior. Assim os componentes ficam mais protegidos (pelo menos da minha filha...)
- Também voltar abrir os servos, pois o potenciometro foi colado com cola para rotação continua, mas acho que descolaram um pouco.

Documento actualizado mas ainda em construção: (detalhe com legendas)

http://www.2mhi.com/icar/arduino/BallDuino/BallDuino 1.1.pdf

Código Actualizado mas inacabado:
- Falta rotinas para o receptor de rádio
- Falta mais Programas de acção do robot. tem 2 e no total terá 9
- Implementar rotinas de mensagens para LCD
- e mais algumas coisitas  8)

http://www.2mhi.com/icar/arduino/BallDuino/BallDuino_1_0.pde

Alguma Fotos: (Não liguem á fita isoladora a segurar o lcd e nem aos cabos dos servos que tem que ser encortados)


http://www.2mhi.com/icar/arduino/BallDuino/ballduino13.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino14.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino15.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino16.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino17.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino18.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino19.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino20.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino21.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino22.jpg << Maior


http://www.2mhi.com/icar/arduino/BallDuino/ballduino23.jpg << Maior

Alguns Videos:

Primeira tentativa fracassada  ;D
http://video.google.com/videoplay?docid=-5446448522268204842

Bingo. Iceberg...
http://video.google.com/videoplay?docid=5182227938267492505

Iceberg again
http://video.google.com/videoplay?docid=7286719011576284535

Anotação: Proteger o robot contra terroristas de 2 anos  :o
http://video.google.com/videoplay?docid=5775671874105987782

Mecanica de abertura um pouco desajeitada  :-\
http://video.google.com/videoplay?docid=8999674077511618211
« Última modificação: 02 de Abril de 2009, 09:51 por iCAR »
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.064
  • El RoboSapiens
Re:BallDuino
« Responder #39 em: 02 de Abril de 2009, 01:07 »
boa aparencia nao lhe falta ;D

parabens :)

Offline Rebel

  • Mini Robot
  • *
  • Mensagens: 153
    • Raspberry Pi
Re:BallDuino
« Responder #40 em: 02 de Abril de 2009, 10:29 »
Está mesmo muito fixe.
Também quero um ....

Parabéns.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:BallDuino
« Responder #41 em: 02 de Abril de 2009, 11:12 »
É realmente um candidato ao robot do mês  ;)

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #42 em: 02 de Abril de 2009, 11:28 »
É realmente um candidato ao robot do mês  ;)

Onde me inscrevo ?  ;D

Acabei de perder a cabeça e encomedei baterias de litium novas, sensores aproximação IR, mais servos, power booster
enfim lá se foi o cratão de crédito  ::)
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re:BallDuino
« Responder #43 em: 02 de Abril de 2009, 11:34 »
É realmente um candidato ao robot do mês  ;)

Onde me inscrevo ?  ;D

Acabei de perder a cabeça e encomedei baterias de litium novas, sensores aproximação IR, mais servos, power booster
enfim lá se foi o cratão de crédito  ::)
Haha... é agora que o iCar vai passar a iRobot de vez :D

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re:BallDuino
« Responder #44 em: 02 de Abril de 2009, 11:38 »
Realmente é um bixinho tremendo. Acho que são não sai mais.  :P
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas