Durante o Arduíno Day 2017 em São Paulo, tive a oportunidade de ganhar um Shield EDU-IFSP, cedido pelos integrantes do GERSE – Grupo de Estudos em Robótica e Sistemas Embarcados do IFSP Guarulhos. Fiquei muito feliz com o presente e venho aqui apresentar os detalhes desse projeto, muito bem elaborado pela equipe GERSE.
Segundo o grupo, a placa surgiu com o objetivo de facilitar o ensino/aprendizagem de lógica de programação aplicada à robótica. O shield possui pinout Arduino R3 e diversos recursos montados em uma placa em face simples.
Por ter pinout arduino R3, a placa pode ser utilizada em outras plataformas que possuam esse padrão de pinagem.
Detalhes do Shield EDU-IFSP
O Shield Edu-IFSP disponibiliza uma variedade de periféricos de entrada e saída, como:
- botões;
- LED’s;
- Buzzer;
- Potenciômetro;
- display de 7 segmentos;
- Conector para display LCD;
- Conector para módulo Bluetooth;
- Drive para pequenos motores;
- Bornes para ligações externas.
A figura a seguir exibe a placa:
Devido à quantidade de recursos na placa e uma limitação na quantidade de pinos nos conectores do Arduino, os desenvolvedores do Shield colocaram dois jumpers para seleção de recursos. O JP1 define a seleção entre o display de 7 segmentos e os LEDs, já o JP2 faz a seleção entre o Buzzer e o pino uso geral D06.
A equipe realizou um ótimo trabalho no desenvolvimento desse projeto, além da placa eles trabalharam bastante na documentação e exemplos. Todos os destalhes do projeto estão disponíveis nesse link.
A equipe GERSE desenvolveu um manual para uso dessa placa e disponibilizou o esquemático, conforme as imagens a seguir:
Para o primeiro teste como o Arduino, eles disponibilizam um código exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
/* *Programa teste do Shield Edu-IFSP * *GERSE – Grupo de Estudos em Robótica e Sistemas Embarcados *http://www.gerserobotica.com *IFSP – Campus Guarulhos * *Desenvolvedor: *Pedro Igor Borçatti * *março de 2017 */ #include <LiquidCrystal.h> // BIBLIOTECA PARA DISPLAY LCD #define A 13 // LCD 7 SEGMENTO A OU LED A #define B 12 // LCD 7 SEGMENTO B OU LED B, DISPLAY 16X2 D7 #define C 11 // LCD 7 SEGMENTO C OU LED C, DISPLAY 16X2 D6 #define D 5 // LCD 7 SEGMENTO D OU LED D, DISPLAY 16X2 D5 #define E 4 // LCD 7 SEGMENTO E OU LED E, DISPLAY 16X2 D4 #define F 3 // LCD 7 SEGMENTO F OU LED F, DISPLAY 16X2 E #define G 2 // LCD 7 SEGMENTO G OU LED G, DISPLAY 16X2 RS #define POT A1 // ADC1, POTENCIÔMETRO #define BUZZER 6 // BUZZER OU BORNE (PWM6) #define ADC2 A2 // BORNE #define ADC3 A3 // BORNE #define ADC4 A4 // BORNE #define ADC5 A5 // BORNE #define MOTOR1 9 // BORNE (BC548 - VCC BATERIA E COLETOR) #define MOTOR2 10 // BORNE (BC548 - VCC BATERIA E COLETOR) #define BT1 A0 // BOTÃO COM TRAVA #define BT2 7 // BOTÃO 1 #define BT3 8 // BOTÃO 2 float CALC = 0; // VARIÁVEL PARA CALCULO byte NUM = 0; // VARIÁVEL PARA PWM boolean bt1 = false; // VARIÁVEL DO BOTÃO 1 boolean bt2 = false; // VARIÁVEL DO BOTÃO 2 boolean bt3 = false; // VARIÁVEL DO BOTÃO 3 boolean cls = false; // FLAG PARA CONTROLE DO DISPLAY LCD 16X2 const boolean LCD7[10][7] = // NÚMEROS DE 0 A 9 PARA LCD DE 7 SEGMENTOS { // {A,B,C,D,E,F,G} {1,1,1,1,1,1,0}, // 0 {0,1,1,0,0,0,0}, // 1 {1,1,0,1,1,0,1}, // 2 {1,1,1,1,0,0,1}, // 3 {0,1,1,0,0,1,1}, // 4 {1,0,1,1,0,1,1}, // 5 {1,0,1,1,1,1,1}, // 6 {1,1,1,0,0,0,0}, // 7 {1,1,1,1,1,1,1}, // 8 {1,1,1,1,0,1,1}, // 9 // {A,B,C,D,E,F,G} }; //INICIANDO DISPLAY LCD LiquidCrystal lcd(2, 3, 4, 5, 11, 12); void setup() { lcd.begin(16, 2); // CONFIGURANDO TAMANHO DO DISPLAY 16X2 pinMode(A, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 13 pinMode(B, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 12 pinMode(C, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 11 pinMode(D, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 5 pinMode(E, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 4 pinMode(F, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 3 pinMode(G, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 2 pinMode(BUZZER, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 6 pinMode(MOTOR1, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 9 pinMode(MOTOR2, OUTPUT); // CONFIGURANDO COMO SAÍDA O PINO 10 pinMode(BT1, INPUT_PULLUP); // CONFIGURANDO COMO ENTRADA O PINO A0 EM PLLU UP pinMode(BT2, INPUT_PULLUP); // CONFIGURANDO COMO ENTRADA O PINO 7 EM PLLU UP pinMode(BT3, INPUT_PULLUP); // CONFIGURANDO COMO ENTRADA O PINO 8 EM PLLU UP pinMode(POT, INPUT); // CONFIGURANDO COMO ENTRADA O PINO A1 //pinMode(ADC2, ); // PINO DISPONÍVEL NO BORNE //pinMode(ADC3, ); // PINO DISPONÍVEL NO BORNE //pinMode(ADC4, ); // PINO DISPONÍVEL NO BORNE //pinMode(ADC5, ); // PINO DISPONÍVEL NO BORNE } void loop() { bt1 = !digitalRead(BT1); // AQUISITANDO VALOR DO BOTÃO 1 bt2 = !digitalRead(BT2); // AQUISITANDO VALOR DO BOTÃO 2 bt3 = !digitalRead(BT3); // AQUISITANDO VALOR DO BOTÃO 3 CALC = analogRead(POT); // AQUISITANDO VALOR DO POTENCIÔMETRO if(bt1) // SE BOTÃO 1 APERTADO { if(cls) // CONTROLE DO DISPLAY LCD 16X2 { lcd.clear(); // LIMPAR DISPLAY 16X2 delay(20); cls = false; // FLAG DE CONTROLE P. DISPLAY 16X2 } NUM = (CALC/1023)*9; // 0 -> 0 1023 -> 9 digitalWrite(A, LCD7[NUM][0]); digitalWrite(B, LCD7[NUM][1]); digitalWrite(C, LCD7[NUM][2]); digitalWrite(D, LCD7[NUM][3]); digitalWrite(E, LCD7[NUM][4]); digitalWrite(F, LCD7[NUM][5]); digitalWrite(G, LCD7[NUM][6]); } else // SE BOTÃO 1 NÃO APERTADO { if(!cls) // CONTROLE DO DISPLAY LCD 16X2 { digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); lcd.clear(); delay(10); lcd.print("< GERSE >"); // ESCREVER EM DISPLAY 16X2 delay(10); cls = true; } if(bt3) // SE BOTÃO 3 PRESSIONADO { NUM = (CALC/1023)*255; // 0 -> 0 1023 -> 255 analogWrite(MOTOR1, NUM); // SETAR VALOR DO PWM NO MOTOR1 analogWrite(MOTOR2, NUM); // SETAR VALOR DO PWM NO MOTOR2 lcd.setCursor(0, 1); // POSICIONAR CURSOR NA COLUNA 0, LINHA 1 lcd.print(" "); lcd.setCursor(0, 1); lcd.print(NUM); // ESCREVER VALOR DE NUM NO DISPLAY 16X2 } } if(bt2) // SE BOTAO2 PRESSIONADO { NUM = (CALC/1023)*255; analogWrite(BUZZER, NUM); // SETAR VALOR DO PWM NO BUZZER } delay(100); // ESPERAR 100ms } |
Um excelente trabalho realizado pela equipe GERSE, que ajudará muitas pessoas nos primeiros passos com Arduino e com microcontroladores. Vamos explorar os recursos dessa placa nos próximos artigos.
Acompanhe a equipe GERSE:
Fábio,
Não encontrei muita informação sobre a compra desta Shield. Eles comercializam de alguma forma?
Eu gostaria muito de ter uma destas.
Obrigado Um abraço
Igor
Igor, recomendo que entre em contato com os líderes do projeto. Acredito que eles possam vender o shield pra você.