Мазмуну:

NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот: 6 кадам
NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот: 6 кадам

Video: NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот: 6 кадам

Video: NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот: 6 кадам
Video: Octopus Max EZ v1.0 - Hotend and Automatic Cooling Fans 2024, Ноябрь
Anonim
NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот
NAIN 1.0 - Arduino колдонуучу негизги гуманоид робот

Nain 1.0 негизинен 5 ажыратылуучу модулга ээ болот-

1) Кол - сервоприёмниктер аркылуу башкарууга болот.

2) Дөңгөлөктөр - буларды туруктуу кыймылдаткычтар менен башкарса болот.

3) Бут - Наин кыймыл үчүн дөңгөлөктөрдү же буттарды алмаштыра алат.

4) Баш - Анын башын ар кандай баш ийкөө үчүн башкарса болот.

5) Камера модулу- бул жүздү таануу мүмкүнчүлүгүнө кире алат.

Бул менен бирге NAIN колдонуучулар менен сүйлөшө алат жана өз ара аракеттене алат жана сизге анын курулган сааты менен убакытты көрсөтө алат. Бул Wi-Fi /Bluetooth аркылуу зымсыз башкарууга ээ болот.

1 -кадам: Компоненттер керек

Керектүү компоненттер
Керектүү компоненттер
Керектүү компоненттер
Керектүү компоненттер
Керектүү компоненттер
Керектүү компоненттер
  1. Servo Motors -4
  2. Ардуино Мега - 1
  3. Raspberry Pi - 1
  4. Usb Камера -1
  5. Баяндамачы -1
  6. DC Motors -2
  7. L293D -1
  8. Батарея пакети - 1
  9. Дөңгөлөктөр -2
  10. Кастор дөңгөлөктөрү - 2

Муну менен бирге денени жасоо үчүн алюминийдин төрт бурчтуу тилкелери жана аларга туура келиши үчүн буроо жана гайкалар керек болот.

2 -кадам: Дененин түзүлүшү

Дене түзүлүшү
Дене түзүлүшү

Дененин түзүлүшү жеңил алюминийден жасалган төрт бурчтуу таякчалардан жасалат, бул аны оңой чогултууга жардам берет.

Азырынча аларды сүрөттө көрсөтүлгөндөй чогултуп, ошондой эле серво моторлорунун колго тагылышы үчүн ылайыктуу жерлерди кесип алыңыз.

Түбүнө алты бурчтуу жыгач базаны тиркеңиз.

Жыгач базанын астына, биз каалаган роботту ээрчигендей, DC моторлорун жана дөңгөлөктөрдү тиркеп коюңуз.

Кызыгы, эки кастор дөңгөлөгүн кошуңуз- бири роботтун алдыңкы, экинчиси.

3 -кадам: Кабелдөө жана коддоо

Кабелдөө жана коддоо
Кабелдөө жана коддоо
Кабелдөө жана коддоо
Кабелдөө жана коддоо

Ар кандай модулдарды туташтыруу үчүн бул бөлүктө тиркелген коддорго кайрылыңыз.

Биринчиден, биз ар бир модулду өз алдынча коддор менен сынап көрдүк, андан кийин алардын бардыгын бириктирдик жана bluetooth модулу аркылуу дөңгөлөктөр менен куралдардын кыймылын көзөмөлдөп турдук.

4 -кадам: Raspberry Pi жана Image Recognition

Raspberry Pi жана сүрөт таануу
Raspberry Pi жана сүрөт таануу
Raspberry Pi жана сүрөт таануу
Raspberry Pi жана сүрөт таануу

Сүрөттү таануу USB камерасы жана Raspberry Pi аркылуу жүзөгө ашырылат.

Ал үчүн сиз Пиңизге АЧЫК резюме китепканасын орнотушуңуз керек болот.

Сиз муну бул жерден кыла аласыз-https://github.com/jabelone/OpenCV-for-Pi

Андан кийин сиз haar каскады аркылуу сүрөт таанууну аткарышыңыз керек болот.

Сиз муну бул жерден жасай аласыз -https://thecodacus.com/category/opencv/#. WvsNC4iFPDc

Жогорудагы шилтемени изилдеп чыккандан кийин, мен акыркы кодго кээ бир өзгөртүүлөрдү киргиздим, мен төмөндө чаптап жатам -

DATASET ГЕНЕРАТОРУ:

importcv2

cam = cv2. VideoCapture (0)

детектор = cv2. CascadeClassifier ('Классификаторлор/face.xml')

i = 0

ордун басуу = 50

аты = raw_input ('id'иңизди киргизиңиз')

чын болсо:

ret, im = cam.read ()

боз = cv2.cvtColor (им, cv2. COLOR_BGR2GRAY)

жүздөр = detector.detectMultiScale (боз, масштабдуу фактор = 1.2, мини кошуналар = 5, minSize = (100, 100), желектер = cv2. CASCADE_SCALE_IMAGE)

(x, y, w, h) үчүн жүздөрдө:

i = i+1

cv2.imwrite ("dataSet/face."+name+'.'+str (i)+".jpg", grey [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])

эгер cv2.waitKey (100) & 0xFF == ord ('q'):

тыныгуу

үлгү саны 20дан көп болсо # тыныгуу

элиф (i> 20):

тыныгуу

cam.release ()

cv2.destroyAllWindows ()

Бул аутентификация үчүн колдонула турган сүрөттөрүңүздүн маалыматын түзөт.

ТРЕНЕР:

importcv2, os

np катары numpy импорттоо

PIL импорттоо сүрөтүнөн

таануучу = cv2.face.createLBPHFaceRecognizer ()

cascadePath = "Классификаторлор/face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

path = 'dataSet'

def get_images_and_labels (жол):

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

# сүрөттөрдө жүздүн сүрөттөрү камтылган

сүрөттөр =

# энбелгилерде сүрөткө дайындалган энбелги камтылган

энбелгилер =

image_paths ичинде image_path үчүн:

# Сүрөттү окуп, боз шкалага айлантыңыз

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

# Сүрөт форматын numpy массивине айландырыңыз

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

# Сүрөттүн энбелгисин алыңыз

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

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

nbr басып чыгаруу

# Сүрөттөгү жүздү аныктоо

жүздөр = faceCascade.detectMultiScale (сүрөт)

# Эгерде бет аныкталса, жүздү сүрөттөргө жана энбелгини этикеткаларга кошуңуз

(x, y, w, h) үчүн жүздөрдө:

images.append (сүрөт [y: y + h, x: x + w])

labels.append (nbr)

cv2.imshow ("Тренинг топтомуна жүздөр кошулууда …", сүрөт [y: y + h, x: x + w])

cv2.waitKey (10)

# сүрөттөр тизмесин жана энбелгилер тизмесин кайтарыңыз

сүрөттөрдү, этикеткаларды кайтаруу

сүрөттөр, этикеткалар = get_images_and_labels (жол)

cv2.imshow ('тест', сүрөттөр [0])

cv2.waitKey (1)

таануучу.поезд (сүрөттөр, np.array (этикеткалар))

tanınүүчү.куткаруу ('тренер/тренер.yml')

cv2.destroyAllWindows ()

ДЕТЕКТОР

importcv2

np катары numpy импорттоо

импорт os

c = 0

таануучу = cv2.face.createLBPHFaceRecognizer ()

tanınүүчү.жүктөө ('trainer/trainer.yml')

cascadePath = "Классификаторлор/face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

cam = cv2. VideoCapture (0)

fontface = cv2. FONT_HERSHEY_SIMPLEX

fontscale = 1

fontcolor = (255, 255, 255)

чын болсо:

ret, im = cam.read ()

боз = cv2.cvtColor (им, cv2. COLOR_BGR2GRAY)

жүздөр = faceCascade.detectMultiScale (боз, 1.2, 5)

(x, y, w, h) үчүн жүздөрдө:

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

Id = таануучу.президент (боз [y: y+h, x: x+w])

эгер (Id <70):

эгер (Id == 1):

Id = "Shashank"

элиф (Id == 2):

эгер (c == 0):

Id = "Шивам"

c = c+1

os.system ("espiak 'Welcome Shivam Access Granted")

башка:

Id = "Шивам"

башка:

Id = "Белгисиз"

cv2.putText (im, str (Id), (x, y+h), шрифт, фонт масштабы, шрифт түсү)

cv2.imshow ('im', im)

эгер cv2.waitKey (10) & 0xFF == ord ('q'):

тыныгуу

cam.release ()

cv2.destroyAllWindows ()

5 -кадам: ЖК жана Динамик

Мен дагы I2C LED дисплейин жана динамикти колдондум.

LED Arduino Mega аркылуу башкарылат жана анын коду акыркы коддо берилет.

Динамик үчүн ал Raspberry Pi менен байланышкан жана eSpeak Utility колдонот.

Сиз анын шилтемесин бул жерден таба аласыз-https://www.dexterindustries.com/howto/make-your-raspberry-pi-speak/

6 -кадам: Акыркы кадамдар

Баарын чогултуп, жарылууга даярдан.

Сунушталууда: