O documento apresenta uma aula introdutória sobre Arduino ministrada por Wellington Cássio Faria. A aula introduz conceitos básicos como portas digitais, comunicação serial e LCD. Também apresenta exemplos de exercícios práticos com portas digitais e informações sobre funções como pinMode(), digitalWrite() e digitalRead().
O Arduino Hack Day foi realizado em Ilheus, Brasilia, Campo Grande e São Paulo. Uma iniciativa Globalcode e EletronLivre em conjunto com diversas pessoas e instituições locais. http://www.globalcode.com.br/noticias/ArduinoHackDay
Introdução a Sistemas Embarcados com Arduino - mini-cursoFelipe Martins
Mini-curso de Introdução a Sistemas Embarcados com Arduino.
Conteúdo:
- Sistemas embarcados;
- Arduino: características de hardware;
- Arduino: características de software;
- Microcontrolador;
- Eletrônica: conceitos básicos;
- Planejamento de programas;
- Sensores digitais (problemas e debounce);
- Sensores analógicos (Intensidade luminosa, deslocamento angular ou linear, Força/Torque, proximidade, aceleração/inclinação, temperatura);
- Comunicação serial (USART, SPI, I2C);
- Controle de cargas com PWM;
- LCD (displays de cristal líquido);
- Armazenamento de dados em cartão SD;
- Acionamento de motores e servomotores;
- Simulação de sistemas com Arduino;
- Práticas (montagem e programação);
- Avançando com o Arduino: shields, comunicação sem fio, Arduino com MATLAB, aplicações em robótica...
Oficina de introdução ao Arduino realizada no SENAC de Corumbá, pelo evento III Escola Regional de Informática do MS (ERI MS).
Uma oficina pratica sobre a utilização do Hardware Arduino.
O Arduino Hack Day foi realizado em Ilheus, Brasilia, Campo Grande e São Paulo. Uma iniciativa Globalcode e EletronLivre em conjunto com diversas pessoas e instituições locais. http://www.globalcode.com.br/noticias/ArduinoHackDay
Introdução a Sistemas Embarcados com Arduino - mini-cursoFelipe Martins
Mini-curso de Introdução a Sistemas Embarcados com Arduino.
Conteúdo:
- Sistemas embarcados;
- Arduino: características de hardware;
- Arduino: características de software;
- Microcontrolador;
- Eletrônica: conceitos básicos;
- Planejamento de programas;
- Sensores digitais (problemas e debounce);
- Sensores analógicos (Intensidade luminosa, deslocamento angular ou linear, Força/Torque, proximidade, aceleração/inclinação, temperatura);
- Comunicação serial (USART, SPI, I2C);
- Controle de cargas com PWM;
- LCD (displays de cristal líquido);
- Armazenamento de dados em cartão SD;
- Acionamento de motores e servomotores;
- Simulação de sistemas com Arduino;
- Práticas (montagem e programação);
- Avançando com o Arduino: shields, comunicação sem fio, Arduino com MATLAB, aplicações em robótica...
Oficina de introdução ao Arduino realizada no SENAC de Corumbá, pelo evento III Escola Regional de Informática do MS (ERI MS).
Uma oficina pratica sobre a utilização do Hardware Arduino.
Neste slide é apresentado o Arduino de forma simples, mas muito simples mesmo, para as pessoas que gostariam de conhecer essa poderosa ferramenta. O Arduino pode ser utilizado para qualquer pessoa de qualquer área do conhecimento. Ao fim da apresentação é mostrado o primeiro programa, o blink, que é feito de forma padrão para quem quer iniciar seus estudos.
Palestra: Robótica com Arduino
Apresentada no Workshop de Robótica Educacional realizado durante a RoboCup, em 23 de julho de 2014.
Apresentada pela primeira vez no VII Encontro Técnico Estudantil organizado pela ISA-ES, em 13 de agosto de 2011.
Autor: Felipe Nascimento Martins
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
Palestra dada na Semana da Computacao da Universidade Plinio Leite. detalhes em :
http://blog.arduinrio.cc/2010/10/03/palestra-hardware-livre-na-semana-de-computacao-da-universidade-plinio-leite-niteroi/
Introdução a plataforma arduino, com exemplos de codigos para serem feitos na hora da codificação.
Do basico ao avançado ,com exemplos que vai do blink ate exemplos com o ethernet shield.
Ensina de um simples loop, ate ligar um led usando a internet.
Slides da palestra que ministrei online no Lab de Garagem, no dia 19 de julho de 2011 às 20h.
http://www.CursoDeArduino.com.br/
http://blog.justen.eng.br/
http://twitter.com/turicas
Neste slide é apresentado o Arduino de forma simples, mas muito simples mesmo, para as pessoas que gostariam de conhecer essa poderosa ferramenta. O Arduino pode ser utilizado para qualquer pessoa de qualquer área do conhecimento. Ao fim da apresentação é mostrado o primeiro programa, o blink, que é feito de forma padrão para quem quer iniciar seus estudos.
Palestra: Robótica com Arduino
Apresentada no Workshop de Robótica Educacional realizado durante a RoboCup, em 23 de julho de 2014.
Apresentada pela primeira vez no VII Encontro Técnico Estudantil organizado pela ISA-ES, em 13 de agosto de 2011.
Autor: Felipe Nascimento Martins
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
Palestra dada na Semana da Computacao da Universidade Plinio Leite. detalhes em :
http://blog.arduinrio.cc/2010/10/03/palestra-hardware-livre-na-semana-de-computacao-da-universidade-plinio-leite-niteroi/
Introdução a plataforma arduino, com exemplos de codigos para serem feitos na hora da codificação.
Do basico ao avançado ,com exemplos que vai do blink ate exemplos com o ethernet shield.
Ensina de um simples loop, ate ligar um led usando a internet.
Slides da palestra que ministrei online no Lab de Garagem, no dia 19 de julho de 2011 às 20h.
http://www.CursoDeArduino.com.br/
http://blog.justen.eng.br/
http://twitter.com/turicas
Android e Arduino para automação residencialÁlvaro Justen
Palestra apresentada no 12º Fórum Internacional de Software Livre (FISL12) por:
- Álvaro Justen aka Turicas
- Andre Oliveira aka Deco e
- Diego Guimarães aka Dukão
http://www.EuAndroid.com.br/
http://www.CursoDeArduino.com.br/
Arduino Day 2014 - Construindo um Medidor de Consumo de Energia Conectado à N...Manoel Lemos
Apresentação que fiz no Arduino Day 2014 em São Paulo falando sobre Open Hardware e mostrando como construir um medidor de consumo de energia elétrica com Arduino.
Introdução ao Arduino: Fundamentos e Aplicações de MicrocontroladoresCarlos Eduardo Pantoja
Curso oferecido aos alunos:
i) do Projeto Horta do CEFET/RJ unidade MG para automatização de uma horta vertical e um berçario de plantas;
ii) do Projeto Turing do CEFET/RJ unidade NF nos dias 18/11/2016 e 19/11/2016.
Veja mais trabalhos em: fb.com/turingproject
Instagram: @prof.pantoja
TDC2014 - Internet das Coisas - Arduino & OpenDeviceRicardo Rufino
Palestra apresentada no TDC2014 em Porto Alegre falando sobre internet das coisas e uma nova API OpenSource para intergração com arduino , rapberry para se criar sistemas de automação residencial, monitoramento de sensores, etc.
Introdução para iniciantes sobre a plataforma Arduino.
Nessa introdução eu mostro alguns esquemas elétricos básicos para você ir montando na protoboard e ir acompanhando os exemplos que são mostrados.
Você pode acompanhar a leitura desse slide no youtube: https://www.youtube.com/watch?v=Xv-oT41FIRQ
Trabalho apresentado a disciplina de Arquitetura de Computadores, Ciência da Computação, 2° Semestre, Universidade Sagrado Coração
Autores
Igor Fastroni Corrêa
Anezio Junior
Kelvin Ferraz
Palestra ministrada na Campus Party Brasil 7 em 30/01/2014
Fala sobre dicas desenvolvimento nas plataformas Arduino, Raspberry Pi e outras, no intuito de transformar o projeto em um produto final.
2. Aula 1: Introdução ao Arduino e Portas
Digitais
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
3. Quem sou eu?
Wellington Cássio Faria
Formação:
Curso técnico – Médio (2o grau)
Técnico em Eletrônica Industrial, CEP - Centro de Educação Profissional
Tancredo Neves (julho/2010) - concluída.
Graduação
Engenharia da Computação, Inatel (junho/2015) - cursando.
Atividades:
Bolsista de Iniciação Científica
Conversão de sistemas de medição analógicos para digitais na
Agrometereologia utilizando plataforma Arduino.
Monitor Voluntário
Cas@viva - Arduino
Natural : Paraisópolis - MG
4. O que é ARDUINO?
É uma plataforma
de prototipagem eletrônica de hardware
livre, projetada com
um microcontrolador Atmel AVR de placa
única, com suporte de entrada /
saída embutido, uma linguagem de
programação padrão, a qual tem origem
em Wiring, e é essencialmente C/C++. O
objetivo do projeto é criar ferramentas que
são acessíveis, com baixo custo, flexíveis e
fáceis. Principalmente para aqueles que não
teriam alcance aos controladores mais
sofisticados e de ferramentas mais
complicadas.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
5. O que que quer dizer open-source?
As placas podem
ser construídas à mão ou
comprado pré-montado, o software
(IDE) pode ser
baixado gratuitamente. Os projetos de
hardware de referência (arquivos de
CAD) estão disponíveis sob uma licença
de código aberto, você é livre
para adaptá-los às suas
necessidades .
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
6. O que é ARDUINO?
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
7. Hardware do ARDUINO UNO
Portas Digitais
0 à 13
PWM: 3, 5, 6, 9, 10,
e 11 ( ~ )
Comunicação Serial:
1 e 0 (TX e RX)
Portas
Analógicas
0 à 5Alimentação
Externa
USB
Barramento de
Extensão
Microcontrolador
ATmega328
Botão para
Reiniciar
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
8. Programação do Arduino
Programação do Arduino pode ser dividido em três partes principais: estruturas,
valores (variáveis e constantes) e funções.
A
linguagem
tem origem
em Wiring,
e é
essencialm
ente C/C++
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
9. PIC assembly X PIC em C X Arduino
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
13. PIC assembly X PIC em C X Arduino
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
14. Shields do Arduino:
Shields são placas que
podem ser conectados em cima
do Arduino estendendo as suas
capacidades.
Os diferentes shields
seguem a mesma filosofia que
do Arduino: eles são baratos de
produzir e fáceis de montar e
programar.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
15. Arduino Ethernet Shield
O Shield permite que
Arduino conecte-se à
internet.
Existe uma entrada
de cartão micro-SD , que
pode ser usado para
armazenar arquivos para
disponibilizar na web.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
16. Arduino WiFi Shield
O Shield permite que que
Arduino conecte-se à internet
usando o WiFi.
O Shield WiFi pode se
conectar a redes sem fio que operam
de acordo com as especificações
802.11be 802.11g.
Há uma entrada de cartão
micro-SD , que pode ser usado para
armazenar dados que podem serem
transmitidos via WiFi.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
17. Arduino Wireless SD Shield
O Shield permite que uma que
Arduino para comunicar sem fios com um
módulo sem fios(RF).
Ele baseia-se nos módulos Xbee
produzidos pela Digi.
Há um slot para cartão SD.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
18. Shield Arduino GSM Shield
O shield conecta o
Arduino à internet usando a
rede GPRS sem fio.
Você também pode
fazer / receber chamadas de
voz (você vai precisar de um
alto-falante externo e circuito
de microfone) e enviar /
receber mensagens SMS.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
19. Arduino Motor Shield
O shield permite
que você controle dois
motores DC com sua placa
Arduino, controlando a
velocidade , a direção de
cada um de forma
independente.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
20. MP3 Player Shield
O MP3 Player Shield tem
a impressionante capacidade de decodificação de MP3
e a funcionalidade de
armazenamento do cartão SD. Agora você pode
puxar arquivos MP3 a partir de um cartão SD e
reproduzi-los usando apenas este shield,
efetivamente transformando todo o Arduino em
um completo MP3 Player! O Shield
de MP3ainda utiliza o decodificador de
áudio MP3 VS1053B IC para decodificar os arquivos de
áudio. O VS1053 também é capaz de
decodificar áudio Ogg Vorbis/MP3/AAC/WMA/MIDI e
codificação IMA ADPCM.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
21. LCD Shield
O LCD Shield Color,
fornece uma forma
fácil de conectar o
popular Nokia 6100
LCD no Arduino.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
22. Shield EasyVR
The Shield EasyVR é um
shield de reconhecimento de
voz para placas Arduino
integrando um módulo
EasyVR. Ele inclui todas as
funcionalidades do módulo
EasyVR que simplifica a
conexão à placa Arduino e PC.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
29. #MãoNaMassa!
O setup() é função para
configurações inicias. Use-se:
• Inicializar variáveis.
• Configuração de pino (entrada ou
saída)
É executada apenas uma vez, após cada
reinicialização da placa Arduino.
o loop() faz exatamente o
que seu nome sugere, e laços
infinito. O Código no loop() ativamente
“seu programa” a placa Arduino.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
30. Portas Digitais
0 à 13
PWM: 3, 5, 6, 9, 10,
e 11 ( ~ )
Comunicação Serial:
1 e 0 (TX e RX)
Funções para portas Digitais
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
31. pinMode( )
Sintaxe:
pinMode (pino, modo)
Parâmetros:
pino: o número do pin cujo modo
que você deseja definir
modo: INPUT (Entrada)
OUTPUT (Saída)
INPUT_PULLUP (Entrada com
PULL-UP)
Retorno:
Nenhum
Configura o pino especificado como uma
entrada ou saída.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
32. pinMode( )
Configuração de Portas
Digitais:
pinMode (pino, modo)
modo: INPUT (Entrada)
OUTPUT(Saída)
INPUT_PULLUP (Entrada
com PULLUP interno,
essa opção não é
necessário o circuito
PULLUP externo
podendo assim ser
ligado diretamente no
GND.
*Não se utiliza para
entradas analógicas.
Quando pressionado
“envia” 0 volts(GND)
(LOW) para porta.
Quando pressionado
“envia” 5 volts (HIGH)
para porta.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
33. digitalWrite()
Sintaxe:
digitalWrite (pino, valor)
Parâmetros:
pino: o número do pino
valor: HIGH (ALTO ) ou LOW (BAIXO)
Retorno:
Nenhum
Escreve uma valor ALTO ou valor
BAIXO para um pino digital
configurado como SAÍDA.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
34. digitalRead()
Sintaxe
digitalRead (pino)
Parâmetros
pino: o número do pino digital que
você quer ler configurado como
ENTRADA
Retorno:
HIGH ou LOW
Lê o valor de um pino digital
especificado, ALTO ou BAIXO
definido como ENTRADA.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
35. Exercício Portas Digitais
1- Faça um programa que faça o LED1 da placa (pino 13) piscar de 1 em 1 segundo.
Ligue um outro LED2 no pino 4 da porta digital e toda vez que o botão(PULL-UP Interno
pino 3) for precisado o LED2 deve ligar, caso contrario o LED2 deve ficar apagado.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
36. Exercício Portas Digitais
2- Faça um programa que se botão(D2) estiver pressionado pisque 3 LED (D4,D5,D6)
cada um de cada vez da direita para esquerda no intervalo de 1 segundo. Se o botão
não tiver pressionado pisque 3 LED (D4,D5,D6) cada um de cada vez da esquerda para
direita no intervalo de 1 segundo.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
37. Aula 2: Portas Analógicas, Comunicação
Serial e LCD
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
38. Funções para portas Analógicas
Portas
Analógicas
0 à 5
PWM: 3, 5, 6, 9, 10,
e 11 ( ~ )
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
39. analogReference( )
Configura a tensão de referência utilizada
para a entrada analógica (SETUP)
As opções são:
• DEFAULT: a referência analógica
padrão de 5 volts
• INTERNAL: referência igual a 1,1
volts(ATmega168 ou ATmega328)
• INTERNAL1V1: referência 1.1V
referência (apenas Arduino Mega)
• INTERNAL2V56: referência 2.56V
(apenas Arduino Mega)
• EXTERNAL: referência de tensão
aplicada ao pino AREF (0 a 5V )
Sintaxe:
analogReference(tipo)
Parâmetro:
tipo: DEFAULT, INTERNO,
INTERNAL1V1, INTERNAL2V56 ou
EXTERNAL.
Retorno:
Nenhum
TensãodeReferência
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
40. analogRead( )
Lê o valor do pino analógico especificado.
Mapeia tensões de
entrada entre 0 e tensão
de referência em valores
inteiros entre 0 e 1023
Sintaxe:
analogRead (pino)
Parâmetros:
pino: o número do pino de entrada
analógica.
Retorno:
Número inteiro de 0 a 1023
Convertendo Retorno em Tensão:
𝑇𝑒𝑛𝑠ã𝑜 = 𝑅𝑒𝑡𝑜𝑟𝑛𝑜 𝑥
𝑇𝑒𝑛𝑠ã𝑜 𝑑𝑒 𝑅𝑒𝑓ê𝑟𝑒𝑛𝑐𝑖𝑎
1024
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
41. analogWrite( )
Escreve um valor tensão no pino
especificado PWM.
Sintaxe:
analogWrite(pino, valor)
Parâmetros:
pino: Número do pino .
Valor : Entre 0 (0 Volts/ 0% Duty) a 255
(5 Volts/100% Duty).
Returno:
Nenhum
𝑇𝑒𝑛𝑠ã𝑜 𝑛𝑜 𝑃𝑖𝑛𝑜 =
5 𝑥 𝑣𝑎𝑙𝑜𝑟
255
Arduino Uno:
PWM: 3, 5, 6, 9, 10,
e 11 ( ~ )
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
42. Funções para Comunicação Serial
Comunicação Serial:
1 e 0 (TX e RX)
Usado para a comunicação entre a placa Arduino e um
computador ou outros dispositivos.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
43. Serial.begin( )
Define a taxa de dados em bits por
segundo (Banda) para a transmissão de
dados serial .
Sintaxe:
Serial.begin (velocidade)
Parâmetros:
Velocidade: em bits por segundo (banda)
Retorno:
Nenhum
Para se comunicar com o computador, use uma
dessas taxas: 300, 600, 1200, 2400, 4800, 9600,
14400, 19200, 28800, 38400, 57600 ou 115200.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
44. Serial.print( )
Imprime/Envia dados para a porta
serial/computador.
Sintaxe:
Serial.print (val)
Parâmetros:
val: o valor para imprimir - qualquer tipo
de dados
millis (): Retorna o número de milissegundos desde que o
Arduino começou a executar o programa atual.
delay(): Pausa o programa para a quantidade de tempo (em
milissegundos) especificado como parâmetro. (1000
milissegundos são um segundo.)
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
45. Serial.read( ) / Serial.available( )
Lê os dados de entrada Serial.
Sintaxe:
Serial.read ()
Parâmetros:
Nenhum
Retorna:
Um numero inteiro referente
a tabela ASCII.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
47. Exercício
1- Faça um programa que leia o sensor LM35 utilizando a porta analógica 0, e envia esse
dado para computador de 1 em 1 segundo em ºC.
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
O sensor LM35 é um sensor de precisão,
fabricado pela National Semiconductor ,que
apresenta uma saída de tensão linear relativa à
temperatura em que ele se encontrar no
momento em que for alimentado por uma
tensão de 4-20Vdc e GND, tendo em sua saída
um sinal de 10mV para cada Grau Celsius de
temperatura.
48. LiquidCrystal Biblioteca
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
Esta biblioteca permite que uma placa
Arduino possa controlar um LCD baseado no
Hitachi HD44780
49. LiquidCrystal Biblioteca
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
LiquidCrystal ()
Cria uma variável do tipo LiquidCrystal.
Sintaxe:
LiquidCrystal “NOME” (rs, enable,D4, D5,D6,D7)
begin ()
Especifica as dimensões (largura e altura)
do display.
Sintaxe:
lcd.begin (colunas, linhas)
Parâmetros:
lcd: uma variável do tipo LiquidCrystal
colunas: o número de colunas do LCD
linhas: o número de linhas do LCD
50. LiquidCrystal Biblioteca
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
print ()
Imprime texto ao LCD.
Sintaxe:
lcd.print (dados)
Parâmetro:
lcd: uma variável do tipo LiquidCrystal
dados: os dados para imprimir (char,
byte, int, long, ou string)
51. LiquidCrystal Biblioteca
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
setCursor ()
Posicione o cursor LCD, isto é, definir o
local em que o texto subseqüente é
escrito no LCD.
Sintaxe:
lcd.setCursor (coluna, linha)
Parâmetros:
lcd: uma variável do tipo LiquidCrystal
coluna: a coluna na qual se posiciona o
cursor (sendo 0 a primeira coluna)
linha: a linha em que a posição do cursor
(sendo 0 a primeira linha)
52. Exercício
Ministrado por: Wellington Cássio Faria
Contato: wellingtonf@gec.inatel.br
2- Faça um programa que imprima na Primeira linha o seu primeiro nome e na segunda
linha o primeiro nome do seu parceiro de bancada.
4- Entre em file/exemples/LiquidCrystal/Scroll e rode o programa.