Универсальный шилд (для обучения)

Немного лирического вступления.
После моего увлечения Arduino, я, естественно, пытался подсадить заинтересовать этим делом многих своих знакомых. И одной из жертв моих попыток стал паренек лет 12. Очень страстно увлекался компьютерами. Ну как компьютерами, в основном игры и соц. сети. Даже так, ТОЛЬКО ИГРЫ и иногда соц. сети :) Дай думаю, сделаю доброе дело, пускай займется чем-то полезным, пробует, творит, программирует и т.д. Я подарил ему плату Arduino (один из китайских клонов) и небольшую макетную плату с кучкой соединительных проводков. Несколько вечеров потратил на «вводную часть», распечатал для него какую-то книгу с примерами (что-то типа, «Ардуино для маленьких волшебников»), собрал небольшой Starter Kit (резисторы, светодиоды, пищалки...). Ну и вперед! Что-то у него получалось, что-то не очень. Причем иногда из-за проблем с соединениями на макетке, будь оно не ладно. И мне пришла мысль, что для таких целей было бы удобно иметь некий простенький шилд с необходимыми кусками схем из примеров. Помимо обучения, такой шилдик можно использовать для быстрой отладки какой-нибудь идеи… Как говориться: «Мужик сказал-мужик сделал!». Изготовление такого «Shield для обучения» у меня заняло один выходной. Готовое устройство было торжественно вручено юному «программисту»!
А у меня осталось несколько фоток процесса сборки и печатная плата в SprintLayout. И вот, наконец-то, поборов природную лень, я решил собрал все, что касалось этого шилда в некий законченный вид. (Нарисовать, в конце концов, схему хотя бы :)).

Вот схема (или даже набор схем) данного шилда:

Фактически, данный шилд — это набор полезных для обучения модулей, которые с помощью перемычек, подключаются к соответствующим пинам:
Сдвиговый регистр 74НС595 с набором светодиодов
— Микрофонный усилитель на LM386
— терморезистор с обвязкой
фоторезистор с обвязкой
— RGB светодиод
— обычный 5мм светодиод
— небольшой KeyPAD
Буззер

И все это богатство на одной маленькой плате :) Ну разве не клево?

Печатная плата вышла такая (не критикуйте сильно, это период моего освоения SprintLayout...):

Каждый узел отключается соответствующей перемычкой. Дефицитных деталей нету. Единственное, что я купил — это RGB-светодиод, фоторезистор и SMD резисторы. Буззер и терморезистор были «извлечены» из старой материнской платы. Ниже подготовка к запайке и сбор деталек:

Про ЛУТ и пайку писать особо нечего. Получившейся результат в разных ракурсах:

еще:

еще:


Немного поясняющих надписей:

Красным цветом я обозначил назначение перемычек. Поясню. Допустим для некого проекта нам нужны кнопки и RGB светодиод. Значит оставляем перемычки на выводах [Key En] и [RGB En], остальные можно снять… Ну и так далее. В правом верхнем углу нашлось место для выводов сигналов TX,RX,GND,+5В, это для возможного подключения всяких радио/блютуз и т.п. модулей. Чтобы не забыть, что куда подключается, я приклеил в левом нижнем углу платы небольшую бумажную памятку :)

Из примеров работы, я сумел отыскать у себя только вот такой скетч (я только немного дописал комментарии):
(Напомню, что для работы этого примера перемычки должны стоять на [74HC595 En], [Led En], [Mic En]).

/**
Demo для универсального шилда
сигнал с микрофона выводиться на линейку светодиодов

 **/
 //хардварное подключение узлов
const byte MicPin=3; //
const byte TermoPin=2; //
const byte PhotoPin=1;
const byte ledPin=11;
//это подключение 74HC595
byte latchPin = 9;
byte clockPin = 8;
byte dataPin = 10;

int result=0;

void setup() {
  Serial.begin(9600); //осталось от отладки
  pinMode(ledPin,OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(A0, INPUT);
}

void loop() {
  
  
 digitalWrite (ledPin,LOW);
 result = mic_level(MicPin);//сигнал будем брать с микрофона
// result=Photo_level(PhotoPin)-80; //сигнал будем брать с фоторезистора
//  result = (1023-Termo_level(TermoPin)); //сигнал будем брать с терморезистора
  if (result>750) digitalWrite(ledPin,HIGH); //Отображение пикового сигнала, а-ля перегруз
  result = map(result, 0, 1023, 1, 256); //пересчет результата 
 
Show (result,0); //вывод результата
//  delay(200);
    
}


//процедура вывода результата на линейку светодиодов
//второй параметр определяет как выводить результат
// 1- в линейном виде
// 0- в двоичном коде
void Show (int result, boolean lin){
  if (lin){
    result=(result>>5);
 // result=result/32;
  result=255>>(8-result);
  } 
  Serial.println(result); 
  digitalWrite(latchPin, LOW);
  shiftOut (dataPin, clockPin, MSBFIRST, result);
  digitalWrite(latchPin, HIGH);
  
}


// Читаем данные с фоторезистора
int Photo_level(int PhotoPin){
  int val = analogRead(PhotoPin);
  return val;
}

// Читаем данные с терморезистора
int Termo_level(int TermoPin){
  int val = analogRead(PhotoPin);
  return val;
}

// Читаем данные с микрофона и считаем макс. амплитуду
int mic_level(int MicPin){
  int mn = 1024;     // mn only decreases
  int mx = 0;        // mx only increases
  for (int i = 0; i < 200; ++i) {
    int val = analogRead(MicPin);
    mn = min(mn, val);
    mx = max(mx, val);
     }
   return (mx-mn);
}


Вот такая загогулина. Весь материал забираем одним архивом тут!
  • +1
  • 21 марта 2014, 08:39
  • Ghost_D

Комментарии (5)

RSS свернуть / развернуть
+
0
Отличная идея! Делай в домашних масштабах и продавай недорого — спрос будет.

единственно я бы сделал более модульно, но тогда получается уже прото шилд.
avatar

romanvl

  • 25 марта 2014, 00:24
+
0
Отличный шилд. только есть небольшой вопрос по обозначению на схеме. подключение светодиодов, на схеме не указано, где анод и катод. если можно, то объясните. спасибо
avatar

Pimkin_Dima

  • 28 марта 2014, 07:55
+
0
Ну, сорри. Не акцентировал на это внимание.
У светодиода длинный вывод — анод — сюда надо подавать плюсик (лог. единицу, HIGH) — Т.е., паять к резисторам.
А катод (короткая ножка) — на землю GND (катоды в схеме объеденены на землю).
Вот, почитай robocraft.ru/blog/arduino/1010.html.
P.S., если сделаешь пришли фото (очень любопытно)!!!
avatar

Ghost_D

  • 28 марта 2014, 09:22
+
0
хорошо, как сделаю, пришлю. а какой термодатчик вы использовали? robocraft.ru/shop/index.php?route=product/product&path=45&product_id=196 вот такой пойдет?
avatar

Pimkin_Dima

  • 30 марта 2014, 14:49
+
0
Я ставил терморезистор, который был выпаян из старой мат. платы (стояла такая капелька под процессором, вот примерно такой www.overclockers.ru/images/lab/2007/09/26/39b_sil35_DCE.jpg). На плате было маркировка, что это терморезистор. Померял тестером — 10 кОм. Нагрел, сопротивление изменилось, остыл — вернулось. Значит — то, что мне нужно. Еще встречал такие в БП.
А тот вариант, что вы насмотрели, наверное тоже можно использовать, но скорее всего последовательно с ним нужной поставить резистор :)
avatar

Ghost_D

  • 31 марта 2014, 08:38

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.