Piccolo robot fatto in casa. Risorse utili per creare un robot con le tue mani Fantastici robot su microcontrollori

Buon pomeriggio, cari residenti di Khabrovsk.
È passato parecchio tempo dall'ultima volta che ho scritto articoli sullo sviluppo qui, è ora di risolvere la questione.
In questo articolo parlerò di come ho assemblato un piccolo robot sul microcontrollore STM32F101 per intrattenere il mio Maine Coon, Arthas, di quali problemi ho dovuto affrontare e cosa ne è venuto fuori.

Contesto e formulazione del problema

Sei mesi fa ho ricevuto questo bellissimo Maine Coon nero, a cui ho dato il nome Arthas in onore del famoso eroe dei videogiochi.

Il gatto è incredibilmente giocoso, ama correre, tendere imboscate e persino prendere una palla, come un cane. Dato che non colleziono nulla da molto tempo, ho deciso di sviluppare un piccolo giocattolo per il gatto.
I requisiti principali erano:

  1. Protezione delle parti critiche della struttura da denti e artigli di gatto, idealmente un corpo completamente chiuso (sfera)
  2. Dal paragrafo precedente segue il requisito delle piccole dimensioni del dispositivo, perché È auspicabile che sia ancora una pallina e non un pallone da calcio.
  3. Possibilità di controllo da cellulare/tablet e computer da tavolo- per non reinventare la ruota e garantire la compatibilità con dispositivi mobili La comunicazione Bluetooth è l'ideale.
  4. Per renderlo più interessante, sarebbe auspicabile avere almeno una sorta di sensore che consentisse in futuro di rendere il robot più o meno autonomo, e non solo un'auto radiocomandata.
  5. Avere un modo per emettere suoni per attirare l'attenzione del gatto.

Glielo dimostrerò subito breve video Quello che è successo è che il catbot è stato lanciato in modalità test (controllato da me da un computer):

Il catbot è testato senza guscio esterno, emette suoni che attirano il gatto e non può scappare perché... una delle unità si guasta.
(Maggiori informazioni su questo alla fine dell'articolo)


Catbot assemblato

Alcuni potrebbero pensare che il gatto non reagisca molto attivamente al robot, ma in realtà il motivo è che durante il test me lo ha già strappato di mano un centinaio di volte, portato via e masticato. Ovviamente ho portato via il robot (non è ancora finito), quindi il gatto, vedendo il robot per terra, ha deciso di aspettare un po' per assicurarsi che non gli venisse portato via non appena avesse attaccato)

Sviluppo: scelta degli elementi base e preparazione
Telaio
Dopo aver deciso il design proposto, ho acquistato una coppia di sfere di plastica composte da due metà: una con un diametro di 60 mm, l'altra di 80 mm, nel caso in cui la prima non potesse adattarsi. Tali dimensioni limitavano molto la scelta dei motori e dei sensori (nel senso che, ad esempio, si poteva dimenticare un sensore a ultrasuoni; non sarebbe entrato nella palla e, inoltre, non avrebbe funzionato in uno spazio chiuso.

Microcontrollore
Dopo aver segato l '"orecchio", le palle sono diventate candidate ideali per il ruolo del corpo. Date le dimensioni limitate si è deciso di progettare l'intera circuitazione utilizzando i package più piccoli, ovvero per la maggior parte QFN.
STM32F101 è stato scelto come processore centrale, poiché è un microcontrollore basato sul core Cortex M3 e non sul ridotto M0, mentre può funzionare a 36 MHz, ha 64 KB di flash e 16 KB di RAM e, la maggior parte soprattutto, è disponibile con corpo QFN da 6x6 mm
Sensore
Il sensore scelto era un accelerometro a tre assi della stessa ST, che aveva uno sconto da Terraelectronics, quindi l'ho preso al prezzo di circa 30 rubli l'uno.

L'accelerometro è disponibile in package QFN da 3x3 mm e può comunicare tramite bus I2C, molto utile in condizioni di dimensioni limitate. Utilizzando un accelerometro, è possibile calcolare l'inclinazione del robot lungo tre assi e, forse, anche provare a ottenere informazioni da esso se il robot si sta muovendo o ha colpito un ostacolo (tramite variazioni di accelerazione). E, naturalmente, determina il momento in cui il gatto lo prende a calci per emettere un cigolio - in questo modo il gatto crederà che si tratti di qualcosa di vivo)

Connessione
Come mezzo di comunicazione, ovviamente, utilizziamo moduli cinesi HC-05 comprovati, economici e di piccole dimensioni

Questo è l'unico modulo già pronto incluso nel robot.
Sorgente sonora
Inizialmente volevo usare altoparlanti piccoli, ma sfortunatamente anche quelli piccoli erano abbastanza grandi. Inoltre consumavano molto e richiedevano almeno un transistor e un filtro per pomparli con PWM. Dopo aver cercato su Google, ho trovato questo interessante segnale acustico piezoelettrico:

PKLCS1212E4001 di Murata costa 48 rubli, ha dimensioni di 11x11 mm (l'elemento più grande sulla scheda!) ed è un Piezo Sounder standard, un dispositivo che produce suono piegando la membrana con l'effetto piezoelettrico. Ciò significa che consuma ordini di grandezza meno corrente di un altoparlante che emette un segnale acustico allo stesso volume.
Ma, a differenza di un altoparlante, ha una risposta in frequenza molto complessa e irregolare, quindi quello che fa meglio è cigolare. E può farlo più forte alla frequenza di 4 KHz (ma questo non significa che non puoi strillare agli altri!)
Unità
L'elemento più importante sono gli azionamenti che muoveranno il robot. Sfortunatamente, con loro non tutto è andato liscio come avremmo voluto saperne di più alla fine dell'articolo. Per gli azionamenti, ho deciso di prendere i servi più piccoli che ho trovato e di convertirli per una rotazione costante.
La mia scelta è spiegata dal fatto che prendendo i servi ottengo un motore+riduttore+scheda di controllo in un alloggiamento di circa 15x20x8 mm. Non importa quanto ci provassi, non sono riuscito a trovare motoriduttori di queste dimensioni.
Di conseguenza, la scelta è caduta sui servi sub-micro, al prezzo di 187 rubli ciascuno:

Nutrizione
Tutti gli elementi sono stati selezionati, resta da decidere come e con cosa alimentare il sistema. Ovviamente la fonte più piccola e adatta è una piccola batteria ai polimeri di litio. Poiché le unità richiedono 4,8 V, aumenteremo la tensione a 5 V con un convertitore CC-CC di piccole dimensioni di MAXIM Semiconductors. Il MAX8815 è un ottimo microcircuito in package 3x3 mm che permette di erogare fino a 1A ad un carico con un'efficienza del 97% (che, ovviamente, dipende dal corretto layout del PCB, dalla modalità operativa e dalla scelta del cablaggio, come sempre).
Dato che gli azionamenti non consumano più di 600 mA anche nei momenti di carico di punta, questo è più che sufficiente.

Per alimentare il resto dell'elettronica e proteggerla dalle interferenze introdotte dai motori, dopo il convertitore boost DC-DC installeremo un regolatore lineare di piccole dimensioni della TI, LP2985, con uscita fissa a 3,3 V.

Circuiti e un po' di design

Innanzitutto, qualche parola sul design del robot. Per ridurre al minimo ingombri e costi ho deciso di utilizzare i circuiti stampati come elementi strutturali. Ciò significa che gli azionamenti vengono fissati tra due circuiti stampati, tenuti insieme da viti. Una volta assemblato (e dopo aver eseguito il debug delle modifiche alla scheda, di cui parleremo più avanti), appare tutto così:

Per evitare che le unità si muovano, ho messo un materiale meraviglioso tra la scheda e la loro superficie: il lattice di un espansore Torres

Il fatto è che una volta ho comprato una fionda in Cina. La lancia stessa era molto comoda, realizzata in lega di titanio, ma la gomma era inutile. Su Internet, gli esperti di fionda consigliano di buttarlo via immediatamente, di comprarsi lo stesso espansore e di ritagliarne le imbracature sostitutive. Il risultato ha superato tutte le mie aspettative e la fionda è diventata incredibilmente potente. E perché L'espansore è una cosa importante, quindi O La maggior parte del materiale rimase intatto e giaceva in una scatola, in attesa dietro le quinte.
Dopo aver utilizzato questo lattice come guarnizione tra le unità e la scheda, le unità si adattano come un guanto, senza spostarsi di un millimetro.

Di conseguenza, per implementare un tale progetto, sono necessarie due schede, in cui tutti i componenti sono concentrati sui lati esterni.
Poiché abbiamo un aumento così improvviso dell'area utilizzabile, possiamo posizionarlo sul pannello inferiore caricabatterie per la batteria, un connettore mini-USB, LED che indicano la ricarica e, allo stesso tempo, spostare lì il modulo BT in modo che non sia coperto dalla batteria e non interferisca con la comunicazione.
Pertanto, sono stati sviluppati due PCB, TOP e BOTTOM. In basso c'è quello che ho già detto, e in alto c'è l'intero "cervello" e, per così dire, il sistema digestivo del robot: un microcontrollore, un accelerometro, un convertitore e un regolatore di potenza e, ovviamente , un tweeter piezoelettrico.

Il diagramma della scheda superiore è simile al seguente:


Schema di potere


Cervello

Per evitare che l'USB invii i suoi cinque volt dove non è necessario, gli ingressi ON del convertitore U1 e del regolatore U2 sono collegati, collegati all'alimentatore e inviati al pin J1 sul bordo della scheda - applicando il livello GND trasferirà gli ingressi e le uscite del convertitore ad uno stato ad alta impedenza, interrompendo sostanzialmente il circuito e consentendo alla corrente USB di fluire al suo posto: nel circuito di carica della batteria. Il resto dello schema di collegamento del convertitore è tipico, dalla scheda tecnica.

L'accelerometro U4 è collegato al bus I2C del controller senza resistori pull-up: sì, sono necessari affinché il bus funzioni, ma la scheda tecnica lo assicura entrambe le linee sono collegate a Vdd_IO tramite una resistenza di pull-up incorporata all'interno del LIS331DL. Stranamente non ci sono più informazioni su di loro; non ho mai scoperto il valore nominale (e quando è spento non viene misurato; a quanto pare sono disconnessi dal bus tramite transistor). Quindi ho dovuto affidarmi ciecamente alla scheda tecnica. Devo dire che avevo ragione: l'accelerometro funziona davvero alla grande senza resistori aggiuntivi.
Tuttavia, ad esso è stato associato un altro importante falso, di cui puoi leggere nella sezione "Test e falsificazioni".

Oltre all'accelerometro, al controller è collegato il LED D1, progettato per attirare visivamente l'attenzione del gatto e servire da indicazione, nonché un partitore di tensione sui resistori R4 e R5, che è collegato all'ingresso ADC del controller tramite condensatore di livellamento C5. Questo divisore porta la tensione della batteria in un intervallo misurabile dall'ADC, fornendo un'indicazione del livello di carica della batteria.
A proposito, a questi resistori è stato associato un mini-falso. Il fatto è che presumevo che il mio controller avesse una tensione di riferimento integrata (circa 1,2 volt), come nei modelli precedenti. Ma, come si è scoperto, nei modelli nel pacchetto QFN36, non c'è una sorgente integrata e l'ingresso REF all'interno del case è in cortocircuito con la tensione di alimentazione (3,3 V), quindi i resistori che a 4,2 V davano 1 V a la batteria in uscita doveva essere cambiata con quelle che danno 3V.

Il tweeter LS1, grazie alla sua natura piezoelettrica, può essere collegato direttamente al pin del controller: il suo consumo è molto basso, su frequenza di risonanza la sua impedenza è di diverse centinaia di ohm. L'unico potenziale problema è che può funzionare anche nella direzione opposta, cioè generare tensione in caso di deformazione (shock), per la quale solitamente vengono installati diodi o resistori di protezione. Tuttavia, secondo i risultati dell'esperimento, la tensione durante un impatto medio non ha superato 1,5 V, che i diodi protettivi dell'uscita del controller possono facilmente gestire, quindi ho rischiato di non installare una protezione aggiuntiva.

Le uscite del generatore PWM integrato nel controller vengono instradate ai pin J8 e J9 per controllare le unità. Come misura aggiuntiva (e, come si è scoperto, non superflua) per ridurre il consumo in modalità inattiva, i contatti J11 e J12, a cui è collegato il GND degli azionamenti, sono isolati dalla massa del circuito dal transistor di potenza Q1 - alimentazione alto livello sul cancello conferisce agli attuatori la potenza della terra e consente alla corrente di fluire attraverso le loro viscere. Come si è scoperto, anche con un segnale PWM pari a zero, il circuito di controllo degli azionamenti fornisce loro ancora una certa tensione e il consumo aumenta di 10 mA rispetto a quelli completamente disabilitati.

Un punto importante è stata la scelta dell'interfaccia di debug. In condizioni di dimensioni molto limitate, ovviamente, ho voluto accontentarmi di un numero minimo di cavi. Ma le informazioni su quale sia l'importo minimo si sono rivelate molto contraddittorie. Dopo un'accurata ricerca su Google e sperimentazioni, ho optato per l'interfaccia SWD, visualizzando solo i pin SWDIO e SWCLK. A questo è legato un altro fak-up, descritto nella sezione “test e fak-up”. Ma in breve: sì, questi due pin sono davvero sufficienti per il debug nella maggior parte dei casi.

Il pannello inferiore è progettato in modo molto semplice:


Bordo inferiore

Contiene due microcircuiti di ricarica della batteria lineare Li-Pol (Li-Ion) collegati in parallelo, LTC4054 di Linear Technology. Questo è il modo più semplice a me noto per caricare polimeri di litio unicellulari e ioni di litio, se l'efficienza piuttosto bassa (dovuta al fatto che i microcircuiti sono lineari) non è spaventosa.
Si adattano perfettamente in parallelo, in alcuni Schemi cinesi Ho visto fino a quattro mikruhi simili in parallelo, fornendo una grande corrente di carica. Ciascuno singolarmente può fornire fino a 800 mA, ma solo se vuoi friggerli con le uova. Quando il carico è superiore a 500 mA e la batteria è completamente scarica, il microcircuito inizia a riscaldarsi così tanto che è impossibile tenere il dito. Perché ha un circuito di protezione della temperatura integrato, questo, in linea di principio, non è spaventoso: abbasserà automaticamente la corrente di carico quando si riscalda fino a 120 gradi. Ma non è comunque molto gradevole, quindi ho preferito mettere due pezzi, fortunatamente lo spazio lo permetteva. La corrente di carica è impostata dai resistori R4 e R5, che ho selezionato in modo che sia di circa 500 mA per due (cioè 250 mA per ciascuno), ai quali non si riscaldano così tanto.

Inoltre, la scheda contiene un connettore mini-USB (J2), transistor Q1, che collega a massa l'ingresso ON del circuito di alimentazione sulla scheda superiore, quando Connessione USB e un modulo di comunicazione Bluetooth.

Ho ordinato le schede da Rezonit e il risultato è stato abbastanza economico: ho pagato meno di 2000 rubli per un pannello di sei diverse schede, che includeva anche due schede del catbot.
I pannelli superiore e inferiore hanno dimensioni di 32x26 mm. Dopo l'assemblaggio (e prima che i falsificazioni vengano risolti), il pannello superiore si presenta così:

E quello in basso è così:

È ora di scrivere il firmware di prova!

Provare il firmware

Ho intenzione di realizzare il firmware finale basato su FreeRTOS (per non perdere tempo con l'implementazione del normale multitasking, il blocco delle code, ecc.), ma per il test ho abbozzato un piccolo firmware che inizializza tutte le periferiche e permette di controllarlo con semplici comandi dal computer. Esaminiamo le inizializzazioni:

Clocking e GPIO

Codice

void InitRCC() ( RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); eriph_TIM3,ENABLE); 2C1,ABILITA); ) void InitGPIO() ( GPIO_InitTypeDef GPIO_InitStructure; //LED GPIO_InitStructure.GPIO_Speed ​​​​= GPIO_InitStructure.GPIO_Mode = GPIO_InitStructure.GPIO_Pin = GPIO_Init(G PIOB, &GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Init(GPIO_InitStructure //Buzzer). GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_50MHz IO_InitStructure.GPIO_Pin = GPIO_Init(GPIOA, &GPIO_InitStructure);


Qui tutto è semplice: applichiamo un orologio a tutte le periferiche di cui abbiamo bisogno, ovvero alle porte I/O, ADC, UART, un paio di timer (uno per il tweeter, il secondo per le unità PWM) e all'I2C . Quindi configuriamo tutti i GPIO.
Cigolante

Codice

void InitBuzzer() ( TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = 4; TIM_TimeBaseStructure.TIM_Prescaler = 1800; TIM_TimeBaseStructure.TIM_ClockDivision = 0; M_CounterMode = TIM_CounterMod e_Up; TIM_TimeBaseInit(TIM2, &TIM_OCInitStructure); TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity_High; _ARRPreloadConfig(TIM2, ABILITA);


La configurazione si riduce all'inizializzazione del timer, la cui uscita è collegata al cicalino. Configuriamo il PWM, ma, di fatto, non modificheremo l'ampiezza dell'impulso, impostandola sempre al 50%. Invece, cambieremo il divisore, facendo sì che il timer cambi la frequenza degli impulsi e emetta un segnale acustico con un tono diverso.
Perché frequenza del sistemaè 36 MHz, impostiamo il periodo su 4 (non abbiamo ancora bisogno di molta scarica PWM) e il prescaler su 1800, ottenendo una frequenza di 4 KHz.
Unità

Codice

void InitServo() ( TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = 0xFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0xB0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; .TIM_CounterMode = T IM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure) TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; ; TIM_OCInitStructure.TIM_Pulse = 0;


Facciamo lo stesso del tweeter, ma lo affiniamo già per l'uscita PWM con i parametri richiesti dagli azionamenti, ovvero una frequenza di circa 50 Hz, e questo è sufficiente gran numero scarichi per controllare la velocità con grande precisione. Pertanto, impostiamo il prescaler su 176 e il periodo su 4096, che ci fornisce circa 50 Hz e 12 bit di PWM.
Accelerometro e Bluetooth

Codice

void InitAccel() ( I2C_InitTypeDef I2C_InitStructure; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; struttura.I2C_Ack = I 2C_Ack_Enable; I2C_AcknowledgedAddress = I2C_InitStructure.I2C_ClockSpeed ​​= 200000; ); void InitBT() ( USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_Init Structure.USART_StopBits = USART_StopBits _1; USART_InitStructure.USART_Parity = USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_MODE_TX Usart_init (USART1, & Usart_initSTRUTER Sart_it_rxne, abilita);


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ABILITA;

Codice

#define OPCODE 0 #define LENGTH 1 #define PAYLOAD 2 enum CommandStates (CS_DONE, CS_RECEIVING, CS_EXECUTING); enum CommandCodes (CC_TEST=0x01, CC_SERVO_STATE, CC_SET_SERVO1_DS, CC_SET_SERVO2_DS, CC_GET_ACCEL_REG, CC_SET_ACCEL_REG, CC_GET_BATTERY, CC_LED_STATE, CC_BUZZER, CC_INVALID); enum ErrorCodes(EC_NONE, EC_INVALID_CMD, EC_MAX_LEN_EXCEEDED); enum ReplyCodes(RC_NONE, RC_EXECUTED, RC_TEST, RC_ACCELREG, RC_ERROR); typedef struct (carattere senza segno Comando; carattere senza segno Stato; carattere senza segno Lunghezza; carattere senza segno Payload; )CommandDescriptor; DescrizioneComando Cmd; void InitCmd(CommandDescriptor *Comm) ( Comm->Command=0; Comm->Length=0; carattere senza segno i; for(i=0;i Carico utile[i]=0; Comm->Stato=CS_DONE; //Stato di inizializzazione alla fine, per evitare che l'interruzione interferisca) void SetInvalidCmd(CommandDescriptor *Comm, unsigned char ErrorCode) ( Comm->Command=CC_INVALID; Comm->Length=3; Comm->State=CS_EXECUTING; //Just invia indietro errore Comm->Payload=ErrorCode; ) void USART1_IRQHandler(void) ( char data; if ((USART1->SR & USART_FLAG_RXNE) != (u16)RESET) ( data = USART_ReceiveData(USART1); switch(Cmd.State ) ( case CS_DONE: if(data>=CC_INVALID) ( SetInvalidCmd(&Cmd, EC_INVALID_CMD); return; ) Cmd.Command=data; Cmd.Length=0; Cmd.State=CS_RECEIVING; return; case CS_RECEIVING: if(Cmd. Lunghezza==0) ( if(dati>CMD_BUFFER_LEN) ( SetInvalidCmd(&Cmd, EC_MAX_LEN_EXCEEDED); return; ) Cmd.Lunghezza=dati; BufPtr=0; return; ) if(BufPtr


=Cmd.Lunghezza-2) ( Cmd.State=CS_EXECUTING; return; ) case CS_EXECUTING: return;
) ) )
Per prima cosa dichiariamo la struttura del comando, che sarà composta, appunto, dal comando stesso, dallo stato (eseguito, in fase di ricezione, in fase di elaborazione), dalla lunghezza del pacchetto (compresi i due campi già elencati) e il payload, che può variare da 0 a 8 byte.
Descriviamo una funzione ausiliaria per inizializzare questa struttura e un'altra per riempirla con valori di comando non validi. Ora descriviamo l'interruzione. Dopo aver ricevuto un byte tramite UART, vediamo cosa succede lì con il comando corrente (quello che è l'unico nella "coda") -.
Se siamo in fase di ricezione, controlliamo la lunghezza di ciò che riceviamo in modo che non superi i 10 byte (2 byte di header e payload) e la lunghezza dichiarata nel secondo byte dell'header. Se qualcosa non va segnaliamo un errore, altrimenti diciamo che il comando è stato ricevuto ed è entrato nello stato CS_EXECUTING. D'ora in poi ignoriamo tutto ciò che ci arriva finché qualcuno non dà uno stato a questo comando CS_FATTO.
Se avessimo una vera coda, potremmo gettarvi dentro il comando ricevuto e per ora accettare quelli successivi.

In realtà questo è tutto: la funzione principale del firmware inizializza semplicemente le periferiche, attiva il Bluetooth e attende che il comando abbia uno stato CS_EXECUTING. Successivamente, elabora il comando (non fornirò questo codice, è solo un grande passaggio utilizzando codici operativi con byte del payload immessi nei registri) e imposta il suo stato CS_FATTO.

vuoto principale()

Codice

int main(void) ( InitCmd(&Cmd); InitHardware(); DisableServos(); EnableBT(); EnableLED(); while(1) ( if(Cmd.State==CS_EXECUTING) ( ProcessCmd(&Cmd); InitCmd(&Cmd );) ) )

Modifica di azionamenti per rotazione costante e problemi di progettazione
Poiché gli azionamenti sono inizialmente progettati per ruotare entro 170 gradi, devono essere leggermente aggiornati per poterli utilizzare come motori robot. A causa delle loro piccole dimensioni, all’inizio potrebbe non essere molto semplice.
In generale, tutti gli azionamenti sono costruiti allo stesso modo, indipendentemente dalle dimensioni: hanno un motore, hanno un cambio, il cui albero di uscita si trova sullo stesso asse con un resistore variabile, dal quale il circuito di controllo riceve informazioni sulla posizione corrente dell'albero.


Il resistore è incluso come divisore tra potenza e terra. C'è un fermo su uno degli ingranaggi dell'albero di uscita che impedisce al servo di girare più del dovuto, e anche il potenziometro stesso agisce come tale fermo. Nello specifico, in queste unità tutto è abbastanza banale: il tappo è una sporgenza sull'albero di uscita, abbastanza grande, quindi è più facile tagliare non quello, ma ciò su cui poggia, la sporgenza all'interno del coperchio dell'unità

Questa sporgenza può essere facilmente fusa con un saldatore; l'importante è assicurarsi che non rimangano pezzi di plastica che interferiscano con la rotazione.
L'albero del potenziometro presenta un piccolo taglio all'estremità, grazie al quale non ruota nell'ingranaggio dell'albero di uscita. Molto convenientemente, si trova in una piccola rientranza in cui si inserisce questo attrezzo. Pertanto, lo tagliamo/fonderemo semplicemente con un saldatore finché non rimarrà più traccia di questo taglio. Questo è tutto, l'ingranaggio ruota silenziosamente senza toccare il resistore variabile.


Lubrificare tutto ulteriormente, perché... Il grasso di ricambio cinese, chiude il coperchio superiore. Ne è rimasto ben poco.
Apriamo il coperchio inferiore e vediamo il circuito di controllo collegato al motore e al potenziometro.


Tagliamo spietatamente i fili dal potenziometro e li rimuoviamo dal servo in modo che non interferiscano. Alle piazzole di contatto a cui sono andati, abbiamo saldato due piccoli resistori SMD identici, con una resistenza totale di circa 5 KOhm (se un po' di più o un po' di meno, non è un grosso problema), formando un divisore costante. Ne ho saldati due da 2,4KOhm.
Poiché i motori si troveranno speculari l'uno rispetto all'altro, per uno di essi scambiamo anche i fili che vanno al motore. Ovviamente puoi farlo con il software, ma l'hardware è più carino.

Questo è tutto, ora il servo considererà sempre che il suo albero sia esattamente al centro. E applicando un segnale PWM con un valore del ciclo di lavoro superiore alla media, l'albero di uscita inizierà a ruotare in una direzione e con un ciclo di lavoro inferiore nell'altra. E quanto più il valore indicato è lontano dalla media, tanto più velocemente ruota l'albero.

Test e falsificazioni


Il cliente testa un dispositivo prototipo

Dato che ho già mostrato un video e una foto del dispositivo sopra, questa sezione conterrà principalmente descrizione del testo il rastrello su cui ho calpestato. Alcuni di essi sono avvenuti per colpa mia, altri non sono dipesi da me.

Incasinare il cibo
Il primo vero falso, che ha comportato la maggior parte delle modifiche allo schema. Collegato al convertitore boost. Quando ho avviato il dispositivo per la prima volta (ancora senza unità), non ho notato nulla, il controller si è avviato e ha lampeggiato. All'uscita del convertitore erano presenti 5 V. È ora di controllare le unità, ed è lì che è uscito il rastrello. Quando si collegavano gli azionamenti, il convertitore veniva immediatamente interrotto: la sua protezione integrata veniva attivata, spegnendo il microcircuito se la tensione di uscita scendeva di oltre il 10% al di sotto del valore specificato (5 V). Il debug mi ha richiesto molto tempo, incluso sedermi davanti a un oscilloscopio, sostituire il chip del convertitore stesso con uno simile, testare diversi induttori, ecc.
È interessante notare che anche i contenitori appesi vicino agli azionamenti non hanno aiutato, quindi ho deciso che il problema era nel layout della scheda o nell'induttore. Le misurazioni hanno dimostrato che il convertitore smette di funzionare con un carico superiore a 90 mA, anche in caso di carico puramente resistivo! Allo stesso tempo, l'efficienza era di circa il 40%, ovviamente inaccettabile per un convertitore di impulsi.

Il motivo si è rivelato incredibilmente banale: sembra che invece di un condensatore ceramico in uscita da 10 µF, ho erroneamente saldato lo stesso da 1 µF. Con una tale capacità di uscita, il microcircuito non è riuscito a raggiungere la modalità operativa e i grandi condensatori appesi agli ugelli non lo hanno aiutato affatto.
Dopo aver leggermente spogliato la scheda della maschera, ho saldato due condensatori ceramici da 22 uF all'uscita del convertitore, al suo ingresso e proprio davanti ai servi.
Allo stesso tempo, ho installato un induttanza di livellamento (più precisamente, una perlina di ferrite), BLM41PG471SN1, da 2 A, tra l'uscita del convertitore e i servi.
Inoltre, come si è scoperto, lo spazio sulla scheda consente di inserire un condensatore al tantalio nel pacchetto “A”, 150 uF, proprio accanto all'uscita del convertitore.
In effetti per un corretto funzionamento sarebbero bastati un condensatore da 22 uF in uscita ed uno in ingresso, ma visto che lo spazio lo permetteva ho deciso di andare sul sicuro.
Il risultato è stato semplicemente magnifico, l'uscita a 5 V era quasi silenziosa anche sotto carico e l'efficienza del convertitore, secondo le mie misurazioni (ho incluso degli amperometri nei circuiti di ingresso e uscita), ha raggiunto il 93%, che di per sé è un ottimo risultato. indicatore.

Conclusione dal falso: Controlla quali elementi saldi sulla scheda. I convertitori di impulsi sono cose sensibili e i componenti appesi al moccio non miglioreranno la situazione, anche se la direzione del pensiero (capacità di uscita insufficiente) era corretta.
La resistenza delle sonde e dello shunt del multimetro, la capacità e l'induttanza delle breadboard distorcono l'immagine, quindi tali cose devono essere testate nella configurazione finale e non sul moccio.

Cazzata con l'accelerometro
Falsificazione emorroidaria, sempre dovuta a disattenzione. Durante il test delle periferiche, si è scoperto che l'accelerometro non rispondeva. Perché si trova sul bus I2C, la comunicazione inizia (senza contare l'impulso di start) con il trasferimento dell'indirizzo del dispositivo. Dopodiché dovrebbe rispondere con un impulso di conferma se l'indirizzo corrisponde. Non c'era alcun impulso.
Dato che il corpo dell'accelerometro era il più difficile da saldare (3x3 mm e non c'era un cuscinetto di "massa" sul ventre del microcircuito, motivo per cui era disgustosamente centrato), ho deciso che il problema era nella saldatura e ho speso molto tempo tempo risaldandolo più volte. Non ha aiutato.
Poi ho deciso che i resistori integrati promessi si erano rivelati insufficienti, quindi ho pulito la scheda e l'ho saldata da sola. Non ha aiutato.
Ho controllato il codice molte volte e ho controllato l'indirizzo con la scheda tecnica. Non ha aiutato.
Di conseguenza, per miracolo, ha fornito un indirizzo che differiva uno per uno da quello specificato (in una delle cifre della rappresentazione binaria dell'indirizzo). Ha aiutato.
Ho iniziato a scavare nelle schede tecniche perché semplicemente non poteva accadere che il dispositivo rispondesse a un indirizzo diverso. E ho scoperto una cosa grandiosa.
Si scopre che ci sono due modifiche dell'accelerometro: e.
Corpo identico. Schede tecniche identiche. Stessa mappa dei registri. È solo che il secondo non può misurare 2g/4g/8g, ma il primo può misurare solo 2g/4g.
E i loro indirizzi differiscono di uno. Buon Google, quando ho iniziato a digitare LIS133 mi ha detto automaticamente “LIS133DLH”, non ho visto subito la differenza nei datasheet, quindi ho premuto l'Axel con l'indirizzo di qualcun altro.

Conclusione dal falso: Controlla il nome dell'elemento nella scheda tecnica. Se differisce da quello previsto di almeno una lettera, assicurati di scoprire di cosa è responsabile questa lettera. Molto spesso le lettere finali non sono importanti per lo sviluppo e si riferiscono al tipo di consegna del componente, ma succede anche come con questo accelerometro.

Fanculo il modulo Bluetooth
Ebbene, questa stronzata è più sulla coscienza dei cinesi. Si scopre che producono diverse modifiche a questo modulo, HC-04, HC-05, HC-06: non differiscono nell'hardware, differiscono nel firmware. Se lo desideri, puoi cambiarli l'uno con l'altro.
Ho ricevuto HC-04 invece di HC-05, differiscono in quanto 04 ha un firmware più semplice e se 05 viene commutato in modalità comando inviando un segnale a uno dei suoi GPIO e 05 può funzionare sia come master che come slave, quindi 04 funziona sempre solo come slave (o solo come master, ma non ho visto moduli del genere in vendita), inizialmente è in modalità di ricezione comandi e smette di rispondere ad essi dopo aver stabilito una connessione con il master.
Inoltre, nessuno di questi moduli supporta la modalità di sospensione a risparmio energetico.
Pertanto, si è scoperto che il segnale I emesso per commutare il modulo in modalità comando è inutile e anche che il modulo consuma costantemente da 20 a 40 mA durante la ricerca di un master.
La soluzione è stata trasferire il segnale di controllo, inutile in questa situazione, al pin RESET del modulo. Ora, quando viene applicato un livello basso, il modulo entra nello stato RESET e smette di consumare.

Conclusione dal falso: L’Oriente è una questione delicata. I moduli cinesi sono una lotteria, bisogna leggere bene le schede tecniche, controllare anche cosa ti mandano.

Falsificazione con interfaccia di debug
Non esattamente un falso, ma spunti di riflessione. Sì, per il firmware e il debug sono davvero sufficienti due pin di segnale SWD: orologio e dati. Tuttavia, non verrà cucito affatto (in ogni caso da ST-LINK) se il pin del programmatore VAPP non collegato direttamente all'alimentazione del controller. Il programmatore testa la tensione con esso e generalmente è abbastanza sensibile; per qualche motivo non ha funzionato anche quando l'ho collegato alla sorgente da 3,3 V del programmatore. Questo, tuttavia, non è così spaventoso: beh, l'ho saldato a uno dei connettori di livellamento.
Qualcos'altro è molto peggio. Prendi uno spillo NRST, che, ovviamente, è responsabile del ripristino del controller. E infatti SWD può resettare il software del controller, quindi in linea di principio non è necessario collegarlo. Ma.
Il rastrello si è alzato mentre stavo testando la modalità di sospensione. Sfortunatamente, non ho letto questi termini importanti da Refman STM32, sezione Supporto di debug per le modalità a basso consumo: Il core non consente la disattivazione di FCLK o HCLK durante una sessione di debug. Poiché sono necessari per la connessione al debugger, durante un debug devono rimanere attivi.
Durante la modalità di sospensione più profonda, modalità Stand-By, il clock viene disattivato insieme al debug. E perché Per il test dei consumi ho semplicemente inserito l'ingresso stand-by in quello principale, poi mi sono ritrovata con un controller non cucito.
Il collegamento tra il reset e questo fatto è semplice: il programmatore può cucire da sotto il reset quando lo stand-by non è ancora stato attivato (e si attiva subito all'accensione con il mio firmware), solo per questo deve essere in grado per riavviare il controller, che senza pin NRST non poteva farlo.
Ciò che mi ha salvato, stranamente, è stata l'utilità standard della ST, che aveva un'eccellente modalità automatica in cui il programmatore cerca costantemente di rilevare il controller programmabile. Dopo aver attivato questa modalità, ho iniziato a cablare con GND saldato all'ago, cercando di infilare il pad di ripristino che sporgeva appena da sotto il controller. Ha avuto successo, il programmatore è riuscito a prendere in mano il controller prima che si addormentasse di nuovo e ha cancellato il firmware.

Conclusione dal falso: Quando ti addormenti, pensa a come ti sveglierai. Bene, devi rimuovere il reset, ad almeno un millimetro di distanza dal corpo, in modo da poter almeno infilarlo con un ago.

Incasinare le unità
La cazzata più triste, e non è sulla mia coscienza. Le unità, scusate, sono una schifezza. Sono progettati esclusivamente per la loro modalità servo e in modo tale da eseguire O la maggior parte del tempo in una posizione statica. Sotto carico si riscaldano senza pietà. Inoltre, si riscaldano anche se non è attaccato a nulla, l'albero gira e basta. Pertanto, non possono funzionare in modalità rotazione costante: dopo due minuti, anche a velocità ridotta e con un'eccellente lubrificazione all'interno (niente si attacca, il movimento è fluido), iniziano a sciogliersi naturalmente.

Il corpo si scioglie e, peggio ancora, gli ingranaggi, soprattutto quello di uscita. Successivamente, l'unità si inceppa e solo la sostituzione aiuta. Quindi il catbot nella forma in cui viene presentato nella foto e nel video può funzionare solo per 1-2 minuti con pause. Abbiamo quindi dovuto smontarlo e sostituire i motori con i più sani, lenti e consumanti MG90, dotati di ingranaggi metallici in grado di girare lentamente per un tempo infinitamente lungo.
Quindi ora non entra più nella palla (nemmeno quella grande, per non parlare di quella piccola) e guida molto lentamente.
Il gatto, tuttavia, è ancora interessato.

Conclusione dal falso: Ebbene, quale conclusione può esserci? Questo era un campione di prova, solo per rivelare queste cose. Conclusione sulle unità: utilizzare le unità piccole con grande cura. Forse tireranno un esagono o un quadripode ultraleggero e ultrapiccolo, proverò ad assemblarne uno quando avrò tempo.

Conclusioni generali sul lavoro: Nel complesso, è stata un'esperienza utile. E al gatto piace nonostante i nuovi motori, con i quali il catbot è diventato più grande e più lento. Soprattutto quando emette un segnale acustico)
Per chi colleziona cosa simile Posso anche dire questo: il sensore di rotazione (l'asse non gli appartiene) è una cosa obbligatoria, quindi nessuna quantità di calibrazione e valori costanti possono raggiungere la stessa velocità di due diversi azionamenti e delle ruote su di essi. Pertanto, il robot si muoverà in cerchio. Con una buona calibrazione - su un cerchio molto ampio, quindi sarà visibile solo quando si guida da un muro all'altro. Se è brutto, lo noterai prima. Quindi ho intenzione di inserire un sensore più sofisticato nella prossima versione. Bene, e unità più adatte, ovviamente.
C'è anche l'idea di provare a organizzare il raffreddamento dei motori in piccoli azionamenti insieme a velocità ridotte, questo potrebbe essere sufficiente per il corretto funzionamento (dopotutto, la dissipazione del calore da essi ora è disgustosa); Se funziona, attendi il prossimo articolo, su catbot v1.5, con unità raffreddate e su FreeRTOS!

Questo è tutto per me, colleziona robot e fai divertire i tuoi gatti!

26.01.2011, 09:18
Fonte:

Di solito negli articoli cerco di presentare il materiale nell'ordine del suo sviluppo, ma penso che non sia così. Pertanto, saltiamo le fasi di progettazione del fondamentale schema elettrico, layout PCB e tutto il resto. Nella Figura 1 vediamo che tipo di “disgrazia” ho avuto.

A prima vista sembra solo un mucchio di ferro, componenti elettronici e fili. Ciò è probabilmente dovuto al fatto che sono stati utilizzati pezzi di materiali diversi. Scopriamolo.

Ora è tutto in ordine. Al microcontrollore Attiny2313 da due sensori a infrarossi viene ricevuto un segnale di ostacolo (uno o zero logico). Quindi, secondo il firmware, il microcontrollore controlla il chip del driver del motore L293D (controlla la corrente fino a 1 Ampere). La Figura 3 mostra una fotografia di un robot capovolto.

La base del design di un robot fatto in casa è una striscia di metallo piegata a forma di trapezio. L'angolo di piegatura è di circa 120°. È di fondamentale importanza che su entrambi i lati si ottenga la stessa piega, altrimenti il ​​robot non si muoverà in linea retta. Anche se, d'altro canto, ciò che un meccanico o un ingegnere elettronico ha fatto male può talvolta essere corretto da un programmatore, ad esempio utilizzando la PWM per ottenere il movimento lineare del robot

Sappiamo tutti dal corso di geometria scolastica che un piano è formato da tre punti oppure da una linea retta e un punto nello spazio. Il terzo punto è una ruota a rulli che gira liberamente.

I ricevitori dei sensori IR e dei fototransistor si trovano nella parte inferiore per ridurre l'illuminazione e minimizzare i falsi positivi. I sensori IR stessi sono montati su cerniere mobili, che consentono di regolare l'area di scansione. A proposito, è stata interessante la reazione del mio gatto al robot che striscia nel corridoio? Il mio gatto è nero. Ho impostato i sensori IR su uno sfondo grigio, quindi il robot si è girato davanti al gatto quasi all'ultimo momento e il gatto ha fatto un passo indietro con un forte sibilo.

La modifica successiva per il robot sono stati i sensori IR sulla pancia, che consentono al robot di seguire una linea nera tracciata su carta bianca con un pennarello. L'implementazione richiedeva tre sensori e un comparatore sul chip LM339N per alleggerire il microcontrollore. Uno svantaggio significativo si è rivelato necessario preimpostazione sensori con resistenze di regolazione in base all'illuminazione della stanza.

PS La ricompensa per aver perso tempo nella creazione di un dispositivo inutile, forse, sarà la chiarezza del funzionamento e della memoria del microcontrollore, che raccoglierà polvere sullo scaffale finché il figlio di qualcuno non sarà interessato.

Ho deciso di passare senza problemi ai modelli in movimento dinamico. Questo è un progetto per un piccolo robot fatto in casa controllato a infrarossi, assemblato con parti semplici e facilmente reperibili. Si basa su due microcontrollori. È prevista la trasmissione dal telecomando PIC12F675, e la parte ricevente per il controllore motore è implementata su PIC12F629.

Circuito robotico su un microcontrollore

Tutto è andato liscio con la parte digitale, l'unico problema era nell '"unità di propulsione" - piccoli riduttori, che sono molto problematici da realizzare a casa, quindi ho dovuto sviluppare l'idea " vibrobug"I micromotori sono controllati tramite interruttori a transistor amplificatori sul BC337. Sono sostituibili con qualsiasi altro piccolo transistor npn con una corrente di collettore di 0,5 A.

Le dimensioni si sono rivelate molto piccole: nella foto c'è un confronto con una moneta e anche vicino a una scatola di fiammiferi. Gli occhi del robot sono costituiti da LED super luminosi, inseriti in un alloggiamento di piccoli condensatori elettrolitici.

Discuti l'articolo PICCOLO ROBOT FATTO IN CASA

Scegliere un microcontrollore per creare il tuo robot. Per prima cosa devi capire il concetto di cos'è un microcontrollore e cosa fa?

Microcontrolloreè un dispositivo informatico in grado di eseguire programmi (cioè una sequenza di istruzioni).

Viene spesso definito il “cervello” o il “centro di controllo” del robot. In genere, il microcontrollore è responsabile di tutti i calcoli, del processo decisionale e delle comunicazioni.

Per comunicare con il mondo esterno, il microcontrollore dispone di una serie di pin o pin per rilevare elettricamente il segnale. Pertanto il segnale può essere impostato al massimo (1/C) o al minimo (0/off) utilizzando un'istruzione di programmazione. Questi pin possono essere utilizzati anche per leggere i segnali elettrici. Provengono da sensori o altri dispositivi e determinano se i segnali sono alti o bassi.

La maggior parte dei microcontrollori moderni può anche misurare la tensione dei segnali analogici. Si tratta di segnali che possono avere una gamma completa di valori anziché due livelli chiaramente definiti. Ciò avviene utilizzando un convertitore digitale analogico (ADC). Di conseguenza, il microcontrollore può assegnare un valore numerico al segnale sotto forma di tensione analogica. Questa tensione non è né alta né bassa e tipicamente è compresa tra 0 e 10 volt.

Cosa può fare un microcontrollore?

Sebbene a prima vista i microcontrollori possano sembrare piuttosto limitati, è possibile eseguire molte azioni complesse utilizzando i pin di segnale alto e basso per programmare un algoritmo. Tuttavia, la creazione di algoritmi molto complessi, come comportamenti intelligenti o programmi molto grandi, potrebbe semplicemente non essere possibile per un microcontrollore a causa delle risorse limitate e dei limiti di velocità.

Ad esempio, puoi programmare una sequenza ripetuta per far lampeggiare le luci. Quindi il microcontrollore alza il segnale, aspetta un secondo, lo abbassa, aspetta un altro secondo e ricomincia. La luce è collegata al pin di uscita del microcontrollore e lampeggerà all'infinito in un programma ciclico.


Allo stesso modo, i microcontrollori possono essere utilizzati per controllare altri dispositivi elettrici. Principalmente come azionamenti (se collegati a un controller del motore), dispositivi di memorizzazione (come schede SD), interfacce WiFi o Bluetooth, ecc. Come conseguenza di questa incredibile versatilità, i microcontrollori possono essere trovati nella vita di tutti i giorni.

In quasi tutti gli elettrodomestici o dispositivo elettronico Viene utilizzato almeno un microcontrollore. Sebbene vengano spesso utilizzati diversi microcontrollori. Ad esempio, sui televisori, lavatrici, pannelli di controllo, telefoni, orologi, forni a microonde e molti altri dispositivi.

A differenza dei microprocessori (ad esempio, un'unità di elaborazione centrale in personal computer), il microcontrollore non richiede dispositivi periferici. Come esterno RAM o dispositivo di archiviazione esterno per il funzionamento. Ciò significa che, sebbene un microcontrollore possa essere meno potente delle controparti PC. È quasi sempre molto più semplice ed economico sviluppare circuiti e prodotti basati su microcontrollori perché sono necessari pochissimi componenti hardware aggiuntivi.

È importante notare che il microcontrollore può emettere solo pochissimo gran numero energia elettrica attraverso i suoi contatti di uscita. Ciò significa che non è possibile collegare un potente motore elettrico, un solenoide, un'illuminazione di grandi dimensioni o qualsiasi altro carico di grandi dimensioni direttamente al microcontrollore. Tentare di eseguire questa operazione potrebbe danneggiare il controller.

Quali sono le funzioni più specializzate di un microcontrollore?

L'hardware speciale integrato nei microcontrollori consente a questi dispositivi di fare molto più che semplici I/O digitali, calcoli di base e processi decisionali. Molti microcontrollori supportano facilmente i protocolli di comunicazione più diffusi, come UART (RS232 o altro), SPI e I2C. Questa funzionalità è incredibilmente utile quando si comunica con altri dispositivi come computer, sensori o altri microcontrollori.

Anche se questi protocolli possono essere implementati manualmente, è sempre meglio avere un hardware integrato dedicato che si prenda cura dei dettagli. Ciò consente al microcontrollore di concentrarsi su altri compiti e mantenere il programma pulito.


I convertitori analogico-digitali (ADC) vengono utilizzati per convertire i segnali di tensione analogici in segnali digitali. Lì la quantità è proporzionale all'entità della tensione e questo numero può quindi essere utilizzato nel programma del microcontrollore. Per rendere l'energia in uscita intermedia diversa da alta e bassa, alcuni microcontrollori hanno la capacità di utilizzare la modulazione di larghezza di impulso (PWM). Ad esempio, questo metodo consente di modificare gradualmente la luminosità del LED.

Infine, alcuni microcontrollori dispongono di un regolatore di tensione integrato. Ciò è abbastanza conveniente poiché consente al microcontrollore di funzionare con un ampio intervallo di tensione. Pertanto non è necessario fornire i valori di tensione richiesti. Inoltre semplifica la connessione vari sensori e altri dispositivi senza un'ulteriore alimentazione regolata esterna.

Analogico o digitale?

I segnali di ingresso e di uscita da utilizzare dipendono dal compito e dalle condizioni. Ad esempio, se il tuo compito è semplicemente accendere o spegnere qualcosa, allora ti basta che il segnale sul pin di ingresso del microcontrollore sia digitale. Lo stato binario dell'interruttore è 0 o 1. Il livello alto del segnale può essere 5 volt e il livello basso 0. Se è necessario misurare, ad esempio, la temperatura, è necessario un segnale di ingresso analogico. Successivamente, l'ADC sul microcontrollore interpreta la tensione e la converte in un valore numerico.


Come programmare i microcontrollori?

La programmazione dei microcontrollori è diventata più semplice grazie all'uso di moderni ambienti di sviluppo integrato (IDE) con librerie complete. Coprono facilmente tutti i compiti più comuni e ne hanno molti esempi già pronti codice.

Al giorno d'oggi, i microcontrollori possono essere programmati in una varietà di linguaggi di alto livello. Si tratta di linguaggi come C, C++, C#, Java, Python, Basic e altri. Naturalmente è sempre possibile scrivere un programma in linguaggio assembly. Anche se questo è per utenti più avanzati con esigenze speciali (con un pizzico di masochismo). In questo senso, chiunque dovrebbe essere in grado di trovare il linguaggio di programmazione che meglio si adatta ai propri gusti e alle precedenti esperienze di programmazione.

La programmazione dei microcontrollori sta diventando ancora più semplice poiché i produttori creano ambienti di programmazione grafici. Queste sono icone che contengono diverse righe di codice. I pittogrammi sono collegati tra loro. Di conseguenza, viene creato un programma visivamente semplice, ma contenente una grande quantità di codice. Ad esempio, un'immagine potrebbe rappresentare il controllo del motore. L'utente deve solo posizionare l'icona dove necessario e indicare il senso di rotazione e la velocità.


Le schede microcontrollore sviluppate sono abbastanza comode da usare. E sono più facili da usare per molto tempo. Forniscono inoltre comode interfacce di alimentazione e programmazione USB. Pertanto, è possibile connettersi a qualsiasi computer moderno.

Perché non utilizzare un computer standard?

Ovviamente, un microcontrollore è molto simile al processore di un computer. Se è così, perché non usare semplicemente un computer per controllare il robot? Quindi dovresti scegliere un computer desktop o un microcontrollore?


In sostanza, nei robot più avanzati, soprattutto quelli che implicano calcoli e algoritmi complessi, il microcontrollore viene spesso sostituito (o integrato) da un computer standard. Installato sul tuo computer desktop scheda madre, processore, RAM del dispositivo (ad esempio, disco rigido), scheda video (integrata o esterna).

Inoltre c'è periferiche, come monitor, tastiera, mouse, ecc. Questi sistemi sono generalmente più costosi, fisicamente più grandi e consumano più energia. Le principali differenze sono evidenziate nella tabella seguente. Inoltre, spesso hanno più funzionalità del necessario.

Come scegliere il microcontrollore giusto?

Se stai studiando robotica, avrai bisogno di un microcontrollore per qualsiasi progetto di robotica. Per un principiante, scegliere il microcontrollore giusto può sembrare un compito arduo. Soprattutto considerando la gamma specifiche tecniche e ambiti di applicazione. Sul mercato sono disponibili molti microcontrollori diversi:

  • Arduino
  • Atomo di base
  • BasicX
  • Lego EV3
  • e molti altri

Per scegliere il microcontrollore giusto, poniti le seguenti domande:

Qual è il microcontrollore più popolare per la mia applicazione?

Naturalmente, creare robot e progetti elettronici in generale non è una gara di popolarità. È molto positivo se il microcontrollore ha molto supporto da parte della comunità. Ed è utilizzato con successo in situazioni simili o addirittura identiche. Di conseguenza, ciò può semplificare notevolmente la fase di progettazione. In questo modo potrai trarre vantaggio dalle esperienze di altri utenti, sia dilettanti che professionisti.

I membri delle comunità di progettazione di robot condividono tra loro risultati, codici, immagini, video e parlano in dettaglio di successi e persino di fallimenti. Tutto questo è materiale accessibile e l'opportunità di ricevere consigli da utenti più esperti. Pertanto, può rivelarsi molto prezioso.

Il tuo robot ha esigenze particolari?

Il microcontrollore deve essere in grado di eseguire tutte le azioni speciali del tuo robot affinché le funzioni vengano eseguite correttamente. Alcune caratteristiche sono comuni a tutti i microcontrollori (ad esempio, la presenza di ingressi e uscite digitali, la capacità di eseguire semplici operazioni matematiche, confrontare valori e prendere decisioni).

Altri controller potrebbero richiedere hardware specifico (ad esempio, ADC, PWM e supporto del protocollo di comunicazione). Devono essere presi in considerazione anche i requisiti di memoria e velocità nonché il numero di pin.

Quali componenti sono disponibili per un particolare microcontrollore?

Forse il tuo robot ha requisiti speciali o richiede un sensore o un componente specifico. E questo è fondamentale per il tuo progetto. Pertanto, la scelta di un microcontrollore compatibile è ovviamente molto importante.

La maggior parte dei sensori e dei componenti possono comunicare direttamente con molti microcontrollori. Sebbene alcuni componenti siano progettati per interagire con un microcontrollore specifico. Forse saranno unici e incompatibili con altri tipi di microcontrollori.

Cosa ci riserva il futuro?

Il prezzo dei computer sta crollando e i progressi tecnologici li stanno rendendo più piccoli e più efficienti. Di conseguenza, i computer a scheda singola sono diventati un’opzione interessante per i robot. Possono funzionare con pieno sistema operativo(Windows e Linux sono i più comuni).

Inoltre, i computer possono connettersi a dispositivi esterni, come dispositivi USB, display LCD, ecc. A differenza dei loro antenati, questi computer a scheda singola tendono a consumare molta meno energia.

Parte pratica

Per selezionare un microcontrollore, facciamo un elenco dei criteri di cui abbiamo bisogno:

  • Il costo del microcontrollore dovrebbe essere basso
  • Dovrebbe essere facile da usare e ben supportato
  • La disponibilità di documentazione accessibile è importante
  • Deve essere programmato in un ambiente grafico
  • Deve essere popolare e avere una comunità di utenti attiva
  • Poiché il nostro robot utilizzerà due motori e vari sensori, il microcontrollore avrà bisogno di almeno due porte per controllare i motori e diverse porte per collegare i sensori. In futuro dovrebbe anche essere possibile espandere il numero di dispositivi collegati.

Soddisfa questi criteri Modulo EV3 dal set Lego Mindstorms EV3.


Panoramica del mattoncino EV3

In questo articolo parleremo dei robot più interessanti, il cui principio costruttivo è quello di utilizzare semplici circuiti analogici. Ne esamineremo le caratteristiche e i principi di base e alla fine proveremo a realizzare un semplice robot.
È facile anche per i radioamatori principianti!

Si consiglia di utilizzare il minor numero possibile di elementi elettronici durante la creazione di un robot e si possono anche utilizzare rifiuti elettronici.

Il principio più importante nella progettazione di un robot BEAM è imitare la natura degli esseri viventi.
Il robot BEAM deve avere proprietà inerenti agli esseri viventi. Naturalmente, non stiamo parlando di segni come la respirazione, la crescita, la riproduzione, perché il robot non ne ha bisogno. Ma il cibo, il movimento e lo sviluppo per questi robot sono il significato principale della vita.

Il movimento è un segno integrale (proprietà) di qualsiasi creatura vivente. Questa è la cosa più semplice che può essere implementata in un robot BEAM. A mio avviso, il movimento può essere spontaneo o deliberato (intenzionale). In relazione ai robot intelligenti, possiamo dire che a loro sono richiesti solo movimenti deliberati. Ad esempio, in una persona, i muscoli facciali possono muoversi involontariamente per trasmettere le espressioni facciali (ad esempio, a causa di un'emozione improvvisa), ma per un robot qualsiasi movimento non necessario porta a uno spreco di energia.

È un compito difficile ma interessante da creare intelligenza artificiale Robot BEAM, perché secondo la filosofia della robotica BEAM, non utilizzano microcontrollori e microprocessori, ma tutto è fatto su componenti analogici discreti. L'uso di microcontrollori non è vietato, ma gli istinti di base del robot devono basarsi sull'uso di una varietà di modelli comportamentali associati direttamente a sensori e sensori con un livello minimo di elaborazione del segnale.

Nutrizione

Nella maggior parte dei casi, la fonte di alimentazione è una batteria. Ma se vuoi creare un robot autoalimentato, devi utilizzare l'energia delle radiazioni (ad esempio la luce solare). Un dispositivo che converte l'energia solare in energia diretta corrente elettrica chiamata batteria solare composta da fotocellule a semiconduttore. Pannelli solari fornire piccole quantità di energia elettrica in tempo reale, ma solo in presenza del sole. Per non “morire” in assenza del sole, è consigliabile utilizzare batterie ricaricabili per immagazzinare l'energia accumulata per una “giornata piovosa”... o una giornata nuvolosa.

Adattamento e comportamento

Un robot basato su circuiti analogici è più adatto all'ambiente rispetto a un robot digitale, la cui efficacia termina quando incontra una situazione non specificata nel programma del suo cervello digitale. In altre parole, i robot digitali non possono risolvere problemi per i quali le risposte non sono incluse nel loro programma.

Il concetto dei robot BEAM, proposto da Mark Tilden, era la reazione a fattori esterni dovrebbero essere forniti in una prima fase dalla macchina stessa, senza la partecipazione di alcun “cervello”, come è avvenuto nella natura vivente, nel percorso dai protozoi all’uomo. Il miglioramento e la creazione di sistemi robotici più complessi dovrebbero seguire la stessa strada.

Specie

Ci sono diversi tipi Robot BEAM, progettati per eseguire diversi compiti.
Audiotropi- reagire ai suoni.
Fototropi- reagire alla luce.
Radiotropi- rispondere alle frequenze radio.
Termotropi- reagire alla radiazione termica.

I fototropi sono i più comuni, poiché trovare la luce è il compito più ovvio per un robot a energia solare.

Struttura modulare

Personalmente mi piace l’idea di creare un robot BEAM partendo da singoli moduli funzionali, e seguendo il principio “dal semplice al complesso” sarà possibile sviluppare il robot aggiungendo sempre più nuovi moduli. Ogni modulo stesso può funzionare separatamente, ad es. nessun cervello centralizzato verrà utilizzato per elaborare le informazioni.

Telaio

Affinché il robot possa muoversi, è necessario costruirgli un telaio.
Succede diversi tipi: cingolato, su ruote e anche su gambe...
Diamo un'occhiata più da vicino a loro.

1. Cingolato.

L'immagine mostra un telaio finito, che non è difficile da trovare in vendita. Nella maggior parte dei casi, è azionato da una coppia di motoriduttori.
Pro: gira bene senza l'uso dei meccanismi dello sterzo; ha aumentato la capacità di attraversare il paese; Su di esso è conveniente montare quadri elettrici e singoli componenti.
Contro: questo telaio è difficile da montare a casa e costa in media 90 dollari.

2. Telaio su ruote.


Pro: il tipo più semplice in termini di fatto che puoi assemblarlo a casa da solo (ad esempio, da un set di costruzioni per bambini, ecc.) O utilizzare una macchinina.
Svantaggi: per effettuare una svolta è necessario un meccanismo di rotazione dello sterzo, il che significa che sarà necessario utilizzare un motore elettrico aggiuntivo, il che comporta un aumento del peso della struttura e un aumento del consumo di elettricità.

3. Robot sulle gambe.


Questo è il tipo più difficile.
Pro: loro aspetto più vicini agli esseri viventi e i movimenti sembrano più impressionanti.
Svantaggi: viene utilizzato un gran numero di meccanismi e molto spesso un robot di questo tipo necessita di un sistema che garantisca l'equilibrio.

LO FACCIAMO NOI STESSI!

Puoi realizzare il telaio del tuo robot come mostrato nella figura seguente.

Puoi usare una scatola come base. La plastica è migliore perché è un materiale leggero. Nella stessa scatola è conveniente posizionare l'alimentatore: accumulatore, batterie, ecc.
Tieni presente che più grandi sono le ruote, più lento andrà il robot (e potrebbe non muoversi).

Seconda opzione. Qui vengono utilizzati morsetti di plastica per fissare i motori.

I motori elettrici possono essere prelevati da vecchie apparecchiature: registratori, giocattoli, unità disco, ecc.

A casa avevo tre tipi di motori:

La scelta è caduta sul motore superiore. Ha mostrato buone caratteristiche in termini di trazione e consumo di corrente.

Avremo anche bisogno di un vano batteria per fornire energia. L'alimentazione può essere organizzata separatamente: per i motori (potenza) e per il circuito logico.

Di seguito è riportato circuito semplice un robot che segue la luce di una torcia.

Schema 1. “Venire alla luce”.

Questo circuito utilizza fotodiodi. Li selezioniamo in base alla gamma di sensibilità, ad es. considerando a quale luce andrà il robot. Ad esempio, alla luce di una torcia (portata visibile) o al raggio del telecomando di un televisore (portata degli infrarossi). Se illumini la fotocellula VD1, il Motore 1 ruoterà e se illumini la fotocellula VD2, ruoterà il Motore 2. Tenendo conto di ciò, disporremo i motori in modo che quando VD1 è illuminato, il Motore 1 giri il robot verso la luce.

E se i motori vengono scambiati, il robot, al contrario, si allontanerà dalla luce.

Consideriamo ora le fotocellule.
Come elementi sensibili alla luce vengono utilizzati fotodiodi, fototransistor, fotoresistori, ecc. Ci sono molte informazioni su questi elementi su Internet, quindi li descriverò brevemente.

1. Fotoresistore: al buio, è un resistore ad alta resistenza e, quando illuminato dalla luce, la sua resistenza diminuisce in proporzione all'intensità della luce, mostrando una relazione lineare. In genere percepiscono solo la luce visibile.

2. Fotodiodo: un dispositivo a semiconduttore, proprio come un normale diodo, ha un anodo e un catodo.
Se si utilizza la connessione diretta, il fotodiodo illuminato genererà tensione ai terminali.
Alla riaccensione la resistenza del fotodiodo irradiato diminuisce allo stesso modo di quella di una fotoresistenza.
In base alla portata della luce i fotodiodi si dividono in diodi IR e diodi a luce visibile. I diodi IR percepiscono solo la radiazione infrarossa, ma rispondono bene anche alle lampade a incandescenza e al sole.

3. Fototransistor: diverso da transistor ordinario in quanto la luce viene fornita all'area di base, che controlla l'amplificazione della corrente emettitore-collettore.

Senza molto successo, un LED può essere utilizzato come elemento fotosensibile. Ha una sensibilità troppo bassa e può essere migliorata solo con l'aiuto di un circuito aggiuntivo.

Robot BEAM che ho realizzato

Nel mio robot ho utilizzato vari fotodiodi di origine sconosciuta. Il video mostra che la sensibilità di uno di loro è maggiore.
Uno dei fotodiodi reagisce al raggio del telecomando del televisore.
Inoltre, l'intero "riempimento" è riempito con colla termofusibile.
Spero che tu faccia meglio e più bello!

Elenco dei radioelementi

Designazione Tipo Denominazione Quantità NotaNegozioIl mio blocco note
VT1, VT3 Transistor bipolare

KT3102

2 KT315 Al blocco note
VT2, VT4 Transistor bipolare

KT361B

2 KT816