Taula de continguts:

NAIN 1.0: el robot humanoide bàsic que utilitza Arduino: 6 passos
NAIN 1.0: el robot humanoide bàsic que utilitza Arduino: 6 passos

Vídeo: NAIN 1.0: el robot humanoide bàsic que utilitza Arduino: 6 passos

Vídeo: NAIN 1.0: el robot humanoide bàsic que utilitza Arduino: 6 passos
Vídeo: 21ª Sessão Científica | Saúde 4.0 - As tecnologias digitais e a interação com o paciente 2024, De novembre
Anonim
NAIN 1.0: el robot humanoide bàsic que utilitza Arduino
NAIN 1.0: el robot humanoide bàsic que utilitza Arduino

Nain 1.0 tindrà bàsicament 5 mòduls desmuntables.

1) Braç: es pot controlar mitjançant servos.

2) Rodes: es poden controlar amb motors de corrent continu.

3) Cama: Nain podrà canviar entre rodes o cames per moure’s.

4) Cap: es pot controlar el cap per fer diversos caps.

5) Mòdul de càmera: es pot connectar per a l'accés al reconeixement facial.

Juntament amb això, NAIN podrà parlar i interactuar amb els usuaris i us pot mostrar l'hora mitjançant el rellotge incorporat. Tindrà un control sense fils mitjançant Wi-fi / Bluetooth.

Pas 1: components necessaris

Components necessaris
Components necessaris
Components necessaris
Components necessaris
Components necessaris
Components necessaris
  1. Servomotors -4
  2. Arduino Mega - 1
  3. Raspberry Pi - 1
  4. Càmera USB -1
  5. Altaveu -1
  6. DC Motors -2
  7. L293D -1
  8. Paquet de bateries: 1
  9. Rodes -2
  10. Rodes de rodes - 2

Juntament amb aquestes, necessitareu tires quadrades d'alumini per fer el cos i les rosques i femelles per ajustar-les correctament.

Pas 2: Estructura corporal

Estructura corporal
Estructura corporal

L'estructura del cos estarà formada per varetes quadrades d'alumini lleugeres que ajudaran a muntar-la fàcilment.

A partir d'ara, munteu-los tal com es mostra a la figura i també retalleu els espais adequats perquè els servomotors s'uneixin als braços.

Col·loqueu una base de fusta hexagonal a la part inferior.

A sota de la base de fusta, poseu motors i rodes de corrent continu com fem en qualsevol robot seguidor de línia.

Curiosament, afegiu dues rodes de rodes, una a la part davantera i una altra a la part posterior del robot.

Pas 3: cablejat i codificació

Cablatge i codificació
Cablatge i codificació
Cablatge i codificació
Cablatge i codificació

Per connectar els diferents mòduls, consulteu els codis adjunts en aquesta part.

En primer lloc, vam provar cada mòdul mitjançant codis independents i després els vam combinar tots en un i vam controlar el moviment de rodes i braços mitjançant un mòdul bluetooth.

Pas 4: Raspberry Pi i reconeixement d'imatges

Raspberry Pi i reconeixement d’imatges
Raspberry Pi i reconeixement d’imatges
Raspberry Pi i reconeixement d’imatges
Raspberry Pi i reconeixement d’imatges

El reconeixement d’imatges es realitza mitjançant una càmera USB i Raspberry Pi.

Per a això, haureu d’instal·lar la biblioteca OPEN CV al vostre Pi.

Podeu fer-ho des d’aquí:

A continuació, haureu de realitzar el reconeixement d’imatges fent servir cascada haar.

Podeu fer-ho des d'aquí -https://thecodacus.com/category/opencv/#. WvsNC4iFPDc

Després d’estudiar l’enllaç anterior i després d’haver-ho fet, he fet alguns canvis en el codi final que he utilitzat que enganxo a continuació:

GENERADOR DE DATESET:

importcv2

cam = cv2. VideoCapture (0)

detector = cv2. CascadeClassifier ("Classificadors / face.xml")

i = 0

desplaçament = 50

name = raw_input ("introduïu el vostre identificador")

mentre que és cert:

ret, im = cam.read ()

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

faces = detector.detectMultiScale (gris, factorFactor = 1,2, veïns mínims = 5, mida mínima = (100, 100), indicadors = cv2. CASCADE_SCALE_IMAGE)

per a (x, y, w, h) en cares:

i = i + 1

cv2.imwrite ("DataSet / face." + nom + '.' + str (i) + ".jpg", gris [y-offset: y + h + offset, x-offset: x + w + offset])

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

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

si cv2.waitKey (100) i 0xFF == ord ('q'):

trencar

# trencar si el nombre de mostra és més gran que 20

elif (i> 20):

trencar

cam.release ()

cv2.destroyAllWindows ()

Es crearà un conjunt de dades de les vostres fotos que s'utilitzaran per a l'autenticació.

ENTRENADOR:

importcv2, os

importa numpy com a np

de la imatge d'importació PIL

recognizer = cv2.face.createLBPHFaceRecognizer ()

cascadePath = "Classificadors / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

path = 'dataSet'

def get_images_and_labels (ruta):

image_paths = [os.path.join (path, f) for f in os.listdir (path)]

# images will conté imatges de cara

imatges =

# etiquetes conté l'etiqueta assignada a la imatge

etiquetes =

per a image_path a image_paths:

# Llegeix la imatge i converteix-la a escala de grisos

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

# Converteix el format de la imatge en una matriu numpy

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

# Obteniu l'etiqueta de la imatge

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

# nbr = int ( . join (str (ord (c)) per a c a nbr))

imprimir nbr

# Detecta la cara de la imatge

faces = faceCascade.detectMultiScale (imatge)

# Si es detecta la cara, afegiu la cara a les imatges i l'etiqueta a les etiquetes

per a (x, y, w, h) en cares:

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

labels.append (nbr)

cv2.imshow ("Afegir cares al conjunt de traning …", imatge [y: y + h, x: x + w])

cv2.waitKey (10)

# torna la llista d'imatges i la llista d'etiquetes

tornar imatges, etiquetes

imatges, etiquetes = get_images_and_labels (ruta)

cv2.imshow ('prova', imatges [0])

cv2.waitKey (1)

recognizer.train (imatges, np.array (etiquetes))

recognizer.save ('entrenador / entrenador.yml')

cv2.destroyAllWindows ()

DETECTOR

importcv2

importar numpy com a np

import os

c = 0

recognizer = cv2.face.createLBPHFaceRecognizer ()

recognizer.load ('entrenador / entrenador.yml')

cascadePath = "Classificadors / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

cam = cv2. VideoCapture (0)

fontface = cv2. FONT_HERSHEY_SIMPLEX

fontscale = 1

fontcolor = (255, 255, 255)

mentre que és cert:

ret, im = cam.read ()

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

faces = faceCascade.detectMultiScale (gris, 1,2, 5)

per a (x, y, w, h) en cares:

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

Id = recognizer.predict (gris [y: y + h, x: x + w])

si (Id <70):

si (Id == 1):

Id = "Shashank"

elif (Id == 2):

if (c == 0):

Id = "Shivam"

c = c + 1

os.system ("Espeak 'Accés a Shivam de benvinguda concedit'")

en cas contrari:

Id = "Shivam"

en cas contrari:

Id = "Desconegut"

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

cv2.imshow ('im', im)

si cv2.waitKey (10) i 0xFF == ord ('q'):

trencar

cam.release ()

cv2.destroyAllWindows ()

Pas 5: LCD i altaveu

També he utilitzat una pantalla LED I2C i un altaveu.

El LED es controla mitjançant Arduino Mega i el seu codi es dóna al codi final.

Per a Speaker, està connectat amb el Raspberry Pi i utilitza eSpeak Utility.

Podeu trobar la seva referència aquí:

Pas 6: passos finals

Muntar-ho tot i preparar-se per a la explosió.

Recomanat: