Índice:

NAIN 1.0 - o robô humanóide básico usando Arduino: 6 etapas
NAIN 1.0 - o robô humanóide básico usando Arduino: 6 etapas

Vídeo: NAIN 1.0 - o robô humanóide básico usando Arduino: 6 etapas

Vídeo: NAIN 1.0 - o robô humanóide básico usando Arduino: 6 etapas
Vídeo: Como fazer um ROBÔ que DIRIGE SOZINHO 2024, Julho
Anonim
NAIN 1.0 - o robô humanóide básico usando Arduino
NAIN 1.0 - o robô humanóide básico usando Arduino

O Nain 1.0 terá basicamente 5 módulos destacáveis-

1) Braço - que pode ser controlado via servos.

2) Rodas - que podem ser controladas com motores cc.

3) Perna - Nain será capaz de alternar entre rodas ou pernas para o movimento.

4) Cabeça - sua cabeça pode ser controlada para vários acenos.

5) Módulo de câmera - que pode ter interface para acesso de reconhecimento facial.

Junto com este NAIN será capaz de falar e interagir com os usuários e pode mostrar as horas por seu relógio embutido. Terá um controle sem fio via Wi-fi / Bluetooth.

Etapa 1: componentes necessários

Componentes Necessários
Componentes Necessários
Componentes Necessários
Componentes Necessários
Componentes Necessários
Componentes Necessários
  1. Servo motores -4
  2. Arduino Mega - 1
  3. Raspberry Pi - 1
  4. Câmera Usb -1
  5. Palestrante -1
  6. Motores DC -2
  7. L293D -1
  8. Pacote de bateria - 1
  9. Rodas -2
  10. Rodas giratórias - 2

Junto com eles, você precisará de tiras quadradas de alumínio para fazer o corpo e parafusos e porcas para encaixá-los corretamente.

Etapa 2: Estrutura Corporal

Estrutura corporal
Estrutura corporal

A estrutura do corpo será feita de hastes quadradas de alumínio leve que ajudarão na fácil montagem.

A partir de agora monte-os conforme mostrado na figura e também corte os espaços adequados para os servo motores serem fixados nos braços.

Anexe uma base de madeira hexagonal na parte inferior.

Abaixo da base de madeira, coloque os motores DC e as rodas como fazemos em qualquer robô seguidor de linha.

Curiosamente, adicione duas rodas giratórias - uma na frente e outra na parte de trás do robô.

Etapa 3: Fiação e codificação

Fiação e codificação
Fiação e codificação
Fiação e codificação
Fiação e codificação

Para conectar os diferentes módulos, consulte os códigos anexados nesta parte.

Em primeiro lugar, testamos cada módulo usando códigos independentes e, em seguida, combinamos todos em um e controlamos o movimento das rodas e braços usando um módulo bluetooth.

Etapa 4: Raspberry Pi e reconhecimento de imagem

Raspberry Pi e reconhecimento de imagem
Raspberry Pi e reconhecimento de imagem
Raspberry Pi e reconhecimento de imagem
Raspberry Pi e reconhecimento de imagem

O reconhecimento de imagem é realizado usando uma câmera USB e Raspberry Pi.

Para isso, você precisará instalar a biblioteca OPEN CV no seu Pi.

Você pode fazer isso aqui -

Em seguida, você precisará executar o reconhecimento de imagem usando a cascata de haar.

Você pode fazer isso aqui -https://thecodacus.com/category/opencv/#. WvsNC4iFPDc

Depois de estudar o link acima e segui-lo, fiz algumas alterações no código final que usei e que estou colando abaixo -

GERADOR DE DADOS:

importcv2

cam = cv2. VideoCapture (0)

detector = cv2. CascadeClassifier ('Classifiers / face.xml')

i = 0

deslocamento = 50

name = raw_input ('insira sua id')

enquanto verdadeiro:

ret, im = cam.read ()

cinza = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

faces = detector.detectMultiScale (cinza, scaleFactor = 1,2, minNeighbors = 5, minSize = (100, 100), sinalizadores = cv2. CASCADE_SCALE_IMAGE)

para (x, y, w, h) nas faces:

i = i + 1

cv2.imwrite ("dataSet / face." + name + '.' + str (i) + ".jpg", cinza [y-offset: y + h + offset, x-offset: x + w + offset])

cv2.rectângulo (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)

cv2.imshow ('im', im [deslocamento y: y + h + deslocamento, deslocamento x: x + w + deslocamento])

se cv2.waitKey (100) & 0xFF == ord ('q'):

pausa

# quebra se o número da amostra for maior que 20

elif (i> 20):

pausa

cam.release ()

cv2.destroyAllWindows ()

Ele criará um conjunto de dados de suas fotos que será usado para autenticação.

TREINADOR:

importcv2, os

importar numpy como np

da imagem de importação PIL

reconhecedor = cv2.face.createLBPHFaceRecognizer ()

cascadePath = "Classifiers / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

path = 'dataSet'

def get_images_and_labels (path):

image_paths = [os.path.join (path, f) para f em os.listdir (path)]

# imagens conterão imagens de rostos

imagens =

# rótulo conterá o rótulo atribuído à imagem

rótulos =

para image_path em image_paths:

# Leia a imagem e converta para tons de cinza

image_pil = Image.open (image_path).convert ('L')

# Converta o formato da imagem em numpy array

image = np.array (image_pil, 'uint8')

# Obtenha o rótulo da imagem

nbr = int (os.path.split (image_path) [- 1].split (".") [1].replace ("face-", ""))

# nbr = int (''. join (str (ord (c)) para c em nbr))

imprimir nbr

# Detecta o rosto na imagem

faces = faceCascade.detectMultiScale (imagem)

# Se um rosto for detectado, acrescente o rosto às imagens e o rótulo aos rótulos

para (x, y, w, h) nas faces:

images.append (imagem [y: y + h, x: x + w])

labels.append (nbr)

cv2.imshow ("Adicionando faces ao conjunto de treinamento …", imagem [y: y + h, x: x + w])

cv2.waitKey (10)

# retorna a lista de imagens e a lista de rótulos

devolver imagens, etiquetas

imagens, rótulos = get_images_and_labels (caminho)

cv2.imshow ('teste', imagens [0])

cv2.waitKey (1)

reconhecizer.train (imagens, np.array (etiquetas))

reconhecizer.save ('treinador / treinador.yml')

cv2.destroyAllWindows ()

DETECTOR

importcv2

importar numpy como np

importar os

c = 0

reconhecedor = cv2.face.createLBPHFaceRecognizer ()

reconhecizer.load ('trainer / trainer.yml')

cascadePath = "Classifiers / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

cam = cv2. VideoCapture (0)

fontface = cv2. FONT_HERSHEY_SIMPLEX

fontscale = 1

fontcolor = (255, 255, 255)

enquanto verdadeiro:

ret, im = cam.read ()

cinza = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale (cinza, 1.2, 5)

para (x, y, w, h) nas faces:

cv2.rectângulo (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)

Id = reconhecizer.predict (cinza [y: y + h, x: x + w])

if (Id <70):

if (Id == 1):

Id = "Shashank"

elif (Id == 2):

if (c == 0):

Id = "Shivam"

c = c + 1

os.system ("espeak 'Welcome Shivam Access Concedido'")

outro:

Id = "Shivam"

outro:

Id = "Desconhecido"

cv2.putText (im, str (Id), (x, y + h), fontface, fontscale, fontcolor)

cv2.imshow ('im', im)

se cv2.waitKey (10) & 0xFF == ord ('q'):

pausa

cam.release ()

cv2.destroyAllWindows ()

Etapa 5: LCD e alto-falante

Eu também usei um display LED I2C e um alto-falante.

O LED é controlado via Arduino Mega e seu código é fornecido no código final.

Para alto-falante, ele está conectado ao Raspberry Pi e usa o utilitário eSpeak.

Você pode encontrar sua referência aqui -

Etapa 6: etapas finais

Monte tudo e prepare-se para o estrondo.

Recomendado: