Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Sistema Portátil de Câmera de Vigilância Remota

Componentes e Materiais

SparkFun Arduino Pro Mini 328 – 5V/16MHz 1
Pneu + Motor DC com Redutor + Suporte 1
Driver de Motor Dual H-Bridge L298 SparkFun 1
Raspberry Pi 3 Model B 1
Módulo Câmera Raspberry Pi 1

Ferramentas e Máquinas Necessárias

Adaptador USB para Serial FTDI FT232RL
Arduino IDE
Furadeira
Serra de Lâmina Fina
Chaves de Fenda
Ferro de Solda (genérico)
Cortador de Fios

Sobre o Projeto

Este projeto interessante, mas complicado, cobrirá coisas desde o design e construção de um robô, até configurações avançadas no Linux (Raspberry Pi) para construir um aplicativo Android e controlar o robô.

Dito isso, é mais ambicioso que os projetos médios, mas acho que você terá muito o que aprender examinando algumas ideias aqui ou até replicando o projeto inteiro.

Primeiro, construiremos o robô usando acrílico, chapas plásticas, motores DC com redutores e vários componentes eletrônicos. O dispositivo será capaz de mover independentemente as duas rodas dianteiras e poderá usar seu farol. Então, vamos configurar o Raspberry Pi alimentando o robô e configurar o projeto e instalar várias dependências. Depois, vamos construir e instalar um app Android e usá-lo para controlar o robô remotamente usando a câmera e uma conexão WiFi.

As tecnologias e conceitos que exploraremos aqui:

Passo 1: Coisas Necessárias

Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota

Peças:

  1. Chapa de acrílico
  2. Chapa plástica (também pode usar chapa de acrílico aqui)
  3. Cola
  4. Pneu + Motor DC com redutor + suporte. Pequenas porcas e parafusos, espaçadores hexagonais de metal
  5. 2x roda omnidirecional
  6. Pequena lanterna LED (será transformada em farol)
  7. Arduino Pro Mini 328p
  8. 2x sensor de obstáculo infravermelho
  9. PCB
  10. Transistor NPN (para acionar o farol)
  11. Regulador L7805CV 5V
  12. H-bridge L298
  13. Resistor 220 Ohms
  14. Conector USB macho
  15. Conector Micro USB macho
  16. Vários fios
  17. Regulador 3.3V (para comunicação entre Arduino e Raspberry Pi)
  18. Conectores PCB macho e fêmea
  19. Interruptor Liga/Desliga
  20. Conector XT-60 fêmea LiPo
  21. Bateria LiPo 2S 1300 mAh com conector XT-60
  22. Power bank 5V
  23. Raspberry Pi 3
  24. Cartão Raspberry Pi
  25. Case Raspberry Pi
  26. Câmera Raspberry Pi

Ferramentas:

  1. Adaptador USB para serial FTDI FT232RL para programar o Arduino Pro Mini
  2. Arduino IDE
  3. Furadeira
  4. Serra de lâmina fina
  5. Chaves de fenda
  6. Ferro de solda
  7. Cortador de fios

Habilidades:

  1. Soldagem, confira este tutorial
  2. Programação básica Arduino, este tutorial pode ser útil
  3. Configuração de serviços Linux, instalação de pacotes

Passo 2: Construindo a Plataforma do Robô

O robô que vamos construir terá as seguintes especificações:

Não esqueça de verificar as imagens para detalhes importantes e dicas de construção.

Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota

Vamos construir o robô a partir de acrílico ou plástico rígido, usei ambos mas você pode escolher o que quiser.

A placa base será 18 x 13 cm. Na placa base, os motores DC serão fixados com suportes metálicos, porcas e parafusos. O H-bridge será montado no meio da placa voltado para o chão. As rodas traseiras serão fixadas usando espaçadores hexagonais metálicos de 2 cm (um lado macho, um lado fêmea).

Um furo grande perto do H-bridge é necessário para conectar a eletrônica no lado superior.

A parte superior do robô consistirá em duas placas em formato "L", uma será 12 x 13 cm e a outra 6,5 x 13 cm. As placas plásticas serão coladas juntas. Estas placas fornecerão cobertura para a eletrônica, um local para montar o farol e um suporte para o case do Raspberry Pi. A parte superior será fixada à parte inferior usando espaçadores hexagonais metálicos de 6 cm.

Passo 3: Construindo a Eletrônica

Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota

Pinout (Arduino):

Construindo a PCB, Montagem

1. No passo anterior já acomodamos o H-bridge no lado do chão do robô. Também precisaremos instalar os dois sensores infravermelhos, um na frente e um atrás. Vamos montá-los no chassi usando uma pequena chapa metálica. A chapa metálica será em formato "L", e terá dois furos. Usando porcas e parafusos, vamos instalá-la no chassi. Os sensores ficarão no meio do chassi, um na frente e um atrás.

2. Próxima a parte do farol, usei uma lanterna LED de 5 volts para isso. Cortei o farol expondo apenas a parte da "cabeça" e soldei dois fios para alimentá-lo. Então colei o farol no meio da parte superior do robô e furei um buraco perto do farol para passar os cabos e soldei um pequeno conector fêmea de dois fios nele.

3. Montando o case do Raspberry Pi. Você precisará de um Raspberry Pi, uma câmera Pi, cartão de memória de pelo menos 4 GB, um conector de câmera Pi. Insira o cartão com o último Raspbian instalado, então pegue o conector da câmera Pi, insira-o cuidadosamente no Raspberry Pi, então insira na câmera, então feche o case.

Se você não sabe como instalar o sistema operacional Raspbian, verifique este link.

Para mais informações sobre como instalar a câmera e habilitá-la, verifique este artigo oficial.

4. Construindo a PCB com os componentes eletrônicos principais. Anexei os esquemáticos Fritzing em formato fzz e como imagem. Você pode usá-lo como referência de como construir a eletrônica.

Passos de Soldagem:

a. Corte os conectores PCB fêmea, há dois conectores de 12 pinos para o microcontrolador e dois conectores de 5 pinos, há dois conectores de 3 pinos para os sensores IR, um conector de 6 pinos para o H-bridge e um conector de pino para comunicação Raspberry Pi (terra, TX, RX)

b. Após todos os conectores serem cortados, devem ser soldados no verso da PCB

c. Solde o conector KF301-2P

d. Solde o transistor NPN e o resistor correspondente à sua base

e. Solde o regulador L7805CV 5V

f. Solde o regulador de 3.3 volts na linha TX do Arduino para Raspberry Pi

g. Solde os pinos machos no Arduino Pro Mini

h. Solde todos os fios finos vermelho(+), preto(-), e branco(sinal) de acordo com o esquemático Fritzing

i. Solde um conector macho na protoboard para o farol

5. Conectores

a. Construa um conector do power bank 5V USB para o Raspberry Pi e Arduino, você precisará de um conector USB macho tipo A, um conector micro USB macho, fios preto e vermelho, tubo termorretrátil e um conector protoboard fêmea-fêmea. Primeiro corte o conector fêmea-fêmea em duas partes, estas partes irão nos pinos macho negativo e positivo do Arduino. O conector USB tipo A enviará energia para o Arduino e também para o Raspberry Pi usando um conector micro USB. Verifique as imagens para dicas de soldagem USB.

b. Construa o conector para a bateria LiPo para a placa eletrônica, você precisará de um conector XT-60 fêmea LiPo, fios vermelho e preto, tubo termorretrátil e um pequeno interruptor capaz de lidar com 10A. O fio preto será conectado diretamente do XT-60 à placa eletrônica (conector parafuso KF301-2P), o fio vermelho será conectado através do pequeno interruptor

c. Conecte os dois sensores IR do robô aos conectores fêmea correspondentes na PCB usando conectores protoboard fêmea-macho

d. Conecte o H-bridge aos conectores fêmea de 6 pinos na PCB usando conectores protoboard macho-fêmea

e. Conecte os terminais positivo e negativo dos motores ao H-bridge

f. Conecte a alimentação principal do H-bridge ao conector parafuso KF301-2P na PCB

6. Antes de colocar o Arduino na PCB, verifique tudo usando uma lupa e um multímetro

Passo 4: Código Arduino

Primeiro preciso responder uma pergunta importante: Por que uma camada intermediária Arduino tem que existir e não conectar diretamente o Pi à eletrônica?

  1. É mais modular, você pode reutilizar o robô Arduino em outro projeto sem o Pi
  2. Por segurança, é mais barato substituir um Arduino Pro Mini de $3 do que substituir um Pi ($35)
  3. Um Arduino não é interrompido pelo sistema operacional como o Pi, então é mais eficiente implementar controles PWM para os motores, fazer polling dos sensores frontal e traseiro algumas vezes por segundo
  4. Se um erro ocorrer no script Python, o robô pode rodar para sempre drenando as baterias e provavelmente danificando-o ou pegando fogo se não supervisionado, em um sketch Arduino uma proteção é mais confiável porque não depende de um sistema operacional
  5. É mais fácil depurar um sistema desacoplado

Ok, então cobri a parte do Porquê, vou explicar o sketch Arduino um pouco. Basicamente faz duas coisas:

1. Recebe comandos de motor e luz da linha serial e aciona os motores ou alterna a luz

Por exemplo:

2. Faz polling dos sensores infravermelhos da frente e traseira do robô e envia dados de distância pela linha serial

Primeiro você precisará baixar e instalar esta biblioteca:

O código principal está localizado no repositório GitHub aqui, ou você pode copiar e colar abaixo.

Carregue o código no Arduino usando um adaptador FTDI. Agora você pode dar comandos ao robô para vê-lo funcionar, para isso basta conectar a segunda linha serial e enviar comandos de motor ou luz através dela. Uma forma de fazer isso é usando um módulo Bluetooth como HC-05 e conectá-lo a um telefone usando um aplicativo Bluetooth. Então dê comandos seriais como "L:1"

// source for TextMotorCommandsInterpretter: "https://github.com/danionescu0/arduino/tree/master/libraries/TextMotorCommandsInterpretter"
#include <SoftwareSerial.h>
#include <TextMotorCommandsInterpretter.h>

const char MOTOR_COMMAND = 'M';
const char LIGHT_COMMAND = 'L';

/**
 * quanto tempo o comando de motor terá efeito em ms
 * um comando de motor entrante durará no máximo maxDurationForMottorCommand
 * se não for reiniciado por outro comando de motor
 */
const long maxDurationForMottorCommand = 300;
// ajuste este valor para limitar velocidade do robô
const byte maxPwmValue = 230;

// Quanto tempo entre transmissões sucessivas de distância em ms
const long transmitingInterval = 500;

const int maxObstacleDetection = 1000; // leitura analógica max detecção
const int minObstacleDetection = 500;  // leitura analógica min detecção

const byte FLASH_PIN = 3;
const byte RIGHT_MOTOR_PWM_PIN = 5;
const byte RIGHT_MOTOR_EN1_PIN = A4;
const byte RIGHT_MOTOR_EN2_PIN = A5;
const byte LEFT_MOTOR_PWM_PIN = 6;
const byte LEFT_MOTOR_EN1_PIN = A3;
const byte LEFT_MOTOR_EN2_PIN = A2;
const byte FRONT_DISTANCE_SENSOR = A0;
const byte BACK_DISTANCE_SENSOR = A1;

SoftwareSerial masterComm(11, 10); // RX, TX
TextMotorCommandsInterpretter motorCommandsInterpretter(-50, 50, -50, 50);

String currentCommand;
long lastCheckedTime;
long lastTransmitTime;
boolean inMotion = false;

void setup() {
  Serial.begin(9600);
  masterComm.begin(9600);
  masterComm.setTimeout(10);
  pinMode(FLASH_PIN, OUTPUT);
  pinMode(LEFT_MOTOR_PWM_PIN, OUTPUT);
  pinMode(LEFT_MOTOR_EN1_PIN, OUTPUT);
  pinMode(LEFT_MOTOR_EN2_PIN, OUTPUT);
  pinMode(RIGHT_MOTOR_PWM_PIN, OUTPUT);
  pinMode(RIGHT_MOTOR_EN1_PIN, OUTPUT);
  pinMode(RIGHT_MOTOR_EN2_PIN, OUTPUT);
  lastCheckedTime = millis();
  lastTransmitTime = millis();
}

void loop() {
  if (masterComm.available() > 0) {
    currentCommand = masterComm.readString();
    processCommand();
  }
  if (inMotion && millis() - lastCheckedTime > maxDurationForMottorCommand) {
    stopMotors();
  }
  if (millis() - lastTransmitTime > transmitingInterval) {
    lastTransmitTime = millis();
    masterComm.print(getObstacleData());
    Serial.print(analogRead(BACK_DISTANCE_SENSOR));Serial.print("---");
    Serial.println(getObstacleData());
  }
  /* FOR DEBUG
  motorCommandsInterpretter.analizeText("M:-14:40;");
  Serial.write("Left==");Serial.println(motorCommandsInterpretter.getPercentLeft());
  Serial.write("Right==");Serial.println(motorCommandsInterpretter.getPercentRight());
  delay(10000);
  */
}

String getObstacleData() {
  int frontDistance = analogRead(FRONT_DISTANCE_SENSOR);
  int backDistace = analogRead(BACK_DISTANCE_SENSOR);
  frontDistance = map(frontDistance, maxObstacleDetection, minObstacleDetection, 0, 10);
  backDistace = map(backDistace, maxObstacleDetection, minObstacleDetection, 0, 10);
  return String("F=" + String(frontDistance) + ":B=" + String(backDistace) + ";");
}

void processCommand() {
  switch (currentCommand.charAt(0)) {
    case (MOTOR_COMMAND):
      steerCar();
      break;
    case (LIGHT_COMMAND):
      toggleLight(currentCommand.charAt(2));
      break;
  }
}

void steerCar() {
  motorCommandsInterpretter.analizeText(currentCommand);
  float percentLeftMotor = motorCommandsInterpretter.getPercentLeft();
  float percentRightMotor = motorCommandsInterpretter.getPercentRight();
  Serial.write("Left=");Serial.println(percentLeftMotor);
  Serial.write("Right=");Serial.println(percentRightMotor);
  setMotorsDirection(motorCommandsInterpretter.getDirection());
  analogWrite(LEFT_MOTOR_PWM_PIN, percentLeftMotor * maxPwmValue);
  analogWrite(RIGHT_MOTOR_PWM_PIN, percentRightMotor * maxPwmValue);
  inMotion = true;
  lastCheckedTime = millis();
}

void setMotorsDirection(boolean forward) {
  if (forward) {
    digitalWrite(LEFT_MOTOR_EN1_PIN, HIGH);
    digitalWrite(LEFT_MOTOR_EN2_PIN, LOW);
    digitalWrite(RIGHT_MOTOR_EN1_PIN, HIGH);
    digitalWrite(RIGHT_MOTOR_EN2_PIN, LOW);
  } else {
    digitalWrite(LEFT_MOTOR_EN1_PIN, LOW);
    digitalWrite(LEFT_MOTOR_EN2_PIN, HIGH);
    digitalWrite(RIGHT_MOTOR_EN1_PIN, LOW);
    digitalWrite(RIGHT_MOTOR_EN2_PIN, HIGH);
  }
}

void stopMotors() {
  Serial.println("Stopping motors");
  analogWrite(LEFT_MOTOR_PWM_PIN, 0);
  analogWrite(RIGHT_MOTOR_PWM_PIN, 0);
  inMotion = false;
}

void toggleLight(char command) {
  Serial.println("Toggle light");
  if (command == '1') {
    digitalWrite(FLASH_PIN, HIGH);
  } else {
    digitalWrite(FLASH_PIN, LOW);
  }
}

Passo 5: Instalando e Configurando o Projeto Raspberry Pi e Dependências

Como funciona:

Sistema Portátil de Câmera de Vigilância Remota

a. O app Android mostra o streaming uv4l dentro de uma webview. O processo uv4l roda no Raspberry Pi, captura entrada de vídeo da câmera e faz streaming. É uma ferramenta incrível com muitos recursos.

b. Usando controles dentro do app Android, comandos de luz e motores são enviados ao servidor MQTT.

c. O servidor Python dentro do container Docker no Raspberry Pi escuta comandos MQTT e os passa usando interface serial para o Arduino. A placa Arduino controla os motores e as luzes.

d. O Arduino detecta distâncias na frente e atrás do robô e envia os dados através da interface serial para o servidor Python, o Python os encaminha para o MQTT e eles são captados pela interface Android e mostrados ao usuário.

Primeiro você precisará de um Raspbian totalmente instalado e configurado no Raspberry Pi, e a câmera precisa ser fisicamente conectada e configurada. Também toda a configuração será feita via SSH, então é bom ter isso configurado.

Não podemos cobrir todas as coisas básicas aqui, mas tente estes links se necessário:

Se você não sabe como instalar o sistema operacional Raspbian, verifique este link. Para mais informações sobre como instalar a câmera e habilitá-la, verifique este artigo oficial.

Para como configurar SSH no Raspbian, verifique isto.

Se você deseja controlar seu robô usando o app Android de fora do WiFi, deve considerar port forwarding no seu roteador WiFi, caso contrário você ficará restrito a usar seus endereços IP locais dentro do seu WiFi.

Para descobrir seu endereço IP local no Raspberry Pi use "ifconfig":

ifconfig ......... eth0 Link encap:Ethernet HWaddr b8:27:eb:16:e7:ff inet6 addr: fe80::ff00:f22f:9258:b92b/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ........ wlan0 Link encap:Ethernet HWaddr 00:c1:41:00:10:f6 inet addr:192.168.0.102 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::e1f4:5112:9cb2:3839/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1678396 errors:0 dropped:0 overruns:0 frame:0 TX packets:381859 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:259428527 (247.4 MiB) TX bytes:187573084 (178.8 MiB) ..... 

Estamos interessados no wlan0 inet addr, no nosso caso "192.168.0.102"

As portas a serem encaminhadas (padrões) são: 9090 para uv4l e 1883 para mosquitto. Você pode encaminhar estas portas para as mesmas portas de saída se não forem banidas pelo firewall do provedor de internet ou outras portas.

Port forwarding é algo feito diferentemente em cada roteador, aqui estão alguns tutoriais: este, e você também pode tentar buscar no google "port forwarding seu_modelo_roteador" para ver resultados mais relevantes.

Pré-requisitos

a. Instale git usando linha de comando

b. Clone o projeto GitHub na pasta home:

A localização da pasta é importante porque no docker-compose.yml a localização é hardcoded como: /home/pi/robot-camera-platform:/root/debug Se você precisar mudar a localização, por favor mude o valor no docker-compose também

git clone https://github.com/danionescu0/robot-camera-platform.git

c. Desative o console serial do Pi, se você não sabe como fazer isso, verifique este link

Instalar Streaming UV4L

chmod +x uv4l/install.sh
chmod +x uv4l/start.sh
sh ./uv4l/install.sh

Se isso falhar ou você precisar descobrir mais detalhes sobre uv4l, verifique este tutorial.

Configuração

a. Editando uv4l/start.sh você pode configurar os seguintes aspectos do streaming de vídeo: senha, porta, taxa de quadros, largura, altura, rotação e alguns outros aspectos menores

b. Edite config.py e substitua senha com sua própria senha que você definiu no servidor mosquitto

c. Edite docker-container/mosquitto/Dockerfile e substitua esta linha

RUN mosquitto_passwd -b /etc/mosquitto/pwfile user sua_senha

com seu próprio usuário e senha para mosquitto

d. Edite config.py e substitua porta serial e baud rate com os seus, recomendo manter o baud rate. Se quiser mudar, não esqueça de editar no sketch Arduino também

Testar instalação uv4l

a. Inicie:

sh ./uv4l/start.sh

b. Teste no navegador no endereço: https://seu_ip:9090/stream

c. Pare:

sudo pkill uv4l

Instalar Docker e Docker Compose

Sobre instalação Docker: https://www.raspberrypi.org/blog/docker-comes-to-...

Sobre instalação Docker Compose: https://www.raspberrypi.org/blog/docker-comes-to-...

Início Automático de Serviços no Reboot/Startup

Fazendo os serviços iniciarem automaticamente, você elimina a necessidade de logar manualmente via SSH e então ativar todos os serviços à mão, vamos fazer isso usando systemctl.

a. Copie os arquivos da pasta systemctl para /etc/systemd/system/

b. Habilite serviços

sudo systemctl enable robot-camera.service
sudo systemctl enable robot-camera-video.service

c. Reinicie

d. Opcional, verifique status:

sudo systemctl status robot-camera.service
sudo systemctl status robot-camera-video.service

Passo 6: Configurando e Construindo o Aplicativo Android

Quase terminamos, neste passo vamos instalar o aplicativo Android. Estes são todos os pré-requisitos:

1. Clone o projeto GitHub:

git clone https://github.com/danionescu0/android-robot-camera

Os próximos passos envolvem configurar seu ambiente, vou apenas enumerá-los e dar um link para um tutorial especializado, caso você não saiba como fazer.

2. Ative opções de desenvolvedor no seu telefone Android. Saiba mais aqui: https://developer.android.com/studio/debug/dev-opt...

3. Baixe e instale Android Studio: https://developer.android.com/studio/index.html?ut... e isto https://www.javaworld.com/article/3095406/android/...

4. Importe projeto: https://developer.android.com/studio/intro/migrate...

Agora vamos configurar as credenciais de streaming e MQTT:

5. Edite ./app/src/main/values/passwords.xml e configure MQTT e streaming

O host MQTT deve ser algo como: 1883

O host de streaming deve ser algo como:

6. Carregue e execute a aplicação

Passo 7: Usando o Robô e Depuração

Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota
Sistema Portátil de Câmera de Vigilância Remota

Usando o App

A aplicação tem apenas uma tela principal, no lado esquerdo da tela a imagem do streaming é exibida. No lado direito estão os controles. O controle principal é um volante, toque no volante na direção que deseja que o robô mova. Abaixo do volante há um botão de farol, toque para alternar a luz.

No canto superior direito há um texto como: "- Batt Connected".

Depuração pode ser feita em múltiplas camadas:

1. Na camada Arduino

2. Na camada Raspberry Pi

pi@raspberrypi:~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
473a56da2230 dockercontainer_python-server "python /root/debu..." 9 months ago Up 4 hours dockercontainer_python-server_1
3e0b1933d310 robot-camera-mosquitto "/usr/bin/entry.sh..." 9 months ago Up 4 hours 0.0.0.0:1883->1883/tcp dockercontainer_mosquitto_1
pi@raspberrypi:~ $ netstat -nltp
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::1883 :::* LISTEN -
tcp6 0 0 :::5900 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
pi@raspberrypi:~ $ ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 Jan 14 19:59 /dev/ttyS0
sudo systemctl start robot-camera.service
picocom -b 9600 /dev/ttyS0
# agora envie comandos de motor e luz para testar o robô

3. Camada Aplicação Android

Passo 8: Outros Casos de Uso, Estendendo o Código

Outro caso de uso é um robô seguidor de objetos. O robô seguirá um objeto de uma cor específica e limite de tamanho.

Verifique acima para o vídeo.

Como isso está fora do escopo deste tutorial, vou apenas dar algumas dicas:

Primeiro instale dependências usando pip, o processo de instalação será bastante lento

sudo pip3 install -r /home/pi/robot-camera-platform/navigation/requirements.txt

Em navigation/config_navigation.py você encontrará:

hsv_bounds = ( (24, 86, 6), (77, 255, 255) )
object_size_threshold = (10, 100)

HSV significa matiz, saturação, valor, e para nossa detecção de objeto por cor funcionar, tem um limite inferior e superior, a cor do nosso objeto terá que estar neste intervalo para ser detectado. Aqui você pode encontrar um detector visual de limite HSV de objeto.

Limite de tamanho do objeto significa o menor e maior raio do objeto (em porcentagens da largura) que será considerado uma detecção.

python3 object_tracking.py colored-object --show-video

OU Execute o script de rastreamento de objeto sem saída de vídeo:

python3 object_tracking.py colored-object

Acho que a principal vantagem desta plataforma é versatilidade, pode ser adaptada facilmente a outros usos interessantes, algumas das minhas ideias:

Sendo este um projeto muito complexo, assumo que haverá erros, apreciarei se você me perguntar qualquer coisa na área de comentários.

Se você gostou do meu projeto, inscreva-se no meu canal do YouTube para mais coisas interessantes.

Código

Aplicação Android

https://github.com/danionescu0/android-robot-camera

Repositório principal para código Arduino, Python

https://github.com/danionescu0/robot-camera-platform

Esquemáticos

sketch_nWf7cZeUWL.fzz

Repositório principal para código Arduino, Python

O repositório principal
https://github.com/danionescu0/robot-camera-platform

Aplicação Android

https://github.com/danionescu0/android-robot-camera

Processo de manufatura

  1. A Evolução e Design das Câmeras Modernas
  2. Entendendo Lentes de Câmera: Design, História e Inovações Futuras
  3. MrRobot: Robô Rapiro Controlado por Ubuntu Mobile com Voz, Toque e Interação por Movimento
  4. Roomberry: Transformando Roomba em Robô de Vigilância com Raspberry Pi Zero W
  5. Slider Motorizado para Câmera com Bluetooth e Arduino para Tomadas Cinematográficas Suaves
  6. Display Interativo de Giroscópio com Anel NeoPixel e Arduino
  7. Controle Remoto Universal Android com Arduino, 1Sheeld e IR
  8. Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
  9. Pixie: Relógio de Pulso NeoPixel Baseado em Arduino – Elegante Timepiece DIY LED
  10. Dominando Reconhecimento e Síntese de Fala no Arduino Due