Skip to content

Embedded

Karo8870 edited this page Jul 30, 2024 · 8 revisions

Descriere

Există o mulțime de microcontrolere care alcătuiesc MARCEL, unele mai importante decât altele. În această secțiune veți înțelege utilizarea fiecăruia și modul în care funcționează.

Tehnologii

Toate microcontrolerele au fost dezvoltate folosind framework-ul Arduino, urmând structura proiectului PlatformIO.

Scop

Deoarece MARCEL necesită multă putere de calcul, a trebuit să împărțim întregul corp în diferite sarcini pe care microcontrolerele individuale le-ar putea procesa pentru a asigura o performanță bună și un timp de răspuns aproape de 0. Având în vedere acest lucru, credem că următoarea schemă se potrivește cel mai bine.

Group 9

Creierul întregii operațiuni, așa cum sugerează și numele său, este un Raspberry PI 5 situat în baza lui Marcel. Acesta comunică direct cu 2 dispozitive care controlează părțile superioară și inferioară ale robotului:

  • ESP32 Bază
  • ESP32 Torso

ESP32 Bază comunică direct cu alte 2 microcontrolere care gestionează mișcarea directă:

  • ESP32 Roți
  • Arduino Nano Ultrasonic

Scopul unic al ESP32 Torso este de a transmite informații către mâini sau ochi. După cum probabil ați ghicit, acesta controlează:

  • ESP32 Ochi
  • Arduino Nano Mâna dreaptă
  • Arduino Nano Mâna stângă

Pentru simplitate, această documentație va folosi doar numele părților pentru a se referi la diferitele microcontrolere, după cum urmează:

  • Creier
    • Bază
      • Ultrasonic
      • Roți
    • Torso
      • Mâna dreaptă
      • Mâna stângă
      • Ochi

Sistem de comunicații încorporat

Datorită numărului mare de microcontrolere care comunică între ele, este necesară o comunicare eficientă și rapidă. Pentru a beneficia de distanța mică dintre unele microcontrolere, folosim următoarele protocoale:

  • Creier - Bază (UART)
    • Bază - Ultrasonic (I2C)
    • Bază - Roți (I2C)
  • Creier - Torso (UART)
    • Torso - Mâna dreaptă (I2C)
    • Torso - Mâna stângă (I2C)
    • Torso - Ochi (UART)

Datorită complexității ridicate a unor module și complexității reduse a altora, folosim 2 modalități principale de comunicare:

  • Transmisie brută
  • Comunicare bazată pe comenzi

Transmisie brută (RT)

Prin transmisie brută, ne referim la trimiterea directă a datelor brute prin protocol pentru ca microcontrolerul să le proceseze. În cele mai multe cazuri, RT ar fi un flux continuu sau necontinuu de date de dimensiune fixă care vor veni și pleca, făcându-l ușor de utilizat datorită formatului datelor, fără adăugiri personalizate.

Comunicare bazată pe comenzi (CBC)

Comunicarea bazată pe comenzi este mai complexă decât RT, utilizând un sistem similar cu modul în care funcționează mașinile de control numeric computerizat (CNC). Utilizează un șablon predefinit pe care fiecare lot de date individuale ar trebui să îl urmeze, permițând date de dimensiuni dinamice.

Toate datele trebuie trimise folosind comenzi. O comandă are următorul șablon:

Comanda (separator de valori) Valoare1 (separator de valori) Valoare2 (separator de valori) ... ValoareN (separator de comenzi)

Unde:

  • Comand - O comandă predefinită care gestionează o acțiune.
  • ValueN - Valoarea la indexul $N$ din lista de valori transmise comenzii. Numărul și formatul valorilor variază în funcție de comandă.
  • Value separator - Un caracter separator / șir între valori
  • Command separator - Un șir de caractere separator care definește unde se termină o comandă

[!NOTĂ]
Pentru cazurile mai simple în care este necesară organizarea sau când înțelegerea umană este mai puțin obligatorie, poate fi utilizată și o versiune mai ușoară a CBC care elimină separatoarele și poate avea valori de comandă de dimensiune fixă.

Asigurarea unei conexiuni funcționale

Pentru ca Marcel să pornească corect, toate dispozitivele trebuie să dea un fel de „undă verde”, pentru a arăta că au pornit corect. Marcel poate porni numai după ce toate microcontrolerele sale au transmis un mesaj de pornire valid necorupt, după formatul:

Componenta sus

Dacă una sau mai multe componente nu au raportat înapoi, înseamnă că mesajul nu a fost trimis niciodată sau că mesajul s-a pierdut pe drum, indicând fie o problemă de conexiune software sau hardware, ceea ce înseamnă că ceva trebuie remediat.

[!AVERTISMENT]
Microcontrolerele vor fi blocate într-o stare de pauză la pornire până când li se va cere prima dată starea inițială. Pentru a face un microcontroler să funcționeze, trebuie să-i acordați aprobarea pentru a vă trimite mesajul de pornire. Acest lucru se face pentru a evita situațiile în care o componentă imbricată mai adânc pornește înaintea masterului său, trimite un mesaj, dar mesajul se pierde din cauza sistemului de procesare care nu funcționează încă. [!IMPORTANT] Mesajul universal de solicitare de confirmare primit de la un master va fi *.

Microcontrolere

În secțiunile următoare, vor fi discutate scopul, funcționalitatea, comunicarea, mesajele de eroare, jurnalele și alte aspecte importante. Acum că am definit un set de reguli și limite, putem face asta mai ușor.

Baza

Metadate

Parametru Valoare
Model ESP32
Comanda sus Base up
Comunicare CBC

Protocoale

Componenta Protocol
Roți I2C (master)
Ultrasunete I2C (master)
Creierul UART

Scop

Microcontrolerul de bază este menit să gestioneze comunicarea dintre creier și roți și ultrasunete. Comenzile sale sunt în principal legate direct de cele 2 microcontrolere copii.

Comenzi

Comanda Valoare Descriere
S orice Modifică valoarea unei setări
T Niciuna Obține setările curente
M <viteza_stânga> <viteza_dreapta> Setează viteza roților
$ Niciuna Obțineți valorile ultrasonice actuale. Funcționează exact ca și comunicarea dintre Base și Ultrasonic
! Niciuna Modul de alarmă. Face ca Wheels să intre în modul alarmă
~ Niciuna Oprește modul de alarmă pentru roți

Setări

Setare Valoare Descriere Exemplu
S masca de 6 biti Stabilește dacă robotul ar trebui să oprească automat mișcarea într-o anumită direcție atunci când detectează un obstacol cu ​​unul dintre senzorii cu ultrasunete. Ordinea în mască este dată de ordinea senzorilor S 001011
D{index} număr (cm) Determină distanța care ar trebui considerată prea apropiată pentru un indice dat D3 23

Ultrasunete

Metadate

Parametru Valoare
Model Arduino Nano
Comanda sus Ultrasunete sus
Comunicare RT

Protocoale

Componenta Protocol
Baza I2C (slave)

Scop

Microcontrolerul cu ultrasunete este menit să raporteze distanța curentă citită de senzorii ultrasonici. Funcționează trimițând mai întâi distanța curentă, apoi așteptând trimiterea unui mesaj din nou.

[!NOTĂ] Ultrasonic nu va trimite date noi decât dacă este solicitat, acest lucru a fost implementat pentru a evita umplerea oricărui tip de buffer cu date care vor fi procesate într-o perioadă mai lungă de timp, făcând informațiile de distanță depășite. Acest lucru poate evita accidentele.

Comenzi

Comanda Valoare Descriere Exemplu de ieșire
$ Niciuna Solicită un nou lot de date ale senzorului. Datele vor fi returnate ca numere (cm) în ordinea poziției 25 12 37 4 15 9

Ordin

Poziție index
Față-Stânga 0
Față-Mijloc 1
Față-Dreapta 2
Spate-Stânga 3
Spate-Mijloc 4
Spate-Dreapta 5

Roți

Metadate

Parametru Valoare
Model Arduino Nano
Comanda sus Roțile sus
Comunicare CBC

Protocoale

Componenta Protocol
Baza I2C (slave)

Scop

Singurul scop al microcontrolerului Wheels este de a muta roțile. Primește întârzierea în microsecunde pe care ar trebui să o aibă fiecare roată și setează viteza motorului pas cu pas pentru fiecare.

Comenzi

Comanda Valoare Descriere Exemplu de ieșire
M <viteza_stânga> <viteza_dreapta> Setează viteza roților furnizând 2 numere din 4 cifre separate printr-un spațiu
! Niciuna Modul de alarmă. Oprește complet toate mișcările și ignoră comenzile viitoare -
~ Niciuna Oprește modul alarmă -

Tors

Scop

Microcontrolerul de bază este menit să gestioneze comunicarea dintre creier și roți și ultrasunete. Comenzile sale sunt în principal legate direct de cele 2 microcontrolere copii.

Metadate

Parametru Valoare
Model ESP32
Comanda sus Tnur în sus
Comunicare CBC

Protocoale

Componenta Protocol
Mâna stângă I2C (master)
Mâna dreaptă I2C (master)
Ochii UART

Scop

Microcontrolerul Torso este menit să stabilească comunicarea între ochi și mâini cu creierul. Spune mâinilor cum să se miște și ochilor ce să afișeze. De asemenea, redirecționează orice ieșire din mâini și ochi înapoi către creier.

Comenzi

Comanda Valoare Descriere
L Comanda manuală Execută o comandă de mișcare pe mâna stângă
R Comanda manuală Execută o comandă de mișcare pe mâna dreaptă
M <viteza_stânga> <viteza_dreapta> Setează viteza roților
! Niciuna Setează mâna stângă, mâna dreaptă și ochii în modul alarmă. Toată mișcarea va fi oprită instantaneu și ochii vor arăta doar negru
~ Niciuna Oprește modul de alarmă pentru mâna stângă, mâna dreaptă și ochi

Mana dreapta

Metadate

Parametru Valoare
Model Arduino Nano
Comanda sus Mâna dreaptă sus
Comunicare CBC

Protocoale

Componenta Protocol
Torso I2C (slave)

Scop

Controlează servomotoarele din mâna dreaptă.

Comenzi de mână

Comanda Valoare Descriere
S număr Setează viteza pe care ar trebui să o aibă cea mai lungă operațiune. Orice operațiuni mai scurte vor fi încetinite pentru a se sincroniza cu cea mai lungă
M {index1}{valoare1} {index2}{valoare2} ... {indexN}{valoareN} Mută ​​anumite motoare în anumite unghiuri. Indicele este indicele în ordinea motoarelor
! Niciuna Setează mâna în modul alarmă. Toate mișcările vor fi oprite instantaneu
~ Niciuna Oprește modul de alarmă pentru mână

Ordin

Poziție index
Umăr interior 0
Umăr exterior 1
Sub umăr 2
Cot 3
încheietura mâinii 4
Gheara 5

Mâna stângă

Metadate

Parametru Valoare
Model Arduino Nano
Comanda sus Mâna stângă sus
Comunicare CBC

Protocoale

Componenta Protocol
Torso I2C (slave)

Scop

Controlează servomotoarele din mâna stângă. Folosește comenzile Mână și ordonă la fel ca mâna dreaptă.

Ochii

Metadate

Parametru Valoare
Model ESP32
Comanda sus Ochii sus
Comunicare CBC

Protocoale

Componenta Protocol
Torso UART
Ochiul stâng SPI (master)
ochiul drept SPI (master)

Scop

Controlează ceea ce este afișat pe ochi

Comanda Valoare Descriere
! Niciuna Setează mâna în modul alarmă. Toate mișcările vor fi oprite instantaneu
~ Niciuna Oprește modul de alarmă pentru mână

Mai multe în curând pentru ochi...

Alte periferice

În afară de microcontrolere, Marcel folosește și un difuzor pentru a produce sunet și 2 camere pentru a vedea lumea din jurul lui.

Clone this wiki locally