Manual

do

Maker

.

com

Dispenser para drone Phantom 4 Pro

Dispenser para drone Phantom 4 Pro

Fechei recentemente um projeto muito bacana, que não precisava de um acabamento comercial, mas se tratando de uma prova de conceito. Um cliente solicitou um dispenser para drone Phantom 4 Pro, que deveria ser leve, muito leve. O propósito é entregar remédios, pouca coisa, como uma caixa de comprimidos ou algo do tipo.

O drone é pequeno, tem área limitada e obviamente não podemos colocar uma caixa de geladeira sob o drone para não atrapalhar no voo. Além disso, ele tem uma câmera, que deverá apontar para baixo, quando estiver fazendo a entrega e, nesse momento ele sai do piloto automático para voo manual, onde o remédio deverá ser dispensado de uma altura aproximada de 2 metros.

Dá pra fazer muita coisa, mas com uma limitação de 150g a criatividade fica um pouco mais limitada. Bem, considerando as dimensões passadas para a caixa e a limitação de massa, optei por fazer uma caixa em depron (material utilizado em aeromodelismo para fazer o próprio avião), uma base retrátil e utilizei um Arduino Nano (do nosso parceiro MASUGUX, que tem um ótimo preço) para ler um LDR e controlar um servo motor.

Depron

Para fazer esse dispenser para drone, não havia muitas outras opções. MDF é extremamente pesado e o material que a caixa carregará não deve passar de 70g utilizando 1 servo-motor. Testei uma carga de 67g, o servo motor passou a trabalhar bastante para se manter na posição, mas estava bastante robusto, mesmo chacoalhando a caixa veemente. Considerando que o servo SG90 (recomendo a compra na MASUGUX) suporta 1kgf/cm, não tinha certeza de que ele suportaria nem 50g em 15cm de comprimento, mas como existe uma distribuição de peso sobre a plataforma, foi bem tranquilo. Lembre-se que o propósito é entregar alguns remédios, como prova de conceito, mas melhorei.

Para colar o depron, utilizei super cola com bicarbonato de sódio. Deu uma aquecida, mas sequer deformou. A resistência ficou bastante satisfatória.

drone-estagios_dispenser.webp

Alimentação

O Arduino Nano tem baixo consumo, assim como o servo motor SG90, sendo quase insignificante quando a caixa estiver vazia e chegando a aproximadamente 55mA com carga, ainda assim, não constante. Daí entrou o maior peso do conjunto.

Sendo o Arduino Nano 5V e a alimentação sendo feita pela entrada não regulada, fui obrigado a fornecer 7.4V através de duas baterias de li-ion 6800mAh. Com isso, as baterias ocasionalmente necessitarão de recarga, durando algo como 23 dias com carga contínua no dispenser.

Vale lembrar que não cogitei sequer a utilização de um circuito, já que não queria adicionar massa ao conjunto. Por isso, o LDR foi preso diretamente ao jumper, que permite estendê-lo até o ponto chave da solução. Colocar uma fonte step up poderia diminuir alguns gramas em relação à bateria, mas trocar alguns gramas por diversos dias não me pareceu tão vantajoso.

Como acionar o dispenser para drone remotamente?

Essa é a principal questão. O drone tem GPIO? Haveria a necessidade de colocar um rádio? - respondo que não, nada mais seria necessário. Como há o recurso de ligar um LED no drone, bastou utilizar esse LED como chave para acionar o dispenser para drone, através de uma leitura do LDR, acoplado à base  que contém o LED. Ou, simplesmente apertar o reset do Arduino, que manterá a porta aberta por um período preestabelecido na função setup().

Não tenho o drone, portanto fiz testes de bancada para poder desenvolver e entregar o projeto.

Como abastecer o dispenser para drone?

dispenser_drone-02.webp

Não seria uma boa ideia abrir uma porta lateral, por algumas razões. Uma delas, a fragilização da estrutura; a entrada de ar que também forçaria a estrutura e a necessidade consequente de uma trava para essa porta. A melhor solução é segurar o drone de lado, ligar o LED ou apertar o reset do Arduino Nano para abrir a porta, inserir o medicamento e então desligar o LED ou aguardar a execução do setup(), caso tenha escolhido reiniciar o Arduino. Após, coloca-se o drone no chão e ele estará pronto para decolar com a entrega!

...mas xarope pode chegar a 150g...

E se precisar entregar um xarope? Pois então, 75g é pouco. Para melhorar isso, fiz mais uma modificação, colocando um sevo-motor frontal, fazendo o papel de trava. Após fechado, pode-se colocar no drone na posição normal e os motores sequer emitirão som.

dispenser-2_servos.webp

Código

O código é bastante simples, como já deve ter imaginado. Basicamente, uma rotina dentro da função setup() para abrir e fechar a porta e uma rotina na função loop, que aguardará pelo trigger definido para o LDR. O importante a considerar aqui é a faixa de luminosidade entre aberto e fechado, além do ruído na leitura analógica. Em meus testes, sem acoplar, já consegui uma boa margem, de ~340 para escuro e <100 para claro (claro é quando o LED é ligado sobre o LDR).

#include <Arduino.h>
#include <Servo.h>

#define SERVO_PIN_DOOR   6
#define SERVO_PIN_LOCKER 5
#define DOOR_CLOSE       0
#define DOOR_OPEN        85
#define DOOR_LOCK        90
#define DOOR_UNLOCK      0
#define LDR_PIN          A2
#define SAMPLES          5
#define TRIGGER          130

int ldr_value = 0;
uint8_t i     = DOOR_OPEN;

Servo servoDoor;
Servo servoLocker;

void openDoor();
void lockControl(bool lockIt, int wait);
void closeSlowly(int sleep_before, uint8_t steps_time);
void getValueFromLDR();

void openDoor(){
  lockControl(false,1); // destrava a porta
  delay(200);
  Serial.println("Abrindo");
  servoDoor.write(DOOR_OPEN);
}

void lockControl(bool lockIt, int wait){
  delay(wait);
  if (lockIt){
    Serial.println("Travando");
      servoLocker.write(DOOR_LOCK);
      return;
  }
  Serial.println("Destravando");
  servoLocker.write(DOOR_UNLOCK);
}

void getValueFromLDR(){
  for (uint8_t i=0; i<SAMPLES;i++){
      ldr_value += analogRead(LDR_PIN); 
      delay(50);
  }
  ldr_value = ldr_value/SAMPLES;
}

void closeSlowly(int sleep_before, uint8_t steps_time){
    i = DOOR_OPEN;

    delay(sleep_before);

    Serial.println("fechando");
    while (i > 0){
        servoDoor.write(i);
        delay(steps_time);
        i -= 1;
    }
    lockControl(true,50);
}
/* Quando for colocar remédio dentro do dispenser, basta apertar o botão de reset. 
A porta se abrirá e se manterá aberta por um período maior, definido no delay.
Para dispensar o remédio, a porta se fecha com delay e velocidade definidos na função
closeSlowly() */
void setup() {
  servoLocker.attach(SERVO_PIN_LOCKER);
  lockControl(false,0);
  delay(500);
  servoDoor.attach(SERVO_PIN_DOOR);
  
  Serial.begin(9600);
  closeSlowly(5000,10); //fecha a porta iniciando da posição de aberta
}

void loop() {
  
  getValueFromLDR();
  
  Serial.println(ldr_value);

  if (ldr_value < TRIGGER){
      openDoor();
      while (ldr_value < TRIGGER){
        getValueFromLDR();
        delay(100);
        Serial.print("waiting: ");
        Serial.println(ldr_value);
      }
      closeSlowly(2000,10);
  }
  ldr_value = 0;
  delay(500);
   
}

Wiring

Nada de circuito, nada de nada. A prioridade era ser leve, cada grama conta. Por isso, a conexão foi feita diretamente entre os componentes. O programa utilizado foi o Fritzing, eu cortei a imagem para ficar menor, mas o site é esse.

O encapsulamento do LDR ficou desse jeito (utilizando canudo termo-retrátil):

dispenser-encapsulamento_ldr.webp

E o wiring é esse (mas usando baterias de li-ion 18650) para 1 servo-motor. Se for adicionar um segundo, basta utilizar o pino digital D6 (já implementado no código):

drone_dispenser-wiring.webp

Desenho para corte a laser

Esse fiz apenas para o cliente, mas depois de provar o conceito é bom ter um acabamento melhor. Talvez trocar o eixo por latão só por beleza, por exemplo.

dispenser-cad.png

Vídeo

Explico superficialmente o que está descrito no artigo para quem não chegou ao vídeo através do artigo (costumo colocar o vídeo algum tempo depois de publicar o artigo relacionado), mas a parte importante a mostrar para você que leu o o texto é o funcionamento do conceito na bancada. Espero que goste e, se não for inscrito, inscreva-se no canal, clique no sininho para receber notificações e não se esqueça de fazer-me sorrir, largando um joinha no vídeo, valeu?

DobitAoByteBrasil no Youtube.

Curso "Raspberry para hobistas e profissionais"

Fiz um curso que está na Udemy por R$21,00 usando o cupom de desconto DOBITAOBYTE. Aproveite a oportunidade de contribuir com o blog enquanto recebe em troca 3 horas de vídeos instrutivos!

Projetos para sua empresa

Manual do Maker é mais do que um blog. Somos uma empresa de serviços, cuja principal atividade é desenvolvimento e implementação de projetos embarcados e IoT. Trabalhamos dentro da legalidade, emitindo nota fiscal de serviço, elaboração de requisitos de sistema e documentação do código. Não importa onde você esteja, montamos a prova de conceito e gravamos vídeo do projeto antes de entregar o código e/ou hardware configurado.

Em parceria com a AFEletrônica, projetamos e produzimos hardware industrial (também com nota), para lhe entregar a melhor experiência para seu projeto.

Se precisar de treinamento para sua equipe, palestra, projetos com requisitos, perícia forense digital, consultoria, auditoria, software ou hardware, somos quem você procura! Entre em contato: vendas@afeletronica.com.br Ou direto comigo: djames.suhanko@gmail.com

Será um prazer tê-lo como nosso cliente!

  Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.