Postagens

Mostrando postagens de abril, 2015

Controlando LED RGB com Raspberry Pi

Imagem
Não abandonei o meu querido amigo RPi. Aliás, de tanto gostar, até arrumei uns amigos pra ele. Mesmo tendo apenas um pino PWM (à partir da versão 0.5.2 do RPi.GPIO isso passa a ser um mito) dá pra controlar as cores de um LED RGB usando o RPi com facilidade. O processo é basicamente o mesmo de qualquer lógica para acender LEDs comuns: cátodo no negativo, ânodo no positivo e corrente passando por eles. Como não temos pinos PWM disponíveis para controlar cada cor, então podemos optar pelas cores primárias e secundárias, gerando assim 7 cores, dispensando o uso do PWM. Para implementar isso teremos que considerar como as cores serão obtidas: cada pino pode assumir o estado ligado e desligado. Dessa maneira, com 3 pinos representando as três cores primárias, dá pra conseguir o seguinte: R G B Cor 1 0 0 Vermelho 1 1 0 Amarelo 1 1 1 Branco 0 1 1 Ciano 0 0 1 Azul 1 0 1 Magenta 0 1 0 Verde Agora é só criar uma coleção (array) com esses valores: cores = [[1,0,0],[1,1,0],[1...

Controlando LED RGB com arduíno

Imagem
Antes de começar, verifique se os LEDs que você possui são de ânodo ou cátodo comum, pois o esquema muda de acordo com o tipo escolhido. O esquema considera os com ânodo comum, ou seja, vou ligar o positivo na perna maior. Para entender o projeto, não deixe de ler a matéria sobre ânodo, cátodo e PWM. O circuito Liguei o pino de 3.3v (pois com 5v fica muito claro) a um resistor de 300ohms e, daí, no ânodo do LED. Os pinos 9, 10 e 11 controlarão as cores vermelho, verde e azul, respectivamente. O circuito... Conectado aos devidos pinos... O código Note que será necessário ter a biblioteca Pin.h para que o projeto funcione. Confira a última versão . #include <Pin.h> Pin red(9); Pin green(10); Pin blue(11); int cores[][3] = {   {255, 0, 0}, //Vermelho   {0, 255, 0}, //Verde   {0, 0, 255}, //Azul   {255, 255, 0}, //Amarelo   {255, 0, 255} //Rosa }; //Aplica as variações de intensidade de cor void toColor(int r, int g, int b, i...

Cátodo, Ânodo, PWM e LEDs RGB

Imagem
Então. Até algumas horas atrás eu achava que havia queimado uns LEDs aqui, mas não foi isso que aconteceu. Tenho aqui comigo uns LEDs RGB que possuem o ânodo comum, não o cátodo, e na internet o pessoal geralmente tem LEDs com o cátodo comum. Essa era a confusão... E esse tal de cátodo é primo de quem? Cátodo é um eletrodo negativo, enquanto ânodo é um eletrodo positivo. Isso quer dizer que, pelo cátodo só sai e, pelo ânodo, só entra (quem saca de eletrônica sabe que na prática a teoria é outra, mas enfim). Aí eu tava ligando o negócio invertido achando que meus LEDs eram de cátodo comum. Ok. Por conta disso o lance da manipulação de LED RGB atrasou deveras, mas agora chegou a hora. E vamos começar pelo... PWM PWM significa modulação por largura de pulso, ou Pulse Width Modulation. É assim: um pulso é quando ligamos e desligamos alguma coisa. Ligar e desligar várias vezes gera vários pulsos e o intervalo de duração do pulso é a sua largura. A imagem a seguir explica isso: ...

Biblioteca Pin (Arduíno)

Pin.h //Manipulacao dos pinos do arduino #include "Arduino.h" class Pin { public: Pin(int pin); void mode(int mode); void on(); void off(); void blink(int duration); void setGraduation(int val); int getGraduation(); int read(); private: int _pin; int _mode; int _graduation; }; Pin.cpp: #include "Arduino.h" #include "Pin.h" Pin::Pin(int pin) { _pin = pin; } void Pin::mode(int mode) { pinMode(_pin, mode); } void Pin::on() { digitalWrite(_pin, HIGH); } void Pin::off() { digitalWrite(_pin, LOW); } void Pin::blink(int duration) { Pin::on(); delay(duration / 2); Pin::off(); delay(duration / 2); } int Pin::read() { return digitalRead(_pin); } int Pin::getGraduation() { return _graduation; } void Pin::setGraduation(int val) { int inverter = -255; val = (inverter + val) * -1; if(val >= 0 and val <= 255) { _graduation = val; } else if(val < 0) { _graduat...

Arduíno orientado a objetos

Salve meu povo! Seu muito fã da orientação a objetos e, por isso, não via a hora de começar a programar o Arduíno dessa maneira. Minha experiência com OOP é (era) única e exclusivamente com o PHP, então estranhei um pouco a maneira como o C++ trabalha, mas já peguei a manha. C com Orientação a Objetos No arduíno, todas as classes que podem ser usadas no projeto ficam dentro de pastas específicas guardadas dentro da pasta "libraries". No RPi a pasta fica em /home/[usuário]/sketchbook. No Windows, C:\Users\[usuário]\Documents\Arduino (ficava até antes de eu trocar). Pois bem, cada classe tem sua pasta que contém os seguintes arquivos: - [Classe].h : é o cabeçalho da classe, contém a estrutura de métodos e propriedades dela. - [Classe].cpp : é o código da classe, onde se operacionalizam os métodos. - keywords.txt : contém a lista de métodos (para questão de formatação). Além disso, dentro da pasta da classe pode haver uma pasta chamada "examples", que contém ...

Acendendo LED sem acender o LED

Imagem
Mas hein? Que título é esse? O título é meio louco, mas a ideia é interagir com o arduino sem qualquer conectividade física entre o Arduino e o interruptor que irá ativar o LED. Bora ver como faz? Usando sensor de luz O sensor de luz é bacana: quando tem muita luz a energia passa na boa, mas quando tem pouca luz a energia tem dificuldades de passar. Um sensor de luz é um resistor sensível a luz, só isso, e vai me ajudar a bolar um circuito pra acender o tal LED usando qualquer coisa que emita luz: a tela do celular, a lâmpada da oficina, o abajur da bancada, enfim. E, pensando mais pro lado troll da coisa, até pregar umas peças no futuro... O conceito e o circuito Vou usar uma das portas analógicas pra ler a tensão do circuito e, se o valor lido for maior ou igual a um determinado valor, o LED acende; do contrário, apaga. Para o sensor, vou usar um resistor de 10K para limitar a tensão a valores bem baixos. Para o LED, um de 300 ohms resolve. O código é o seguinte: ...

Temperatura ambiente

Imagem
Verão pra mim é a pior estação do ano, mas enfim, tem quem goste. Há tempos eu comprei um conjunto de componentes eletrônicos e veio nele um sensor térmico. Da hora a vida... O LM35 É um transistor com 3 pernas. A do meio envia um sinal analógico informando a temperatura. O LM35 em sua intimidade Olhando pra ele com a parte achatada voltada pra cima, a primeira perna recebe a voltagem (entre 2,7v e 5,5v); a do meio, como dito, envia o sinal analógico que vamos decodificar na temperatura e a última perna é o terra. O circuito É bem simplão. A perna 1 recebe a voltagem (pino de 5v) e a perna 3 vai pro terra. A perna do meio vai para o pino analógico que você quiser. E só. O código O pino analógico pode receber valores que variam entre 0 e 1023, e será um desses números que o LM35 vai enviar pelo pino A0 (eu escolhi o A0). Primeiro vamos ao código sem qualquer tratamento da informação: int pin = A0; int refresh = 500; //Checa o valor no pino float temp() {   r...

Checando a carga de uma fonte de energia

CUIDADO : os pinos do arduino aceitam, no máximo, 5v. O projeto abaixo não possui proteção para tensões acima do suportado pelo Arduino. Os pinos analógicos do arduino são ótimos. Ele consegue identificar qualquer tensão de 0v até 5v sem qualquer esforço extra. Isso abre a possibilidade de criar leitores de tensão, que servem para identificar como anda aquela pilha do controle remoto, etc. O projeto Basicamente é só colocar um fio no terra do arduino e ligar no terra da pilha. A outra ponta vai no positivo da pilha e num pino analógico do arduino. Simples assim. O sketch Aprendi que o nome de um software desenvolvido pra arduino se chama sketch. Pois bem, o sketch não poderia ser mais tranquilo: int pin = A0; int refresh = 1000; float toVolt = 0.004887585532746823069403714565; //Fórmula: 5 / ((2^10) - 1) float carga() {   return (analogRead(pin) * toVolt); } void setup() {   Serial.begin(9600); } void loop() {   Serial.print("Voltagem:\t");   Serial.print...

Tá na hora de piscar LEDs de maneira melhorada

Imagem
Ficar piscando LEDs não é a coisa mais maneira que dá pra fazer com o Arduino ou com o Raspberry Pi. Acontece que só tenho LEDs por enquanto (e queimei meus três LEDs RGB pra melhorar ainda mais a situação), então é o que dá pra fazer. Na verdade tem aqui uns leitores de térmicos, buzzer, push buttons... mas não tenho resistores suficientes para travar a tensão aonde quero, então, para não queimar mais componentes, vamos de LED mesmo. É imprescindível entender que o objetivo principal de programar um microcontrolador é PROGRAMAR um microcontrolador. Sim, redundante. Não é só de conexões que vivem um projeto. Por isso, e começando a aprender um pouco mais da linguagem usada para programar o Arduino, decidi fazer um projeto novo. Problema: fazer 3 LEDs, de cores diferentes, piscarem aleatoriamente. Vou precisar de: - Arduino; - Cabo USB para transferência do sofware; - 3 LEDs de 3 cores diferentes; - 3 resistores; - Fios; Um programa típico Aparentemente programamos em C...

Preciso saber qual resistor usar naquele circuito maneiro...

Imagem
Esse Arduino é da hora, mas usa uma voltagem diferente do RPi. Enquanto tenho um sinal de 3,3v por padrão nos pinos do RPi, o Arduino (UNO, afinal, já somos íntimos) usa 5v. Não vai dar pra sair queimando as coisas, então tenho que reduzir isso aí... Mas como? Sobre resistores Se eu aplicar uma resistência num circuito, vou basicamente limitar a quantidade de tensão nele. E os resistores foram desenvolvidos exatamente para isso. Ok, eles são pequenos e coloridos, indicando seus valores de referência e a força que exercerá no circuito para limitar a tensão. Mas como eu identifico o que quer dizer cada cor? Tem essa tabela aqui: Cor Valor Multiplicador Preto 0 x10 0 Marrom 1 x10 1 Vermelho 2 x10 2 Laranja 3 x10 3 Amarelo 4 x10 4 Verde 5 x10 5 Azul 6 x10 6 Roxo 7 x10 7 Cinza 8 x10 8 Branco 9 x10 9 Fonte: http://en.wikipedia.org/wiki/Electronic_color_code Note que não vou falar sobre a tolerância por hora. Essas são as cores que identificam o valor da resistência...

Blog tomando outro rumo

Até aqui o nome do blog foi Raspberry Experience. Como o nome indica, a ideia era postar minhas experiências com o RPi, mas isso mudou. Hoje recebi o Arduino Uno R3 e, indo ainda mais além, pretendo tratar de outros assuntos também correlatos a eletrônica. Nada mais justo que mudar o nome do blog. Seja bem vindo ao Electronic Experiments, ou electronicxp, onde tratarei não apenas do RPi, mas do Arduino e de conceitos de eletrônica. Para inaugurar essa nova abordagem, o próximo post tratará de eletrônica básica: como calcular uma resistência e determinar qual o melhor resistor para determinadas aplicações. Até lá!

LEDs on/off com PHP, Python e RPi

Imagem
Opa. Nova experiência fresquinha. Da última vez que trabalhei com LEDs, usei apenas um e o fiz piscar algumas vezes. Ok, é o início, mas não dá pra parar por aí. Problema : usar "alguma coisa não física" para controlar o estado (ligado / desligado) de vários LEDs. Pra resolver isso vamos precisar de: - Raspberry Pi B; - 3 LEDs coloridos; - 3 resistores (270 ohms aproximadamente); - Fios. Determinei que essa "alguma coisa não física" seria uma página HTML, já que o RPi é o meu servidor web. Um pouco de eletrônica Já que estamos nos acostumando com eles, não custa nada saber que: LED : Light Emiting Diodo, ou diodo emissor de luz. Diodo : Válvula eletrônica. No caso do LED, a corrente é transformada em luz visível, mas essa não é a única aplicação de um diodo. Resistor : é basicamente um limitador. Ele oferece uma resistência à passagem de elétrons (a corrente elétrica), o que reduz a tensão. Em algum momento no futuro me aprofundarei em cada um dess...

Configurando e usando o SSH

Imagem
Aí você nota que o RPi é ótimo pra fazer diversas coisas legais, mas depende de um monitor só pra ele... Não necessariamente. Habilitar o SSH no RPi e usá-lo remotamente é bem simples. Depois de habilitado fica difícil imaginar o motivo de não ter feito isso desde o início. Problema : acessar o RPi de outros terminais usando SSH. Você vai precisar de: - Raspberry PI (qualquer modelo) 1º Passo: acesse o utilitário de configuração do RPi: sudo raspi-config 2º Passo: navegue até o item 9 - Advanced Options e aperte "enter" 3º Passo: navegue até o item A4: SSH e aperte "enter" 4º Passo: escolha "enable" e aperte "enter" 5º Passo: dê "ok" e, na tela inicial, escolha "finish". O acesso via SSH está habilitado. Para navegar no RPi através de uma conexão SSH você vai precisar de um cliente SSH. No Windows, recomendo o Putty , no Android, JuiceSSH . Ambos gratuitos. Para conectar, abra o clie...

Servidor Raspberry Pi - Parte 1: Samba

Imagem
Uma das primeiras coisas pra se fazer com o RPi é um servidor, e, falando em servidor, sempre rola o tal do servidor web. Pra quem não desenvolve para web isso não faz muito sentido mas, no meu caso, isso faz TODO sentido do mundo. Só que como isso não faz sentido para uma quantidade considerável de pessoas, decidi fazer um tutorial, dividido em três partes, para fazermos o seguinte: 1) Criar um servidor de arquivos; 2) Criar um servidor de impressão; 3) Criar um servidor web; Essa é a primeira parte e explica com criar o servidor de arquivos. Parte 1 - Criando um servidor de arquivos Problema : criar um servidor onde os arquivos possam ser acessados pelos mais variados dispositivos que estiverem conectados na minha rede local. Você vai precisar de: - Raspberry Pi B; - HD externo; - Fonte de alimentação do RPi B com pelo menos 2 amperes. 1º Passo: certifique-se de que você possui as versões mais atualizadas instaladas. Faça assim: sudo apt-get update sudo apt-get upg...