sexta-feira, 11 de novembro de 2016

Idéia para laboratório aberto para visitantes

Pessoal,
   Hoje fui ao 8o. Encontro Internacional de Tecnologia e Informação para Pessoas com Deficiência. Havia um showcase que achei bem interessante - é o que eu imagino no nosso laboratório aberto para visitantes. Seguem fotos:


https://drive.google.com/open?id=0B2aucTjhMlIVSUpzclYyMVJHY2c

https://drive.google.com/open?id=0B2aucTjhMlIVY2JDQndhV0xYOHM






quinta-feira, 29 de setembro de 2016

Grupo HabitsID


O Grupo HabitsID, composto por Carlos Aguni, Bárbara Albuquerque, Louise Martins, Felipe Caravaggio e Eiji Kawahira, está desenvolvendo um projeto para o controle e coleta dos frequentadores e visitantes do prédio da Habits, localizada na incubadora da EACH – USP Leste.

O desenvolvimento do projeto pode ser acessado através desse link:

Fotos dos Projetos.














domingo, 18 de setembro de 2016

Preparação para encontro 6

Amanhã levarei para o lab:
(ATUALIZAÇÃO 19.092016-12:24BRST): Já está tudo no lab inclusive a ventoinha)

Projeto loja:
- 1 x arduino mega
- 2 x fototransistores TIL 78 com ponto vermelho
- 2 x LED infravermelho: TIL 32 com ponto preto
- canudos
- fita isolante

A idéia é direcionar a captação de luz do TIL78 usando os canudos cobertos com uma camada de fita isolante. Caso necessário direcionar a emissão do TIL32 da mesma forma.
O arduino mega foi pedido para poder usar o Johnny5. Esta parte deve ser bem documentada.

Projeto estufa:
- 3 x garrafas de água
- ventoinha

A idéia é usá-las como vasos.
Projeto hidroponia:
- caixa 50l
- jogo de serra de copo
- bomba de 14W,1000l/h
- 6m de mangueira e conexões.
- cola epoxi
- cola de pvc
- lm35
- pH-metro

As idéias são: usar a caixa como depósito da solução; Usar as serras de copo para completar a preparação dos canos; Bomba e mangueira para distribuir a solução (acho que o melhor uso da pressão da bomba é ter um único cano de subida e distribuir em cima); hackear o pH-metro para transmitir as leituras através do arduino; Fazer o sensor de temperatura à prova d'agua usando lm35, soldando fios nos seus terminais, isolando e encapando com fita isolante (para não colar os terminais) e passando uma camada de cola epóxi.

Projeto postura:
- Velcro

Introdução ao Wittyboard

Wittyboard é uma placa para desenvolvimento de hardware baseada no System on a Chip (SoC) ESP8266-12F.

Um SoC é praticamente um computador em um chip - já contendo processador, memória, periféricos,... No caso do ESP8266 o periférico que o diferencia é a interface wifi (IEEE 802.11). Além de wifi, ESP8266 tem portas seriais (RS232), portas de entrada e saída analógica e digital mas nem sempre elas são acessiveis externamente.

No Brasil o membro da família mais fácil de encontrar no varejo comum é o ESP8266-01 com firmware "oficial", por exemplo em http://www.filipeflop.com/pd-1f55ad-modulo-wifi-esp8266-esp-01.html?ct=41d98&p=2&s=1 O ESP-01 além do TX e RX da interface serial tem duas portas de IO (GPIO0 e GPIO2) acessiveis externamente e 512kbytes de memória FLASH. O firmware "oficial" pode ser encontrado em http://espressif.com/.

Até agora parece que é tirar do envelope e usar, mas...

1-) Todos os ESP são alimentados a 2.7-3.6V, e os pinos não são preparados para sobretensão então não dá para conectar diretamente a maioria dos arduinos e sensores, que funcionam a 5V.

2-) O regulador de tensão do arduino e do FTDI232 (até 150mA) não suporta a carga de um ESP (até 300mA). 2-) O firmware oficial é baseado em comandos AT (o que não é um problema, mas é estranho num mundo em que se fala em serviços e APIs). A linguagem é pobre para a variedade de usos do componente.
3-) Tem muitas funcionalidades ativadas pelas condições em que é ligado, mas é mal documentado. Há dois anos atrás era muito trabalhoso descobrir como usar direito (tanto o hardware quanto o software).

Era um componente difícil de usar, mas pelo interesse e esforço de empresas e comunidades foram destrinchando o funcionamento e criando facilitadores para usar o dispositivo:

1-) NodeMCU é uma placa IoT open source baseada em ESP com firmware adaptado (NodeMCU Lua);
2-) Arduino IDE versão 1.6.5 e superiores permite incluir placas novas e baixar os arquivos de suporte automaticamente;
3-) ESP8266.com é uma comunidade onde foi desenvolvido o firmware NodeMCU Arduino (http://www.esp8266.com/viewforum.php?f=25&sid=d777d5b91c608688faae30c23670e15b). Um firmware substituto que torna possível programar o NodeMCU usando Arduino IDE.


Wittyboard é um conjunto programador+ESP8266-12F em duas placas separadas - ao contrário de NodeMCU que tem programador e ESP em uma única placa.

(acrescentado em 24.09.2016) Segundo https://blog.the-jedi.co.uk/2016/01/02/wifi-witty-esp12f-board/ (ainda não chequei) o led RGB está conectado em :
vermelho = GPIO15, verde = GPIO12, azul = GPIO13.O botão está em GPIO4 com um PULLUP então pressionado a leitura é LOW (NOTA: no Arduino quando um pino é INPUT_PULLUP a leitura é invertida: solto a leitura é LOW apertado a leitura é HIGH.

Interessei-me por ele pois tinha achado no mercado livre Brasil e pareceu possível trocar o breakout com o ESP8266-12F por um ESP-07 (tenho alguns com firmware indeterminado) e um punhado de resistores.

O video mostra a placa funcionando depois que consegui programá-la.



Segui as instruções em https://yoursunny.com/t/2016/WittyCloud-first/ para instalar e configurar as ferramentas de programação e enviar o primeiro exemplo.

Achei muitos pontos interessantes:
0-) O ESP ligado a um FTDI (ou similar) ainda precisa de circuitos auxiliares para ser programado. O programador do Wittyboard tem esses circuitos.
1-) a construção da placa permite separar o programador do ESP e consequentemente facilita adaptações no circuito para poder programar outros ESP.
2-) a programação dispensa apertar botões - o programador faz um truque com DTR e RTS.
3-) NodeMCU Arduino regrava toda a memória flash do ESP a cada upload, então ESPs comprados com firmware indeterminado são "corrigidos" e passam a funcionar.

Wittyboard consists in an ESP8266-12F and circuitry to connect it to the USB port separated in two boards. It enable us to flash programs into ESP using arduino IDE. I found the instructions to install the programming tools at https://yoursunny.com/t/2016/WittyCloud-first/

advantages I noticed:
0-) ESP connected do FTDI (or similar) still require additional circuitry to be programmed. Wittyboard has the circuitry.
1-) board physical configuration enable us to separate programmer from ESP breakout board. It facilitates circuit adaptation to connect other ESP (I made it with ESP-07).
2-) No need to press buttons to flash ESP. Circuit uses DTR and RTS serial signals to "do the trick".
3-) NodeMCU Arduino reflashes ESP on each upload so ESPs with unknown firmware are "corrected" and start functioning.

Servidor web no ESP-07 usando wittyboard como programador.

C++ code colored by C++2HTML Veja o servidor em ação:

Sketch do arduino adaptado de https://www.arduino.cc/en/Tutorial/WiFiWebServer:

/*
   Tentativa de usar o wifi do witty board
   tentativa 6 baseado na tentativa 5
  objetivo: levantar um servidor web.
  levantou, funcionou, tirei foto (mas nao dah para incluir aqui)
  O copy da pagina no browser deu:
  analog input 0 is 266
analog input 1 is 0
analog input 2 is 1023
analog input 3 is 0
analog input 4 is 1023
analog input 5 is 1023

olha so que fantastico o que o dah para ver no lado do servidor:

SSID set: 0
Scanning available networks...
** Scan Networks **
number of available networks:5
0) Rxxxxx Lxxxx Axxxx  Signal: -91 dBm Encryption: Auto
1) Exxxx Lxxxx  Signal: -91 dBm Encryption: WEP
2) Exxxxxx  Signal: -90 dBm Encryption: Auto
3) andro  Signal: -86 dBm Encryption: Auto
4) 122  Signal: -92 dBm Encryption: WPA
192.168.0.101
new client
GET / HTTP/1.1
Host: 192.168.0.101
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*//*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

client disonnected
Connected


-- 18.09.2016
Consegui usar com o ESP-7.
A saida pela serial:
Connected
MAC: 71:2B:2:7F:CF:5C
Mode: STA
PHY mode: N
Channel: 11
AP id: 0
Status: 5
Auto connect: 1
SSID (5): andro
Passphrase (15): kkkkkk
BSSID set: 0
Scanning available networks...
** Scan Networks **
number of available networks:3
0) Exxx Lxxxx  Signal: -93 dBm Encryption: WEP
1) Edxxxx  Signal: -76 dBm Encryption: Auto
2) andro  Signal: -72 dBm Encryption: Auto
192.168.0.107
Connected

dump do browser:
analog input 0 is 218
analog input 1 is 0
analog input 2 is 1023
analog input 3 is 0
analog input 4 is 0
analog input 5 is 0

*/

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

#if 0
char ssid[] = "andro";     //  your network SSID (name)
char pass[] = "kkkkkkk";  // your network password
#else
char ssid[] = "G4_8450";     //  your network SSID (name)
char pass[] = "12345678";  // your network password
#endif

wl_status_t status = WL_DISCONNECTED;  /* enum definido em
  fabio@fabio-PORTEGE-M400:~/.arduino15/packages/esp8266/hardware/
  esp8266/2.3.0/libraries/ESP8266WiFi/src/include/wl_definitions.h
*/

WiFiServer server(80);
int no_server=1;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // Print WiFi MAC address:
  printMacAddress();
  WiFi.mode(WIFI_STA);
}

void loop() {
  // Print WiFi MAC address:
  printMacAddress();
  WiFi.printDiag(Serial);
  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
  if ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass); // este status nao informa se
    // existe handshake de conexao em progresso
  } else {
    IPAddress ip;
    ip = WiFi.localIP();
    Serial.println (ip);
    /*https://www.arduino.cc/en/Tutorial/WiFiWebServer */
    if (no_server) {
      server.begin();
      no_server=0;
    }
    WiFiClient client = server.available();
    if (client) {
      Serial.println("new client");
      // an http request ends with a blank line
      boolean currentLineIsBlank = true;
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          Serial.write(c);
          // if you've gotten to the end of the line (received a newline
          // character) and the line is blank, the http request has ended,
          // so you can send a reply
          if (c == '\n' && currentLineIsBlank) {
            // send a standard http response header
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");  // the connection will be closed after completion of the response
            client.println("Refresh: 5");  // refresh the page automatically every 5 sec
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            // output the value of each analog input pin
            for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
              int sensorReading = analogRead(analogChannel);
              client.print("analog input ");
              client.print(analogChannel);
              client.print(" is ");
              client.print(sensorReading);
              client.println("<br />");
            }
            client.println("</html>");
            break;
          }
          if (c == '\n') {
            // you're starting a new line
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            // you've gotten a character on the current line
            currentLineIsBlank = false;
          }
        }
      }
      // give the web browser time to receive the data
      delay(1);

      // close the connection:
      client.stop();
      Serial.println("client disonnected");
      /*****/
    }
  }
  printStatus (status);
  delay(10000);
  status = WiFi.status(); // consulta o status novamente para
  // verificar se o handshake terminou com sucesso.

}

void printMacAddress() {
  // the MAC address of your Wifi shield
  byte mac[6];

  // print your MAC address:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);
}

void listNetworks() {
  // scan for nearby networks:
  Serial.println("** Scan Networks **");
  int numSsid = WiFi.scanNetworks();
  if (numSsid == -1) {
    Serial.println("Couldn't get a wifi connection");
    while (true);
  }

  // print the list of networks seen:
  Serial.print("number of available networks:");
  Serial.println(numSsid);

  // print the network number and name for each network found:
  for (int thisNet = 0; thisNet < numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tSignal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tEncryption: ");
    printEncryptionType(WiFi.encryptionType(thisNet));
  }
}

void printEncryptionType(int thisType) {
  // read the encryption type and print out the name:
  switch (thisType) {
    case ENC_TYPE_WEP:
      Serial.println("WEP");
      break;
    case ENC_TYPE_TKIP:
      Serial.println("WPA");
      break;
    case ENC_TYPE_CCMP:
      Serial.println("WPA2");
      break;
    case ENC_TYPE_NONE:
      Serial.println("None");
      break;
    case ENC_TYPE_AUTO:
      Serial.println("Auto");
      break;
  }
}

void printStatus (wl_status_t st) {
  // string message of the status
  switch (st) {
    case WL_NO_SHIELD:
      Serial.println("No shield (should not happen on ESP/WITTYBOARD/NODEMCU)");
      break;
    case WL_IDLE_STATUS:
      Serial.println("Idle status");
      break;
    case WL_NO_SSID_AVAIL:
      Serial.println("No SSID Available");
      break;
    case WL_SCAN_COMPLETED:
      Serial.println("Scan Completed");
      break;
    case WL_CONNECTED:
      Serial.println("Connected");
      break;
    case WL_CONNECT_FAILED:
      Serial.println("CONNECTION FAILED");
      break;
    case WL_CONNECTION_LOST:
      Serial.println("CONNECTION LOST");
      break;
    case WL_DISCONNECTED:
      Serial.println("DISCONNECTED");
      break;
    default:
      Serial.print(st);
      Serial.println("unknown status");
      break;
  }
}

conexão entre Wittyboard e ESP8266-7



Este post descreve o circuito que montei para conectar o ESP-07 à placa de comunicação/programação do wittyboard.

O circuito é uma adaptação do nodemcu (https://github.com/nodemcu/nodemcu-devkit). Esquemático: https://raw.githubusercontent.com/nodemcu/nodemcu-devkit/master/Documents/NODEMCU_DEVKIT_SCH.png

Lista de conexões
ESP pinWittyboard pinadditional info
TXD016 (TXD)-
RXD015 (RXD)-
GPIO012 (GPIO0)PULLED UP
GPIO2NC PULLED UP
GPIO15NC PULLED DOWN
GND9 (GND) pilhas GND
VCCNC (!) pilhas 3.6V
GPIO164 (GPIO16) -
EN (or CH_PD)NC PULLED UP
RSTREST (1) PULLED UP

(!) Não uso o VCC do Wittyboard pois não uso para alimentar o ESP. Uso 3 pilhas recarregáveis para alimentar o ESP - são 3.6V.
Os resistores PULL UP e PULL DOWN são de 10k.
A numeração dos pinos do wittyboard é feita com a antena para baixo (ou o conector USB para cima), no sentido anti-horário. O pino 1 é o inferior direito (veja na foto abaixo). Os nomes são os impressos no breakout do ESP do wittyboard.
Coloquei um capacitor de 100uF entre 3.6V e GND.



terça-feira, 13 de setembro de 2016

Projeto estufa

Conversei com o grupo deste projeto hoje sobre que caixa usar. A idéia que tive é usar uma caixa transparente, que eu não sabia de que material é até uns minutos atrás, e que descobri ser de acetato, como estas: http://www.marcopoloembalagens.com.br/Embalagens.asp.

São mais baratas e podem ser cortadas com tesoura, mas não têm rigidez suficiente. Para dar rigidez, usar um quadro de madeira, como este: http://www.anariebrasil.com.br/quadros-de-madeira (tenho uns em casa) e para colocar plantas e terra uma bandeja como esta: http://www.obalanceiro.com.br/produto-204-Bandeja_biopratika_75_litros_43x29x7_Ref0737.

Unir tudo com fita, cola quente, braçadeiras, pregos. Ficaria algo parecido com esta luminária: https://bricolagem.files.wordpress.com/2013/10/12b.jpg

Atualização 18.09.2016: Foto do grupo montando a caixa:



segunda-feira, 29 de agosto de 2016

Fotos do encontro 3







Preparação para encontro 4

Caros,
    Postei informação sobre o arduino pro-micro, que (pode-se dizer que) tem duas seriais.
   Tem um post sobre medir condutividade de materiais (água, malha,...).
   Soube que o pessoal da limpeza foi cortado pela metade. Dei uma passada de pano nas mesas. Talvez haja um pouco de pó e precisaremos varrer ou passar pano úmido no lab.

Abs!

Medir condutividade usando uma entrada analógica

É possível usar o arduino para medir condutividade elétrica (ou medir resistência). Para isso conecte um resistor (por exemplo 4k7) do 5V para um pino analógico, por exemplo o A0, de onde leremos.

Digamos que vai medir condutividade da água, para isso conecte um jumper ao A0 e mergulhe a outra ponta na água. Faça o mesmo com GND.

Leia o valor em A0 usando analogRead(A0). Ele retorna um número entre 0 e MAX-1=1023 que corresponde à tensão de 0 a Vcc=5V lida em A0. Digamos A0=511.

Para converter a leitura em tensão, faça a regra de três: V(A0)=(A0/MAX)*Vcc - aproximadamente 2,5V

 O circuito que fizemos é um divisor de tensão, com um dos resistores de R=4k7. Para ler 2.5V, Ra: a resistência da água, deve ser igual a R.

pois V(A0)=Ra/(R+Ra)*Vcc

Juntando as fórmulas e simplificando:

V(A0)=Ra/(R+Ra)*Vcc=A0/MAX*Vcc => Ra/(R+Ra)=A0/MAX => Ra*MAX= A0*(R+Ra) => (MAX-A0)Ra=A0*R => Ra=A0*R/(MAX-A0).

Condutividade é o inverso da resistência: Cond(a)=(1/R)(MAX-A0)/A0

Condutividade depende da área e do comprimento do condutor, assim, para medir condutividade da água, deve haver tamanho de eletrodo e distância padrão.

Para verificar se a resistência de algo varia, por exemplo se esticado, pode conectar o A0 e o GND nas bordas e esticar. Pode ser uma boa testar em vários pontos para ver se tem locais mais sensíveis.


Fiz besteira...

Fui carregar o primeiro sketch no pro-micro, e tinha esquecido de ajustar o tipo de placa. O sketch compilou e carregou, mas não funcionou. Pior, não dava para carregar um sketch novo.

A placa não queimou, mas precisava ser reconfigurada - há um tutorial da sparkfun que mostra como. Resumindo:

1-) Configure a IDE para carregar ou o bare minimum ou algum sketch simples para o pro-micro;
2-) Se a porta já estava configurada, não mexa - você tem sorte;
Nota: se não teve sorte, você precisa descobrir que porta é e configurar a IDE para usar essa porta. Abra o menu Tools e fique pronto para abrir o ítem Serial port (você terá 8 segundos); conecte o RST e o GND pelo menos duas vezes (como num duplo clique) e abra o ítem Serial port, deve aparecer a porta, selecione-a.
3-) Conecte o RST e o GND pelo menos duas vezes (como num duplo clique)você terá 8 segundos para...
4-) Mandar o sketch para o arduino (use o atalho Ctrl-U).
DICA: como a IDE leva um tempo para compilar, pode ser mais fácil fazer o passo 4 antes do passo 3.


instalar a versão mais recente do arduino IDE

Durante o fim de semana fui colocar o arduino pro-micro (site da sparkfun) para funcionar. Ele é programado através da USB mas não usa a interface serial, ou seja, dá para programar pela USB e usar a serial para wifi via ESP8266(site filipeflop.com.br) ou bluetooth via HC-05(filipeflop.com.br) ou similar.

Também dá para substituir o arduíno pelo ESP8266 (modelo 7 ou modelo 12), mas, por enquanto, é um componente mais difícil de usar. Nota: já existe configuração da IDE do arduino para ESP.

A IDE 1.0.5, que vem com Debian 8 e Ubuntu 16.04 não permite configuração para arduino pro-micro nem para ESP. Por isso é melhor atualizar. O tutorial de arduino.cc resumido:

1-) desinstale a IDE antiga;
2-) baixe a IDE 1.6.11 ou mais recente (arduino.cc). As máquinas do lab são 64-bits.
3-) descompacte o arquivo que contém a IDE nova;
4-) execute install.sh da pasta de instalação;
Nota: a instalação é feita somente para o usuário e cria um ícone no Desktop.
Nota: essa IDE já tem os arduinos mais clássicos incluídos.

Para instalar o pro-micro usei este tutorial (sparkfun). Resumindo:
1-) Configure a IDE para checar o github da sparkfun por configurações de placas (Vá para File > Preferences, cole
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
na caixa de texto “Additional Board Manager URLs”) e clique OK.

2-)Abra o Board Manager (Tools->Board Manager);
3-) Busque por sparkfun
4-) Selecione  "SparkFun AVR Boards by SparkFun Electronics" e clique "install"


documentar!!!

Uma webcam, os programas cheese, recordmydesktop e mplayer devem ajudar a fazer vídeos:

Cheese mostra na tela a imagem que a webcam capta. recordmydesktop captura a tela, então dá para simultaneamente filmar o protótipo, e mostrar o código ou a aplicação que você construiu, grava som também.

mplayer serve para exibir o vídeo. Nota: ogg123 (do pacote vorbis-tools) apresenta file corrupted quando tento exibir meus vídeos - talvez porque tenha capturado sem áudio (recordmydesktop --no-sound --v_quality=32).

se você quiser editar usando linux, tente o programa ffmpeg.

quarta-feira, 24 de agosto de 2016

Motor rodando e código

Vídeo:

Código do blink adaptado para rodar um motor DC.
Dá para controlar a velocidade usando a saída PWM.

/*
  Motor1
  Turns on a motor on for one second, then off for one second, repeatedly.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int motor1 = 2;
int motor2 = 3;   // PWM output

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(motor1, OUTPUT);    
  pinMode(motor2, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(motor1, HIGH);
  digitalWrite(motor2, LOW);
  delay(1000);
  digitalWrite(motor1, LOW);
  delay(1000);
}


Cadeiras (fotos grandes!)

Preparação para terceiro encontro

Pessoal, tentarei ser objetivo - para amanhã:

0-) Temos mais computadores com Debian e ArduinoIDE instalados - obrigado ao pessoal que fez a instalação;

1-) O pessoal do projeto para PETs, por favor trazer um comedouro e um pouco de ração para começar a experimentar idéias para implementar;

2-) O lab continua com poucas cadeiras e meio empoeirado - venham com roupas para essas condições;

3-) Quem tiver um gamepad dual shock PIFADO, se puder, traga por favor;

4-) Vamos ajustar a dinâmica de aula às habilidades das pessoas: a idéia de grupos independentes parece não ser boa escolha;

5-) Vamos listar os projetos e pensar em apresentações para eles;

6-) "Achei" algumas cadeiras - fotos neste post para decidirmos se pegamos ou não;

7-) Pessoas que ficaram sem assistência no segundo encontro, por favor conversar comigo no encontro de amanhã - estou em dívida com vocês.

quinta-feira, 11 de agosto de 2016

Uma foto do fio condutivo para comparar o tamanho com linha e agulha de costura.

Uma foto do fio condutivo para comparar o tamanho com linha e agulha de costura.

Fotos do encontro 2

* Caso queiram que eu remova alguma foto, por favor envie msg. obrigado!

Geral da turma:
Grupos explorando carros:

Teste do acelerômetro:





Anotação sobre encontro 2

Olá, Pessoal,
    Consegui usar o arduino nano (amarelo) na máquina 26 do lab. Usei o cabo usb verde e coloquei a ide para usar arduino nano com atmega328.

Segue foto da configuração.

Vou deixar o arduino conectado, mas se quiser pode desmontar.

Foi um dia muito bom, com grupos e projetos sendo definidos.
Peço a quem quiser postar seu projeto neste blog que envie email do gmail para ach2157compfis@gmail.com.

Ah! importante! postem também o histórico das buscas que fizeram, e... fotos dos projetos, assim que forem evoluindo.

Abs,
Fábio.

segunda-feira, 8 de agosto de 2016

Eletricidade Básica - 7 Motores elétricos e drivers

Antes de começar, convém avisar que as saídas do arduino não são capazes de alimentar diretamente um motor elétrico e que caso isso seja tentado, há chance de queimar a saída que for usada ou até mais saídas e componentes.

Semelhantes a motores são alto-falantes, vibradores de celular e gamepad, solenóides (estes são a peça que abre a trava de alguns modelos de fechadura elétrica).


Os motores elétricos mais comuns são conjuntos de ímãs e bobinas montados de forma que ligando as bobinas em uma sequência elas atraem (ou são atraídas) pelos ímãs causando a aproximação deles (há movimento) quando a distância diminui além de um limite, desliga-se uma bobina e liga-se a seguinte (que está um pouco mais distante) e passa a ser atraída pelos ímãs e assim sucessivamente.



Apenas para citar alguns motores comuns, os motores de brinquedos e de eletrodomésticos mais simples são motores de corrente contínua (nos eletrodomésticos são de corrente alternada) com escovas. A escova do motor é um eletrodo de carvão que transmite energia para o coletor do motor. O par escova e coletor faz o chaveamento das bobinas do motor. Em motores de passo e motores sem escova (brushless), o chaveamento das bobinas é feito pelo circuito. Motores de passo tem o ângulo de giro controlado e podem ser travados deliberadamente - são aplicados em tarefas que requerem precisão. Motores sem escova têm baixo peso e alta potência - são usados por exemplo em drones.

Um motor é muito diferente de um resistor, mas ainda é útil considerar somente tensão, corrente e potência médios e resistência elétrica "aparente".

É necessária "muita" energia elétrica para gerar campo magnético suficientemente intenso para mover alguns gramas. Um motor elétrico de um brinquedo de criança consome perto de 1 watt (usualmente 3V a 0,3A) isto é "muito" na escala de consumo de componentes eletrônicos como o processador do arduíno, cuja saída fornece no máximo 5V e 0,02A.

Essa diferença de uma ordem de magnitude tem como consequência a necessidade de circuitos adicionais para que o arduino controle um motor elétrico. Esse circuito é chamado driver de motor.

O driver de motor com escovas mais comum é o L293. O manual está em
L293 de ti.com.Importante: o L293 não contém diodos para suprimir o transiente gerado pelo chaveamento das bobinas do motor, o L293D tem esses diodos. Esses diodos são importantes para não queimar o driver e outros componentes.

Ligando os motores como ilustrado na nota de aplicação do manual (cap. 9, figura 10 e tabela 3 ) e abstraindo o funcionamento interno do L293 temos:

EN1A2AResultado
110Motor roda num sentido
101Motor roda noutro sentido


O L293 nessa configuração suporta até 36V e movimenta motores de até 1A, o L293D movimenta motores até 0,6A.

Lembrando que esse tipo de motor consome (muito) mais energia quando o eixo está travado, pode ser importante medir o consumo dos motores nas condições de funcionamento em que serão usados para saber com mais precisão o quando demandarão do driver.


Atualização da preparação para o segundo encontro.

Bom dia, pessoal!
    Fui verificar os computadores do lab 8 - eles estão com a bios desbloqueada.
    Experimentei o instalador do Debian na máquina 29: O instalador gráfico reporta kernel panic e o instalador texto reporta a falta do arquivo de release (parece que a imagem que usei não pode ser gravada em um pendrive, ou qq coisa assim...). Segue foto da mensagem:





convert -crop 650x330+100+0 panic.jpg panic2.jpg



    Caso alguém saiba o que fazer, por favor venha preparado na quinta.
    Para ter um plano B, testei o lubuntu 16.04 que instalou sem problemas.

    Pelo menos o computador que testei estava desconectado da rede cabeada. O analista que estava cuidando da rede só volta na quinta. No meu teste a USPNET fuicionou bem com um adaptador wireless usb. Quem tiver algum em casa por favor traga na quinta.

    Ainda não comprei os banquinhos - pelo menos nesta quinta precisaremos trabalhar em pé.

    Tinha bastante poeira no lab - hoje (segunda) passaram um pano por cima dos micros, mesas e no chão, mas recomendo que venham com roupas que possam pegar pó.

    A checagem de uso das contas do Google supõe que o usuário é uma pessoa, não um grupo. Isso atrapalha o uso que queremos dar. Vamos conversar sobre alternativas. Em todo caso, o blog está criado: ach2157.blogspot.com e já tem uns posts sobre circuitos elétricos.

Abs,
Fábio.

domingo, 7 de agosto de 2016

Eletricidade Básica - 6 Entradas e saídas do arduíno

Praticamente qualquer pino do arduino pode ser configurado como entrada ou como saída. O padrão é que sejam entradas ou saídas digitais, caso tenham alguma característica diferente, por exemplo servem como entradas analógicas, ou como saídas "analógicas" (entre aspas pois trata-se de um truque na maioria dos modelos de arduino).

Segundo o manual do arduino, grosso modo, um pino configurado como saída podem fornecer ou drenar até 20mA. Quer dizer que dentro desse limite de corrente, simplificando o pino de saída e o pino GND como polos de um dipolo, o pino de saída é aproximadamente um gerador.

Quando configurado como entrada, esse mesmo dipolo é aproximadamente um resistor de resistência da ordem de 1Mohm. Isto tem consequências sobre o que ocorre se deixarmos uma entrada sem conexão e sobre quantas entradas podem ser conectadas a uma mesma saída.

Eletricidade Básica - 5 Diodos, LEDs

Diodos são componenetes que conduzem corrente em uma direção mas não na outra. Também são dipolos e têm polaridade: funcioname diferentemente se ligados a uma bateria em uma polaridade ou na inversa. Um dos polos é chamado ânodo, o outro, cátodo (em outros tempos, na língua portuguesa, era permitido "anôdo" e "catôdo", mas parece que hoje em dia não...).

Ânodo (A) é o terminal por onde a corrente convencional entra em um dipolo com polaridade, cátodo (K) é por onde sai.

Com essas "dicas" deve dar para antecipar que quando o diodo é ligado de forma que a corrente passe do ânodo para o cátodo isso ocorre. Se for ligado com os terminais invertidos, a corrente não passa. Na primeira ligação podemos dizer que o diodo foi diretamente polarizado. Na segunda, foi reversamente polarizado.

Um diodo ideal diretamente polarizado é equivalente a um gerador ideal - a tensão entre os terminais é fixa e sua resistência é próxima de zero. Em diodos de silício (hoje em dia mais comuns) a tensão é de 0,7V em diodos de germânio a tensão é de 0,3V e em diodos emissores de luz (LEDs) caso a luz seja verde, amarela, âmbar, vermelha é em torno de 2,0V nos de luz branca é de 3,4V. Há LEDs azuis com tensão de funcionamento de 2,0 e de 3,0 V. Convém consultar o manual dos LEDs para especificações mais precisas.

Reversamente polarizado o diodo equivale a um circuito aberto.

Ligar um diodo a um gerador de tensão maior que a do gerador equivalente ao diodo, sem outros componentes no circuito e diretamente polarizado (ié de forma que ele conduza corrente) na maioria das condições praticamente equivale a colocar o gerador em curto: certamente queima o diodo e talvez queime o gerador. Liga-lo reversamente polarizado praticamente equivale a não conectar nada ao gerador.

O LED acende quando diretamente polarizado, e pelo motivo citado acima, deve ser ligado a geradores através de resistores.

Consultando um datasheet de alldatasheets, o LED especificado acende verde, a tensão típica de funcionamento é 2,2V, a corrente direta típica é de 20mA. Ligando esse LED a um gerador de 5V para acendê-lo temos o circuito e cálculos:

O valor obtido para o resistor (R=140ohm) coloca o LED nas condições típicas de funcionamento. Fazendo as mesmas contas para as condições de máxima corrente e tensão obtemos R=60ohm. Depois de acender LEDs muitas vezes em variadas condições, sabe-se que somos capazes de enxergar o brilho da maioria dos LEDs a 1mA, o verde, a uma tensão de 1,7V, o que resulta em R=3,3kohm.

Eletricidade Básica - 4 Datasheets - condições de funcionamento típicas e condições máximas de funcionamento

Apelando ao senso comum, se ligarmos um equipamento (lâmpada, torradeira, batedeira, ...) que funciona somente com 110V em uma tomada de 220V o equipamento queima*.

Nesse evento doméstico a tensão típica de funcionamento do equipamento é 110V, em geral o equipamento nem ligará se conectado a uma tensão menor e queimará se ligado a uma tensão maior.

Todo equipamento elétrico tem (ou deveria ter) um manual contendo características típicas e máximas de funcionamento. Componentes eletrônicos certamente tem tais manuais, eles geralmente estão em inglês e chamam-se datasheet (será muito comum procurar um datasheet na internet).

Resistores também tem manuais, veja um neste link para o resistor CR-25 em alldatasheets.com. Nele há dimensões típicas, tensão de trabalho, potência, e uma curva de compensação por temperatura do ambiente (derating curve). O resistor mais usual nas lojas de varejo de componentes eletrônicos no Brasil é o CR-25. Segundo o manual, seu comprimento típico é de 6,5mm, diâmetro típico de 2,5mm.
A tensão máxima de trabalho é 250V (se passar desse valor o isolamento pode falhar, por exemplo), a potência dissipada por ele é de 0,25W à temperatura ambiente de 70 graus Celsius. À medida que a temperatura do ambiente sobe, a potência que pode ser dissipada pelo resistor diminui. Passando da potência dissipada, o resistor pode esquentar até queimar (inclusive literalmente).

Lâmpadas de filamento eram o tipo mais comum no Brasil até alguns anos atrás (estamos em 2017). O comportamento elétrico dessas lâmpadas era muito parecido com o de um resistor. Essas lâmpadas, e também as fluorescentes estão sendo substituídas rapidamente por LED (Light Emitting Diode).

LEDs são as lâmpadas do arduíno - o "Olá Mundo" do arduíno é colocar um LED para piscar. Para entender bem um LED (no próximo post) escreveremos um pouco sobre diodos.


* embora menos frequente, o gerador também pode queimar.

sábado, 6 de agosto de 2016

Eletricidade Básica - 3 Lei de Ohm, Lei das Malhas, Lei dos Nós

O uso da palavra "Lei" era muito comum nos séculos XVIII e XIX, quando a preocupação dos cientistas era encontrar as "Leis fundamentais da natureza".

A Lei de Ohm foi formulada nos anos 1820 por George Ohm estudando fios de diversos metais,  comprimentos e diâmetros. A fim de associar condutores e resistores, lembre que hoje em dia resistências de chuveiro elétrico são feitas de fios.

Modernamente a Lei de Ohm é escrita V=R*I : A tensão sobre um resistor é igual à sua resistência multiplicada pela corrente que passa por ele.

Um nó é a interconexão de vários condutores. A Lei dos Nós diz que a soma das correntes que chegam a um nó é zero.

Uma malha, usando alguns conceitos de teoria dos grafos, é um caminho simples (sem cruzamentos) que se inicia em um terminal de um dipolo e termina no outro terminal do mesmo dipolo. A Lei das Malhas diz que a soma das tensões em uma malha é zero.

Poderíamos dizer que outra "Lei" ainda mais fundamental é que a corrente que passa em um condutor é a mesma ao longo dele.

As "Leis dos nós e das malhas" se verificam (estranho né??) se o circuito puder ser considerado um sistema (físico) fechado. Caso contrário, por exemplo o sistema não é fechado porque irradia ou capta energia (por exemplo ondas de rádio)  então as "Leis" não se verificam.

Aqui em Eletricidade Básica, é bem razoável dizer que o circuito é um sistema fechado, então podemos aplicar as "Leis".

Aplicando as convenções de geradores e receptores nos componentes de qualquer circuito e aplicando as leis dos nós e das malhas obtém-se um conjunto de equações. Quando conhece-se a relação (matemática) entre tensão e corrente de cada componente, acrescentam-se mais equações ao conjunto inicial e é possível calcular as soluções para o sistema de equações, consequentemente saber todas as tensões e correntes sobre todos os componentes.

Dificuldade para usar blogger/gmail coletivamente

Caros,
    Google supõe que uma conta gmail seja usada por uma pessoa (não um grupo). Quando detecta um padrão de uso inesperado, bloqueia a conta.
    Na próxima aula conversaremos sobre como várias pessoas poderiam postar simultaneamente.
Abs,
Fábio.

Eletricidade Básica - 2 Dipolos, tensão, corrente, potência e calor

Dipolo é um componente conectado ao restante do circuito por dois terminais.
Um dipolo ligado tem tensão (popularmente voltagem, em inglês voltage) entre os terminais e por ele passa corrente elétrica.
As unidades de medida para tensão e corrente são Volt (V) e Ampére (A), respectivamente.

A tensão sobre um dipolo é representada por um arco entre os terminais, a base indica qual terminal dá a referência da medida, a ponta dá o terminal em que a tensão é medida.

Categorização 1: dipolos geradores (de eletricidade) e dipolos receptores (de eletricidade).

Geradores, como o próprio nome diz, geram energia elétrica - são dispositivos que geram campos elétricos entre seus terminais. Estes campos fazem os elétrons se mover. Elétrons em movimento de um terminal para outro são corrente elétrica então pode se dizer que geradores geram corrente elétrica. Pilhas, baterias, células solares, geralmente funcionam como geradores, mas em certas condições todos podem ser receptores - as baterias podem receber e armazenar energia (carga), mas ou outros vão dissipar essa energia em forma de calor.
Nota: idealmente geradores somente geram campos elétricos. Geradores ideais são simplificações (abstrações) dos geradores reais.

Receptores quando recebem corrente elétrica (energia) a transformam em calor, luz, campo magnético, ...

Pensando mecanisticamente, elétrons saem do polo negativo, passam pelo circuito e entram no polo positivo do gerador. Convencionalmente (o conceito foi enunciado antes de se conhecer a mecânica), a corrente elétrica sai do polo positivo e entra no polo negativo do gerador. Usaremos a convenção. Nos receptores a tensão do terminal por onde entra a corrente é mais alta do que a tensão do terminal por onde sai a corrente, então a ponta da seta que representa a tensão sobre o receptor aponta para o terminal por onde a corrente entra. O circuito mínimo (abaixo) mostra um gerador e um receptor conectados com corrente e tensão indicados.



A potência sobre um receptor é o produto da tensão sobre ele pela corrente que passa por ele (P=V*I).
Lembrando um pouco da física, potência = trabalho/tempo (P=T/(tf=ti)).
Se todo o trabalho for convertido em calor, então quantidade de calor é igual ao trabalho (Q=T)
Se não houver mudança de estado nem dissipação de calor, a quantidade de calor é igual à massa vezes o calor específico vezes a variação de temperatura  (Q=m*c*(Tf-Ti)).
Se essa física se aplica ao dipolo então a potência (elétrica) sobre o dipolo e dissipada em forma de calor vai esquentar o receptor, por exemplo até fundi-lo.

Nota: geradores reais esquentam mas não é possível explicar o processo modelando-os como geradores ideais.

Eletricidade Básica - 1 Motivação e sumário

A sequência de posts Eletricidade Básica apresenta teorias e informação úteis, entre outras coisas, para usar e  não queimar os componentes.

Para usar um componente precisamos conhecimento mínimo sobre como funciona. Esse conhecimento compõe um modelo (mental, matemático, ...). O uso desse modelo, até certa medida, permite planejar e prever o que acontecerá - por exemplo se o LED permanecerá apagado, acenderá ou queimará. Esta sequência de posts pretende transmitir esse conhecimento (nota: transmissão de conhecimento também requer que haja modelos!).

Para nossa sorte, é possível organizar o texto agrupando componentes com dois terminais em uma categoria, então conversaremos sobre dipolos. Resistores, capacitores, indutores, LEDs, baterias são dipolos.

Na intenção (bastante humana) de manter as coisas o mais simples possível (onde simples pode ser também aquilo que foi descoberto primeiro,...), gostaríamos que todos os dipolos pudessem ser aproximados por combinações de resistores e baterias. Resistor é o objeto que levou à "descoberta" da "Lei de Ohm" e por isso vamos aprendê-la.

A aplicação simples dessa forma de modelar dipolos permite combiná-los (como conjuntos de baterias e resistores) para modelar outros componentes, por exemplo um LED (que é um tipo de diodo).

Um circuito integrado, ou uma placa de circuitos, como o Arduino tem muitos terminais. Pelo menos dois deles são usados para fornecer energia aos circuitos, os demais são usados para enviar/receber sinais elétricos. Um Arduino conectado à fonte de energia pode ser considerado um dipolo. Para muitas aplicações, o terminal do Arduino em relação a um dos polos da fonte de energia pode ser considerado um dipolo.

Todo componente, seja resistor, LED, ou placa de circuitos como Arduino, tem um manual que contém instruções para uso, características que indicam funcionamento esperado e condições máximas suportadas.

Com as informações de manual e o conhecimento dessa forma de modelar circuitos é possível verificar se componentes deveriam funcionar (ou não), queimar, se estão funcionando dentro do esperado, ... pelo menos em uma boa quantidade de situações.

Para quem tem pressa de ver o Arduíno acender um LED (não há motivo para recriminar alguém pela pressa), ligue o LED à saída do Arduíno através de um resistor de valor entre 68 e 3,3kohm. Segundo o tutorial de arduino.cc, esses valores estão entre 220ohm e 1kohm. Se você quiser saber como chegar nesses valores, siga os posts.

Os próximos posts serão:

Dipolos, tensão, corrente, potência e calor
Lei de Ohm, Lei das Malhas, Lei dos Nós
Datasheets - condições de funcionamento típicas e condições máximas de funcionamento.
Diodos, LEDs
Entradas e saídas do arduíno
Motores elétricos e drivers
Motores de passo e drivers

quinta-feira, 4 de agosto de 2016

Preparação para encontro 2

Para criar o pendrive: sudo dd if=debian-8.5.0-amd64-DVD-1.iso of=/dev/sdb
* nota: sdb é o device que representa o pendrive.
** nota: levou umas duas horas para criar o pendrive.

Tive que redimensionar a foto da tela usando os comandos abaixo:

First install imagemagick
sudo apt-get install imagemagick
Open a terminal and run this command:
convert  -resize 50% source.png dest.jpg
It will reduce the size by 50%
You can also specify the size:
convert  -resize 1024X768  source.png dest.jpg 
 
(referência: http://askubuntu.com/questions/1164/how-to-easily-resize-images) 
 
 
 
(duas vezes ele quebrou o link para a imagem no google drive, então resolvi tirar ;)

Planejamento para encontro 2

Propor a leitura e tradução das apostilas que ensinam o básico sobre arduino:
https://www.sparkfun.com/products/retired/11976
Circuit Examples:
  • Circuit 1: Blinking an LED
  • Circuit 2: Reading a Potentiometer
  • Circuit 3: Driving and RGB LED
  • Circuit 4: Driving Multiple LEDs
  • Circuit 5: Push Buttons
  • Circuit 6: Reading a Photo Resistor
  • Circuit 7: Reading a Temperature Sensor
  • Circuit 8: Driving a Servo Motor
  • Circuit 9: Using a Flex Sensor
  • Circuit 10: Reading a Soft Potentiometer
  • Circuit 11: Using a Buzzer
  • Circuit 12: Driving a Motor
  • Circuit 13: Using Relays
  • Circuit 14: Using a Shift Register
  • Circuit 15: Using an LCD

Instalar linux nas máquinas do lab 8.
Instalar arduino IDE (apt-get install arduino)
Instalar Cheese (apt-get install cheese)
Instalar recordmydesktop (apt-get install recordmydesktop)
Refinar as idéias
Definir os grupos

prof:
Levar um carro funcionando

lojas:

http://www.filipeflop.com/
http://www.mercadolivre.com.br/
http://www.baudaeletronica.com.br/
https://www.robocore.net/
https://www.sparkfun.com/
https://www.adafruit.com/
http://loja.multcomercial.com.br/
http://soldafria.com.br/

sites colaborativos:
https://www.arduino.cc/
http://www.instructables.com/

Encontro 1 - 2016

O objetivo deste blog é ser um espaço para compartilhamento de documentos e registro do progresso dos estudos na disciplina.

Propostas de Projeto

  1. Vagas em estacionamento (Marcelo)
  2. Leitor de Água e Luz (Luíza)
  3. Plotter (Leonardo, Marcelo)
  4. Pet (Louise)
  5. Leitor de Sinais Biométricos (Bruno, Ana, Marcos)
  6. Monitor de Enchentes (Matheus, Marcos, Bruno)
  7. Carros
  8. Estação Meteorológica
  9. Floreira/Horta/Permacultura
  10. Luva assistiva
  11. AFND*
  12. Arremessador de tenis de mesa (Carlos)

(faltou algum??)

Os computadores do lab 8 são core i3-540 com 4G de RAM.

Para aula que vem (11.08)
  1. Criar pendrives de instalação Debian Jessie 64bit
  2. Banquinhos para usar no lab (prof.)
  3. Cabos micro USB
  4. Para quem já definiu o que fazer, trazer uma descrição da idéia, ou ir publicando aqui.
  5. Para quem ainda não definiu - pensar sobre o assunto.

Pendências menos imediatas:

  1. Caixas para projetos
  2. Canetas Marcadoras (daqueles marcadores de CD)