Livro – Introdução à Programação Científica com Python

O livro Introdução à Programação Científica com Python, de autoria minha e de Henrique da Fonseca Simões, foi lançado pela editora Ciência Moderna no final de outubro de 2021.

Resenha: 

O livro apresenta algumas das principais tecnologias que dão suporte à programação científica, utilizando-se a linguagem de programação Python. Começando com os conceitos básicos de programação, já com implementações em Python, é propiciado um momento inicial de familiarização com lógica de programação e com a sintaxe da linguagem utilizada em todo o livro. Na sequência, é feita uma investigação fortemente baseada em exemplos visuais das diversas operações de programação matricial utilizando um dos pacotes fundamentais da programação científica com Python: o NumPy. Visando ter uma dimensão das aplicações de programação matricial, são desenvolvidos também exemplos práticos, como geração de gráficos, manipulação de imagens, operações estatísticas básicas e aprendizado de máquina; tudo isso com o auxílio de bibliotecas amplamente utilizadas. Por fim, são apresentadas algumas sugestões de ambientes para desenvolvimento e execução dos exemplos demonstrados nos capítulos.

Dados técnicos:

1ª Edição – 2021
166 Páginas
Formato: 16 x 23
ISBN versão impressa: 978-65-5842-117-7
ISBN versão digital: 978-65-5842-121-4

Meus Cursos Gratuitos de Programação Web

Olá pessoal,

Gostaria de divulgar meus cursos básicos gratuitos de Programação Web. São aulas básicas de HTML, CSS, JavaScript e PHP que buscar trazer um contato inicial com as tecnologias mais populares do desenvolvimento web.

Link da Playlist do Curso de HTML

Link da Playlist do Curso de CSS

Link da Playlist do Curso de JavaScript

Link da Playlist do Curso de PHP

Aula 01 de HTML:

Aula 01 de CSS:
;

Aula 01 de JavaScript:

Aula 01 de PHP:

Linhas do Tempo Interativas com o Projeto TimeOnLine

O TimeOnLine é um projeto com o objetivo oferecer ao usuário uma forma de criar linhas do tempo que sejam mais dinâmicas, interativas. O sistema foi desenvolvido pelos alunos Gabriel Francisco, Lucas Maldonado, Natacha Calixto e Tiago de Morais como um projeto prático para a conclusão de curso de Técnico em Informática Integrado no IFSULDEMINAS Campus Pouso Alegre.

Para cumprir com seus objetivos, o sistema oferece uma interface simplificada, com o intuito de ser facilmente entendida. Além disso, as linhas do tempo criadas no TimeOnLine podem conter imagens, vídeos, mapas, playlists/músicas do Spotify e do SoundCloud, citações da Wikipédia e, até mesmo, postagens do Twitter. O projeto também disponibiliza algumas linhas do tempo já prontas. Para usufruir de todas essas vantagens é requerido apenas um simples cadastro no site do projeto: http://timeonline.site

O artigo que apresenta a solução pode ser acessado no link: https://periodicos.ifrs.edu.br/index.php/tear/article/view/3522

Abaixo podemos ver uma amostra de tela desta aplicação:

 

Exemplo de Tela do TimeOnLine

Exemplo de Tela do TimeOnLine

 

Robô Controlado por Wifi com NodeMCU ESP12E

Mais um pequeno projeto que desenvolvi neste ano, desta vez usando a placa NodeMCU ESP12E.
Trata-se de Robô Controlado por Wifi, montado com base em um chassi tanque suíço. Apesar de tratar de um microcontrolador diferente, toda programação foi feita usando o ambiente do Arduino.

Abaixo fotos do projeto:

Abaixo um vídeo do robô em funcionamento:

 

Criando um robô seguidor de linha com Arduino passo a passo

Este post trata-se de um tutorial que mostra os passos para montagem de um robô seguidor de linha usando a tecnologia Arduino. Apesar de usar vários componentes prontos, em algumas das etapas eu faço algumas improvisações, o que dá um certo toque “hand made” no robô.

Para criação do robô são necessários os seguintes materiais:

  • 1 placa Arduino UNO
  • 1 driver para motor L298N
  • 1 placa de acrílico retangular de 20 cm x 10 cm
  • 2 motores DC com caixa de redução e suas respectivas rodas
  • 1 roda boba ou 1 roda omnidirecional
  • 1 conector de bateria 9V
  • 1 bateria 9V alcalina ou recarregável com boa corrente (mín 320 mAh)
  • jumpers de conexão
  • 2 sensores de linha TCRT5000 ou similar
  • 1 mini protoboard
  • palitos de sorvete ou hashi
  • 2 parafusos M3 x 4 cm com 3 porcas para cada parafuso
  • 2 parafusos M3 x 5 cm com 2 porcas para cada parafuso
  • 6 (ou mais) parafusos M3 (ou M2) x 1,5 cm com porca
  • 1 ferro de solda

Esquema eletrônico:

Para a montagem do robô utilizaremos o esquema eletrônico abaixo. Consulte-o sempre que surgir alguma dúvida quanto às ligações eletrônicas.

Esquema eletrônico do robô seguidor de linha.

Passo 1:

O primeiro passo é soldar (ou emendar) dois fios (ou jumpers) nos terminais dos motores DC (motor acoplado em caixa de redução) e fixar o motor na placa de acrílico. A fixação dos motores na placa pode ser feita através de cola (tipo super bonder).

Motores fixados na placa de acrílico.

Ao fixar os motores, foi respeitada uma distância de aproximadamente 5 cm da caixa de redução (em amarelo) até um das extremidades da placa de acrílico. Também procurou-se deixar os terminais dos motores voltados para a parte interna.

Passo 2:

Uma vez fixos os motores, agora é só acoplar as rodas. Esses motores e rodas costumam ser vendidos em conjunto. Veja as imagens abaixo que mostram a finalização do passo 2:

Rodas acopladas nos motores

Rodas acopladas nos motores

Passo 3: 

O passo 3 consiste da fixação de uma roda boba ou roda omnidirecional no que será a parte traseira do robô. Abaixo você pode ver como é a aparência dessas rodas embora existam variações:

Roda boba à esquerda e roda omnidirecional à direita.

A fixação da roda deve ser feita de maneira que a placa de acrílico fique à mesma altura do chão em ambas extremidades do robô. Para você atingir esse objetivo, você pode utilizar parafusos, espaçadores ou fazer uma pequena estrutura de palitos como calço para a roda. Se sua opção for por usar parafusos ou espaçadores, uma maneira precisa de fazer furos no acrílico é utilizar a ponta de um ferro de solda, conforme mostra a imagem abaixo:

Furando o acrílico com o ferro de solda.

Nesta montagem, usei parafusos M3 para fazer a fixação de uma roda omnidirecional. Veja nas imagens abaixo a conclusão desta etapa e também um exemplo de uso de palitos como calço para fixação de uma roda boba (uma alternativa):

Passo 4:

No passo 4 faremos a montagem de um suporte para bateria 9V usandos alguns palitos (sorvete e hashi). Não costumo ter um padrão para este suporte. Neste caso irei aproveitar as sobras do parafuso da roda como parte da estrutura para o suporte. O importante é que a bateria tenha um local no qual ela fique presa. Se você quiser optar por algo mais fácil, poderá simplesmente colar a bateria com fita adesiva.

Passo 5:

Neste passo farei a fixação da placa Arduino e da placa do driver L298N no acrílico. Para isto, realizarei pequenas furações no acrílico usando o ferro de solda e usarei parafusos M3 (ou M2) por 1,5 cm para fixar ambas placas. Farei a fixação de forma que a placa do driver L298N fique sob o acrílico (embaixo) e a placa Arduino fique fixada acima do acrílico. Desta forma aproveitando melhor o espaço.

Primeiramente eu posiciono as placas de modo a calcular seu posicionamento, conforme ilustra as imagens abaixo:

A placa do driver ficará logo abaixo da placa Arduino. Eu sugiro que ela esteja centraliza, próximo aos motores, confira as posições sugeridas nas imagens anteriores.

Uma vez calculadas as posições, eu faço algumas furações no acrílico usando a ponta de um ferro de solda para possibilitar a fixação das placas através de parafusos, conforme ilustra a imagem abaixo:

Furando o acrílico para fixar placas

Então, eu fixo primeiramente a placa do driver L298N, conforme ilustra a figura abaixo:

Fixando o driver L298N

Na sequência, eu uso um pequeno isolante para evitar o contato da cabeça de um dos parafusos que prendem o driver com a placa Arduino que será fixada acima. Este tipo de cuidado é importante para evitar curto-circuitos na placa. Veja a próxima figura:

Isolando parafuso.

A seguir, faço a fixação das placas Arduino e driver L298N, conforme mostra a sequência de imagens a seguir:

Passo 6:

Neste passo conectaremos os terminais dos motores ao driver L298N através dos fios já soltados ou presos nos motores (passo 1) . Na imagem abaixo podemos identificar os terminais motor A e motor B da placa do driver:

Driver L298N

 

Considerando os terminais do motor A, conectaremos em sua primeira entrada o terminal do motor mais próximo do acrílico e na segunda entrada conectaremos o terminal do motor que fica mais distante do acrílico.

Considerando os terminais do motor B, conectaremos em sua primeira entrada o terminal do motor que fica mais distante do acrílico e na segunda entrada conectaremos o terminal do motor mais próximo do acrílico.

As imagens abaixo ilustram a conclusão desta etapa:

Passo 7

Nesta etapa fiz a fixação de um interruptor na lateral do acrílico usando cola. Fixei de modo que o interruptor ficou sob o acrílico. Veja nas imagens abaixo:

Passo 8

Neste passo eu fiz a fixação de uma mini-protoboard posicionada na parte superior do acrílico, centralizada entre os motos. Veja a imagem:

Fixação da protoboard

Passo 9

Nesta etapa conectaremos um conector de bateria de 9V ao interruptor e à alimentação da placa driver L298N. O conector de bateria 9V tem dois fios: vermelho para positivo e preto para negativo. O fio preto (negativo) será conectado diretamente ao GND do driver (veja esquema no passo 6). Já o fio vermelhor (positivo) será conectado ao interruptor, e o segundo terminal do interruptor será conectado ao pino 6-35V do driver (veja esquema no passo 6). Qualquer dúvida sobre as conexões, consulte o esquema apresentado no início deste tutorial. Abaixo, veja uma ilustração desta conexão:

Conexões para alimentação do driver

Passo 10

Dos mesmos pinos do driver (pino 6-35V e pino GND) devemos usar jumpers para ligar alimentação da placa Arduino Uno, que se encontra no lado oposto do acrílico. Desta forma, primeiramente farei um furo no acrílico (entre a protoboard e a placa Arduino) e depois usarei dois jumpers para conectar o GND do driver ao GND do Arduino e o pino 6-35V do driver ao Vin do Arduino. Veja nas imagens abaixo, o resultado dessas conexões:

Passo 11

Agora finalizaremos a parte dos motores, conectando 4 pinos do Arduino aos pinos de entrada do driver L298N. Conectaremos o pino 7 do Arduino na entrada IN1, o pino 6 na IN2, pino 5 na IN3 e pino 4 na IN4. A imagem a abaixo mostra o esquema de ligações a serem realizadas:

Conectando os pinos de controle dos motores

Os terminais do driver IN1 e IN2 controlam o motor A, os terminais IN3 e IN4 controlam o motor B. Para essa ligação é indicado o uso de jumpers macho-fêmea. Veja abaixo a finalização desta etapa:

Passo 12

Estamos quase lá. Agora faremos a fixação dos sensores. Para fixação dos sensores, é necessário fazer duas perfurações na parte da frente do acrílico, sugiro uma distância de aproximadamente 3,5 cm entre os dois furos. Abaixo mostro as furações que fiz utilizando ferro de solda:

Criando dois furos para fixação dos sensores de linha.

Depois disso, utilizo 2 parafusos M3 com 4 cm de comprimento para fixar os sensores de linha. Uso fita isolante para prender os sensores no parafuso M3. Veja na imagem:

Usando fita isolante para posicionar os sensores no parafuso.

A seguir, utilizo 2 porcas em cada parafuso para prender os parafusos no acrílico. O resultado pode ser visto nas imagens abaixo:

Após isso eu ainda faço uma nova furação no acrílico, entre a placa Arduino e a protoboard para passar as conexões dos sensores. Esta nova furação é mais ampla devido a quantidade de jumpers, veja na imagem:

Espaço furado para passar jumpers

Passo 13

Nesta etapa finalizamos nossa montagem. Para isso precisamos conectar os pinos GND dos sensores ao GND do Arduino, os pinos VCC dos sensores ao pino 5V do Arduino e os pinos de sinal dos sensores nas entras A0 e A1 do Arduino. Para isso será necessário também usar a protoboard. As ligações eletrônicas realizadas nesta etapa são ilustradas pela imagem abaixo:

Conectando os sensores

Primeiramente eu conecto o pino 5V e o pino GND do Arduino em duas colunas distintas da protoboard. Conforme imagem abaixo:

5V e GND do Arduino conectados na protoborad

Então conectamos o pino de sinal do sensor da esquerda ao pino A0 do Arduino e o pino de sinal do sensor da direita ao pino A1 do Arduino. Também conectamos os terminais GND dos sensores na coluna da protoboard a qual conectamos o GND do Arduino. Depois conectamos os terminais VCC dos sensores na coluna da protoboard a qual conectamos o terminal 5V do Arduino. Veja o resultado dessa etapa nas imagens abaixo:

Passo 14

Conecte o cabo USB à placa Arduino e ao computador, então use o editor do Arduino para transmitir o código abaixo:


#define RightMotorForward 7
#define RightMotorBackward 6
#define LeftMotorForward 5
#define LeftMotorBackward 4
#define sensorL A0
#define sensorR A1
#define FW 55
#define TR 70
#define PAUSE 100

void setup(){
pinMode(RightMotorForward, OUTPUT);
pinMode(LeftMotorForward, OUTPUT);
pinMode(LeftMotorBackward, OUTPUT);
pinMode(RightMotorBackward, OUTPUT);
pinMode(sensorL,INPUT);
pinMode(sensorR,INPUT);
Serial.begin(9600);
}

void loop(){
int left = analogRead(sensorL);
int right = analogRead(sensorR);
Serial.print("Leitura de luminosidade sensor L: ");
Serial.println(left);
Serial.print("Leitura de luminosidade sensor R: ");
Serial.println(right);
if (left > 100 && right > 100){
moveForward();
}
else if (left < 100){
turnLeft();
}
else if (right < 100){
turnRight();
}
delay(PAUSE);
}

void moveForward(){
motorLForward();
motorRForward();
delay(FW);
moveStop();
}

void turnRight(){
Serial.println("Vira à direita");
motorLForward();
delay(TR);
moveStop();
}

void turnLeft(){
Serial.println("Vira à esquerda");
motorRForward();
delay(TR);
moveStop();
}

void moveStop(){
digitalWrite(RightMotorForward, LOW);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
digitalWrite(LeftMotorBackward, LOW);
}

void motorRForward(){
digitalWrite(RightMotorForward, HIGH);
digitalWrite(RightMotorBackward, LOW);
}

void motorRBackward(){
digitalWrite(RightMotorForward, LOW);
digitalWrite(RightMotorBackward, HIGH);
}

void motorLForward(){
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
}

void motorLBackward(){
digitalWrite(LeftMotorForward, LOW);
digitalWrite(LeftMotorBackward, HIGH);
}

Passo 15

Agora é só testar e aproveitar o seu robô seguidor de linha:

Resultado final

Veja abaixo um pequeno vídeo dele em funcionamento. Para outros vídeos, confira outras postagens deste site. Espero que este tutorial seja útil.

Meu Mestrado

Concluí recentemente meu mestrado em Engenharia Elétrica na área de concentração em Engenharia de Computação pela FEEC – UNICAMP. Minha defesa foi no dia 02 de agosto, a homologação no dia 21 de setembro e emissão do diploma no dia 03 de outubro.

Minha dissertação teve o título “Ferramenta de Visualização Interativa da Max-tree para Processamento e Análise de Imagens” e pode ser baixada do site da UNICAMP: Link. Uma demonstração online da ferramenta pode ser acessada em: Link.

Gostaria de agradecer aos professores Roberto Lotufo e Leticia Rittner, e ao colega Roberto Souza por todo apoio e orientações. Abaixo foto com a banca:

Foto da Defesa do Mestrado

Foto da Defesa do Mestrado

Abaixo podemos ver um vídeo que demonstra a ferramenta desenvolvida:

Copyright © 2018 Luis Tavares. Todos os direitos reservados