1

(3 ответов, оставленных в Технические вопросы)

Проверь, может 12й порт на что-то замыкает? Посмотри как будет греться когда 12порт всегда low? Или всегда HIGH? Если греется сам контроллер - то скорее всего где-то что-то замкнуло. Посмотри около 16й ноги микросхемы, может там что-то коротит. Также посмотри у ISP разъема, на той-же  ноге висит MISO. И вообще осмотри плату внимательно, нагрев - признак большого тока, а это чаще всего замыкание. Попробуй промыть плату бензином, может где что прилипло.

Если готов пожертвовать 12м пином и уверен что ISP тебе не понадобится - можешь попробовать аккуратно скальпелем или ножом перерезать 16ю ногу у Atmega328P, если греться не прекратила то скорее всего проблема внутри микрухи и скорее всего придется ее менять.

2

(3 ответов, оставленных в Технические вопросы)

Советую для начала брать Freeduino 2009, для начала особой разницы нет, разница в мелочах. Так например на Arduino Uno вместо FTDI  стоит контроллер ATmega8U2. Freeduino Through-Hole от Freeduino 2009 отличается еще меньше - у 2009 автовыбор питания.  Для тех целей что ты описал подойдут все и для этих целей разницу ты не увидишь.

3

(2 ответов, оставленных в Технические вопросы)

Чтобы было падение напряжения надо 2 резистора, один скажем термо, второй обычный (удобнее подстроечный), из них собирается делитель напряжения, два резистора один на землю другой на +V, точка соединения резистеров - точка деления с нее и надо брать показания. Даташит на KTY81-2SERIES http://www.platan.ru/pdf/datasheets/phi … RIES_4.pdf говорит что у 210 минимум 1980  Ом при -55С максимум 2020 Ом при 150С. С программой тоже не все ясно, сначала разберись с одним датчиком. Или отдели их текстом.

4

(7 ответов, оставленных в Технические вопросы)

Более подробно почитай тут: http://www.bezkz.su/publ/shemy/konstruk … 0-114.html
если второй случай - то без стаба.

Может кому будет полезно.
Простейший кухонный таймер на основе ARDUINO

Видео работы платы:

http://www.youtube.com/watch?v=f6C7LF0sxkI

Видео работы в протеусе:

http://www.youtube.com/watch?v=UGNuIySqSCY

Понадобился тут кухонный таймер, самый простой, без наворотов. Найти в продаже оказалось сложновато. Простые механические – все встраиваемые. Нашел китайский механический – проработал месяц, видимо пружина хреновая. Электронные –куча наворотов, выбор мелодий и тому подобное. Чтобы просто выбрал время, нажал на кнопку и занимайся своими делами пока не запищит – нету. Ну раз нету, придется делать самому.
Простой выбор времени. Решил что потенциометр – самое то. Крутишь пока не будет нужное время. Нажал на кнопку – отсчет пошел. Отсчет на 00 – пищит.
Защита от пустой траты батарейки. Потенциометр взял со встроенной кнопкой, выкрутил меньше 0 – кнопка разорвала контакт между + батареи и Vin стабилизатора питания 7805. Заткнуть писк можно только полностью отключив питание.
Питание идет через стабилизатор, по этому можно питать от 6в до 18, я ставил так как питать решил от батарейки 9в  типа крона (просто у меня к кронам куча батарейных отсеков валяется), но может возьму 12в батарейку как в пультах автосигнализации. Сначала хотел питать от 3в таблетки, но на ней пьеза слишком тихо пищит.
Отображение решил сделать на двух семи сегментных светодиодных индикаторах (у меня один двойной), подключенных через два сдвиговых регистра 74HC595 подключенных раздельно (это 6 пинов ардуины).
Звук –обычная пьезо пищалка.
Плата – решил использовать паячную макетку, травить не стал.

Цена (крайне примерно, так как все это у меня уже было):
    Наим  -  Кол-во -  цена  - сумма
1)    ATMega168 – 1шт – 180р -180р
2)    74HC595 – 2шт -12р – 22р
3)    Индикатор DC08-11GWA -1шт – 50р-50р
4)    Кнопка -1шт -10р -10р
5)    Резистер переменный с выкл. 50Ком – 1шт – 30р -30р
6)    Резистер 100 Ом -2шт-2р -4р
7)     Батарейный отсек -1шт – 8р -8р
8)    Плата макетная  -1шт – 120р-120р
9)    Батарейка дюрасел 9в – 1шт-80р-80р
10)    Провода – кусок старого IDE шлейфа.
Всего: 396р

Корпус пока не придумал. Ручку на потенциометр тоже.

Схема:
Ножки индикатора соединены в таком порядке потому что так удобнее было монтировать.
Токоограничительные резисторы на общих катодах индикаторов, вообще так ставить не рекомендуется, но для меня главным был общий размер устройства.
http://mogalkov.ath.cx/duino/tymer.jpg
Скетч:

//переменные управления
int battonAA=8;//пин кнопки сброса
int btstatAA=0;//состояние кнопки сброса
int potA=5;//Потенциометр, отвечает за выбор времени

//переменные хвука
int speakerPin = 10;//нога к спике
int length = 16;                  // число нот
char notes[] = "cfcfcfcfcfcfcfcf "; // пробел - пауза
int beats[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1 };
int tempo = 300;
//Сдвиговый регистр
//-----------------------------
int dataPA=0;//пин сдвига DS первой МС
int latchPA=1;//пин сдвига ST_CP первой МС
int clockPA=2;//пин сдвига SH_CP первой МС
//-----------------------------
//-----------------------------
int dataPB=5;//пин сдвига DS второй МС
int latchPB=6;//пин сдвига ST_CP второй МС
int clockPB=7;//пин сдвига SH_CP второй МС
//-----------------------------
//цифры для семисегментных индикаторов 
//сдвиговый регистр 1

int shregA[10]={0b11101110,0b10000010,0b11011100,0b11010110,0b10110010,0b01110110,0b01111110,0b11000010,0b11111110,0b11110110};
//сдвиговый регистр 2
int shregB[10]={0b11101110,0b10000010,0b11011100,0b11010110,0b10110010,0b01110110,0b01111110,0b11000010,0b11111110,0b11110110};
//----------------------------
// переменные таймера
long previousMillis = 0;        // прошлое значение времени милисекунд
int secundes=0;//Храним сколько прошло минут
int secundesA=99;//Храним сколько осталось минут
long interval = 1000;//интервал в милисекундах (минута=60000)

void btnstatread()//читаем кнопку
{
if (digitalRead(battonAA)==1){btstatAA=1;}
}


void timerEND()//этот блок выполнится если обратный отсчет достигнет 0
{
  signal();//запускаем проигрывание музыки
}
//-------------------------------
//Музыка
void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}
void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  // проиграть тон, соответствующий ноте
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}
void  signal() {
 do {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // пауза
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
    // пауза между нотами
    delay(tempo / 2); 
    btnstatread();
    if (btstatAA==1){break;}//прервать если кнопка HIGH
  }
  }while(btstatAA==0);
  } 
//-------------------------
//Выводим символ на 1й сдвиговый регистр
void registerWriteA(byte bitsToSend) {
  digitalWrite(latchPA, LOW);
  shiftOut(dataPA, clockPA, MSBFIRST, bitsToSend);
  digitalWrite(latchPA, HIGH);
}
//Выводим символ на 2й сдвиговый регистр
void registerWriteB(byte bitsToSend) {
  digitalWrite(latchPB, LOW);
  shiftOut(dataPB, clockPB, MSBFIRST, bitsToSend);
  digitalWrite(latchPB, HIGH);
}

//объявляем пины
void setup() {
  //-----------------
  //пины 1го регистра
  pinMode(dataPA, OUTPUT);
  pinMode(latchPA, OUTPUT);
  pinMode(clockPA, OUTPUT);
  //-----------------
  //пины 2го регистра
  pinMode(dataPB, OUTPUT);
  pinMode(latchPB, OUTPUT);
  pinMode(clockPB, OUTPUT);
  //-----------------
  pinMode(speakerPin, OUTPUT);//пин спикера
  pinMode(battonAA,INPUT);//пин кнопки
}

void settimer()//Обратный отсчет
{
//  secundesA=60;
secundesA=analogRead(potA);
secundesA=secundesA/16;
  cifri(secundesA);//отображаем время
}

void loop()
{
cifri(secundesA);//отображаем время
btnstatread(); 
if (btstatAA==0){settimer();}
else {
unsigned long currentMillis = millis(); //присваиваем переменной текущее значение милисекунд
//выполнить если разница текущего значения милисекунд и прошлого значения больше или равно 60000(минуты)
if (currentMillis - previousMillis >= interval)
{
secundes=secundes+1; //прибавить минуту к общему счетчику минут
secundesA=secundesA-1;//отнять минуту от обратного отсчета
previousMillis = currentMillis;   //присваиваем переменной предыдущего значения текущее значение милисекунд
}
if (secundesA <=0){timerEND();}
  }
}


void cifri(int cifer)
{
switch(cifer)
{
//0-9
case 0: 
registerWriteA(shregA[0]);
registerWriteB(shregB[0]);
break;  
case 1: 
registerWriteA(shregA[0]);
registerWriteB(shregB[1]);
break;  
case 2: 
registerWriteA(shregA[0]);
registerWriteB(shregB[2]);
break;  
case 3: 
registerWriteA(shregA[0]);
registerWriteB(shregB[3]);
break;  
case 4: 
registerWriteA(shregA[0]);
registerWriteB(shregB[4]);
break;  
case 5: 
registerWriteA(shregA[0]);
registerWriteB(shregB[5]);
break;  
case 6: 
registerWriteA(shregA[0]);
registerWriteB(shregB[6]);
break;  
case 7: 
registerWriteA(shregA[0]);
registerWriteB(shregB[7]);
break;  
case 8: 
registerWriteA(shregA[0]);
registerWriteB(shregB[8]);
break;  
case 9: 
registerWriteA(shregA[0]);
registerWriteB(shregB[9]);
break;  
//10-19
case 10: 
registerWriteA(shregA[1]);
registerWriteB(shregB[0]);
break;  
case 11: 
registerWriteA(shregA[1]);
registerWriteB(shregB[1]);
break;  
case 12: 
registerWriteA(shregA[1]);
registerWriteB(shregB[2]);
break;  
case 13: 
registerWriteA(shregA[1]);
registerWriteB(shregB[3]);
break;  
case 14: 
registerWriteA(shregA[1]);
registerWriteB(shregB[4]);
break;  
case 15: 
registerWriteA(shregA[1]);
registerWriteB(shregB[5]);
break;  
case 16: 
registerWriteA(shregA[1]);
registerWriteB(shregB[6]);
break;  
case 17: 
registerWriteA(shregA[1]);
registerWriteB(shregB[7]);
break;  
case 18: 
registerWriteA(shregA[1]);
registerWriteB(shregB[8]);
break;  
case 19: 
registerWriteA(shregA[1]);
registerWriteB(shregB[9]);
break; 
//20-29
case 20: 
registerWriteA(shregA[2]);
registerWriteB(shregB[0]);
break;  
case 21: 
registerWriteA(shregA[2]);
registerWriteB(shregB[1]);
break;  
case 22: 
registerWriteA(shregA[2]);
registerWriteB(shregB[2]);
break;  
case 23: 
registerWriteA(shregA[2]);
registerWriteB(shregB[3]);
break;  
case 24: 
registerWriteA(shregA[2]);
registerWriteB(shregB[4]);
break;  
case 25: 
registerWriteA(shregA[2]);
registerWriteB(shregB[5]);
break;  
case 26: 
registerWriteA(shregA[2]);
registerWriteB(shregB[6]);
break;  
case 27: 
registerWriteA(shregA[2]);
registerWriteB(shregB[7]);
break;  
case 28: 
registerWriteA(shregA[2]);
registerWriteB(shregB[8]);
break;  
case 29: 
registerWriteA(shregA[2]);
registerWriteB(shregB[9]);
break;  
//30-39
case 30: 
registerWriteA(shregA[3]);
registerWriteB(shregB[0]);
break;  
case 31: 
registerWriteA(shregA[3]);
registerWriteB(shregB[1]);
break;  
case 32: 
registerWriteA(shregA[3]);
registerWriteB(shregB[2]);
break;  
case 33: 
registerWriteA(shregA[3]);
registerWriteB(shregB[3]);
break;  
case 34: 
registerWriteA(shregA[3]);
registerWriteB(shregB[4]);
break;  
case 35: 
registerWriteA(shregA[3]);
registerWriteB(shregB[5]);
break;  
case 36: 
registerWriteA(shregA[3]);
registerWriteB(shregB[6]);
break;  
case 37: 
registerWriteA(shregA[3]);
registerWriteB(shregB[7]);
break;  
case 38: 
registerWriteA(shregA[3]);
registerWriteB(shregB[8]);
break;  
case 39: 
registerWriteA(shregA[3]);
registerWriteB(shregB[9]);
break;  
//40-49
case 40: 
registerWriteA(shregA[4]);
registerWriteB(shregB[0]);
break;  
case 41: 
registerWriteA(shregA[4]);
registerWriteB(shregB[1]);
break;  
case 42: 
registerWriteA(shregA[4]);
registerWriteB(shregB[2]);
break;  
case 43: 
registerWriteA(shregA[4]);
registerWriteB(shregB[3]);
break;  
case 44: 
registerWriteA(shregA[4]);
registerWriteB(shregB[4]);
break;  
case 45: 
registerWriteA(shregA[4]);
registerWriteB(shregB[5]);
break;  
case 46: 
registerWriteA(shregA[4]);
registerWriteB(shregB[6]);
break;  
case 47: 
registerWriteA(shregA[4]);
registerWriteB(shregB[7]);
break;  
case 48: 
registerWriteA(shregA[4]);
registerWriteB(shregB[8]);
break;  
case 49: 
registerWriteA(shregA[4]);
registerWriteB(shregB[9]);
break;  
//50-59
case 50: 
registerWriteA(shregA[5]);
registerWriteB(shregB[0]);
break;  
case 51: 
registerWriteA(shregA[5]);
registerWriteB(shregB[1]);
break;  
case 52: 
registerWriteA(shregA[5]);
registerWriteB(shregB[2]);
break;  
case 53: 
registerWriteA(shregA[5]);
registerWriteB(shregB[3]);
break;  
case 54: 
registerWriteA(shregA[5]);
registerWriteB(shregB[4]);
break;  
case 55: 
registerWriteA(shregA[5]);
registerWriteB(shregB[5]);
break;  
case 56: 
registerWriteA(shregA[5]);
registerWriteB(shregB[6]);
break;  
case 57: 
registerWriteA(shregA[5]);
registerWriteB(shregB[7]);
break;  
case 58: 
registerWriteA(shregA[5]);
registerWriteB(shregB[8]);
break;  
case 59: 
registerWriteA(shregA[5]);
registerWriteB(shregB[9]);
break;  
//60-69
case 60: 
registerWriteA(shregA[6]);
registerWriteB(shregB[0]);
break;  
case 61: 
registerWriteA(shregA[6]);
registerWriteB(shregB[1]);
break;  
case 62: 
registerWriteA(shregA[6]);
registerWriteB(shregB[2]);
break;  
case 63: 
registerWriteA(shregA[6]);
registerWriteB(shregB[3]);
break;  
case 64: 
registerWriteA(shregA[6]);
registerWriteB(shregB[4]);
break;  
case 65: 
registerWriteA(shregA[6]);
registerWriteB(shregB[5]);
break;  
case 66: 
registerWriteA(shregA[6]);
registerWriteB(shregB[6]);
break;  
case 67: 
registerWriteA(shregA[6]);
registerWriteB(shregB[7]);
break;  
case 68: 
registerWriteA(shregA[6]);
registerWriteB(shregB[8]);
break;  
case 69: 
registerWriteA(shregA[6]);
registerWriteB(shregB[9]);
break;  
//70-79
case 70: 
registerWriteA(shregA[7]);
registerWriteB(shregB[0]);
break;  
case 71: 
registerWriteA(shregA[7]);
registerWriteB(shregB[1]);
break;  
case 72: 
registerWriteA(shregA[7]);
registerWriteB(shregB[2]);
break;  
case 73: 
registerWriteA(shregA[7]);
registerWriteB(shregB[3]);
break;  
case 74: 
registerWriteA(shregA[7]);
registerWriteB(shregB[4]);
break;  
case 75: 
registerWriteA(shregA[7]);
registerWriteB(shregB[5]);
break;  
case 76: 
registerWriteA(shregA[7]);
registerWriteB(shregB[6]);
break;  
case 77: 
registerWriteA(shregA[7]);
registerWriteB(shregB[7]);
break;  
case 78: 
registerWriteA(shregA[7]);
registerWriteB(shregB[8]);
break;  
case 79: 
registerWriteA(shregA[7]);
registerWriteB(shregB[9]);
break;  
//80-89
case 80: 
registerWriteA(shregA[8]);
registerWriteB(shregB[0]);
break;  
case 81: 
registerWriteA(shregA[8]);
registerWriteB(shregB[1]);
break;  
case 82: 
registerWriteA(shregA[8]);
registerWriteB(shregB[2]);
break;  
case 83: 
registerWriteA(shregA[8]);
registerWriteB(shregB[3]);
break;  
case 84: 
registerWriteA(shregA[8]);
registerWriteB(shregB[4]);
break;  
case 85: 
registerWriteA(shregA[8]);
registerWriteB(shregB[5]);
break;  
case 86: 
registerWriteA(shregA[8]);
registerWriteB(shregB[6]);
break;  
case 87: 
registerWriteA(shregA[8]);
registerWriteB(shregB[7]);
break;  
case 88: 
registerWriteA(shregA[8]);
registerWriteB(shregB[8]);
break;  
case 89: 
registerWriteA(shregA[8]);
registerWriteB(shregB[9]);
break;  
//90-99
case 90: 
registerWriteA(shregA[9]);
registerWriteB(shregB[0]);
break;  
case 91: 
registerWriteA(shregA[9]);
registerWriteB(shregB[1]);
break;  
case 92: 
registerWriteA(shregA[9]);
registerWriteB(shregB[2]);
break;  
case 93: 
registerWriteA(shregA[9]);
registerWriteB(shregB[3]);
break;  
case 94: 
registerWriteA(shregA[9]);
registerWriteB(shregB[4]);
break;  
case 95: 
registerWriteA(shregA[9]);
registerWriteB(shregB[5]);
break;  
case 96: 
registerWriteA(shregA[9]);
registerWriteB(shregB[6]);
break;  
case 97: 
registerWriteA(shregA[9]);
registerWriteB(shregB[7]);
break;  
case 98: 
registerWriteA(shregA[9]);
registerWriteB(shregB[8]);
break;  
case 99: 
registerWriteA(shregA[9]);
registerWriteB(shregB[9]);
break;  
//
default: 
registerWriteA(shregA[0]);
registerWriteB(shregB[0]);
break;  
}
}

Это обычный резистивный делитель напряжения, можно использовать любой номинал, но не желательно использовать с меньшим сопротивлением, вопервых ток через него возрастает, а вовторых падает точность.  Так как это делитель - то чтобы не править и не перенастраивать скетч, достаточно изменить постоянное сопротивление на равное переменнику (в действительности увеличивать оба сопротивления пропорционально, но в данном случае они просто одинаковы). Грубо говоря там на схеме переменное 10К и постоянное в противовес ему 10К, соответственно если ты возьмешь 50К то и противовес ему ставь такой-же, 50К, тогда не придется править скетч.

7

(1 ответов, оставленных в Технические вопросы)

По твоей схеме не пробовал, но я собирал себе простенький программатор на ft232rl и использовал выходы на нем по такой схеме:

X3    -    ft232         - ATmega168-20PU
1      - CTS(pin11)   - MISO (pin18)
2      - DSR(pin9)     - SCK (pin19)
3      - DCD(pin10)   - MOSI (pin17)
4      - R(pin6)         - RESET (pin1)

Разъем Х3 даю для сравнения (но можно использовать и его вместо программатора), пины ФТ232 это пины именно микросхемы а не твоего программатора, на программаторе смотри по названию выходов, пины атмеги указаны для ДИП корпуса, но для любого AVR микроконтроллера можно расположение этих выводов узнать по даташиту. Также использовал общее питание (от ЮСБ), но можно и только общюю землю по минусу.

Прошивал по вот этой статье:
http://freeduino.ru/arduino/isp.html
Чтобы узнать куда среда  ардуина иде положила хекс файл нажимал кнопку компиляции зажав шифт.

8

(7 ответов, оставленных в Технические вопросы)

можешь попробовать через емкостной делитель:
http://mogalkov.ath.cx/duino/AC220.jpg
Нечто подобное я собирал (нужен был компактный БП на 5в)
а так вот набросал схемку в протеусе:
http://mogalkov.ath.cx/duino/AC220LCD.jpg
если надо то вот архив с схемой в протеусе и скетчем:
http://mogalkov.ath.cx/duino/ACvoltmeter.zip
По вопросам безопасности я уже предупреждал. Но лишний раз подумать о безопасности не помешает.

9

(7 ответов, оставленных в Технические вопросы)

Дима пишет:

Ставь обыкновенный резистивный делитель напряжения и через диод (одна - положительная полуволна синусоидального напряжения) подавай на вход АЦП фридуины - самый простой способ.

Выпрямитель желательно ставить до делителя, для повышения точности.
Такой подход работать конечно будет, но не стоит забывать что напряжение - вещь относительная, и на резистивном делителе 5 вольт будет именно относительно этих двух контактов, но скажем относительно батареи, другой розетки или корпуса какого другого устройства там будут те-же 230, все-таки напряжение - это разность потенциалов. Лучше все-таки через трансформатор, пусть это более громоздко, зато безопаснее.

10

(27 ответов, оставленных в Технические вопросы)

nestandart пишет:

На каждый порт дуины по документации 40мА, но в реальности от 60мА дуина не подохнет.

Это если реле 1-2 , а если их 10 тогда через МК потечет ток минимум 0.5А  а это уже смерть МК.

наилучший вариант - реле+диод+транзистор

Согласен.
Но если нагрузок много то лучше ULN2003 .

Верно, 1-2 реле но я и писал минимум, да нагрузок много то лучше ULN2003, а для еще больших нагрузок можно взять полевые транзисторы, что нить типа MOSFET или IGBT (IRG7PSH73K10PBF, IGBT 1200В 220А http://lib.chipdip.ru/296/DOC000296980.pdf).

11

(27 ответов, оставленных в Технические вопросы)

nestandart пишет:

Для подключения реле шиелд не нужен, в минимуме - реле+диод

Реле+ диод ?!
Потребление тока , даже у самых , маломощных (индуктивных)  реле в разы превышает возможности МК!
Вы его спалите , таким образом.

Не совсем так, у того реле что я указывал номинальное потребление 90мА, но реальное (сам мерил, именно при подключении к дуине) 53мА. На каждый порт дуины по документации 40мА, но в реальности от 60мА дуина не подохнет. Но как я писал - это минимум и наилучший вариант - реле+диод+транзистор

nestandart пишет:

резистор 4К7 на ногу ресет.

От 1 до 10 К.
А можно вообще reset никуда не подключать.

4К7 как раз в диапозоне между 1К и 10К. Можно не подключать ресет, но тогда желательно отключить его фьюзами или перенастройть как обычный пин чтоб избежать самопроизвольной перезагрузки.

12

(27 ответов, оставленных в Технические вопросы)

ATMega168 и ATMega328 полностью совместимы с точки зрения кварца. Совместимость в данном случае зависит не от контроллеров а от среды Ардуино иде. 16Мгц.

13

(27 ответов, оставленных в Технические вопросы)

Да, можно. Все что нужно для минимума работы со скетчами ардуино: питание, кварц 16МГц, резистор 4К7 на ногу ресет.

14

(27 ответов, оставленных в Технические вопросы)

Каких токов? По грубым подсчетам 3КВт эт 9А напряжение сети 220, реле 834-1A-B-C 5V - 10A 277V AC - 10А при 270В. Тянет вполне. 3КВт - эт чайник кухонный.

Ну, существуют и аккумуляторы типа крона. Разъем 5в - это то что находится после 7805, стабилизированное напряжение - это когда оно не меняется, то-есть сказано 5В значит всегда 5, при подключении осцилографа - ровная прямая линия. Но это в идеале, на практике есть допуски. Открываем даташит на ATmega328 http://www.atmel.info/dyn/resources/pro … /8271S.pdf и видим в разделе
Speed Grade:
– 0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V
Сама freeduino nano на 16МГц значит параметры 20MHz @ 4.5 - 5.5V подходят, питание на разъем 5В не ниже 4.5В и не выше 5.5В. Имхо 5.5 и 5.6В разница не критична, работать должно.

16

(27 ответов, оставленных в Технические вопросы)

Естественно можно. Наиболее опримальное решение - реле.
Вот пример управления светом:http://freeduino.ru/forum/viewtopic.php?id=130
На выходе дуины 5в, но реле лучше и надежней контролить через транзистор. Для подключения реле шиелд не нужен, в минимуме - реле+диод, наилучший вариант - реле+диод+транзистор. Реле я использовал 834-1A-B-C 5V - 10A 277V AC, но выбор шел в основном изза цены и габаритов. Тебе на 2КВт потянет вполне.

Для датчиков температуры возьми 1ware ds18b20 или что-то подобное, вот тут почитай: http://robocraft.ru/blog/arduino/136.html

17

(9 ответов, оставленных в Технические вопросы)

Не очень люблю каменты писать в прогах, но попробую:

long previousMillis;/*переменная конечного времени*/
unsigned long currentMillis;/*Переменная начального времени*/
long vivod;/*результирующая переменная времени*/

long timerschet ()/* создаем функцию отсчета времени типа лонг*/
{
for (int i;i!=1;)/*для отчета нужен цыкл. цыкл до тех пор пока значение переменной i не равно 1 (HIGH)*/
{
unsigned long currentMillis = millis();/*присваиваем начальной переменной текущее
значение системного таймера*/
previousMillis = currentMillis - previousMillis;/*вычитаем из текущего таймера предыдущее значение
чтобы получить абсолбтное время с начала запуска таймера*/
i=digitalRead(7);/*gприсвоить переменной значение снятое с кнопки*/
}
return (previousMillis);/*завершить функцию и выдать в качестве результата переменную*/
}

void setup  ()/*стандартный сетуп*/
{
 
  pinMode(7,INPUT);
  Serial.begin(9600);
}

void loop()/*обычная петля*/
{
if (digitalRead(7)!=1)/*если на входе не 1(HIGH)*/
{
vivod=timerschet();/*присвоить переменной результирующее значение из функции*/
Serial.print(vivod);/*выдать значение на порт*/
}
}

Подобное решение я использовал в ик выключателе света: http://freeduino.ru/forum/viewtopic.php?id=130

18

(9 ответов, оставленных в Технические вопросы)

Для таймера в твоем случае лучше использовать for, и удобнее отдельной функцией:

long previousMillis;
unsigned long currentMillis;
long vivod;

long timerschet ()
{
for (int i;i!=1;)
{
unsigned long currentMillis = millis();
previousMillis = currentMillis - previousMillis;
i=digitalRead(7);
}
return (previousMillis);
}

void setup  ()
{
 
  pinMode(7,INPUT);
  Serial.begin(9600);
}

void loop()
{
if (digitalRead(7)!=1)
{
vivod=timerschet ();
Serial.print(vivod);
}
}

19

(9 ответов, оставленных в Технические вопросы)

Возможно мешает delay, ведь пока он выполняется микроконтроллер не принимает сигналов. Вообще логичнее было бы соорудить приемную часть на прерывании, но можно попробовать и так (точно не уверен, pulseIn никогда не использовал, сам в ик приемнике использовал таймер):

int pin = 7; 
unsigned long duration;

void setup()
{
  pinMode(pin, INPUT);
Serial.begin(9600);
}

void loop()
{
duration = 0;
duration = pulseIn(pin, HIGH);
if (duration>0) {Serial.print (duration);}
}

20

(9 ответов, оставленных в Технические вопросы)

На TSOP1736 и других им подобных - HIGH это отсутствие сигнала, LOW - наличие.

21

(7 ответов, оставленных в Технические вопросы)

Smog пишет:
noonv пишет:

не всё так просто :)
но вот например хак, который позволяет чуть увеличить доступное ОЗУ

Спасибо. Однако я думал, что можно как-нибудь напаять микросхему(мы) памяти и увеличить её скажем до 10 мегабайт. Видать не судьба :-)

Ну тут смотря какую память, ееprom вполне можно и напаять, но память для скетча не увеличишь, что в контроллере есть - то есть.

22

(7 ответов, оставленных в Технические вопросы)

Можно поменять контроллер, например вместо атмега168 поставить атмега328. Соответственно в ардуиноиде выбрать что у тебя на этом микроконтроллере.

Не совсем понимаю что ты хочешь. Если по минимуму - то забей на бутлоадер, он только мешает. Если очень нужен бутлоадер - лучше возьми готовую дуину. Так как выкинуть из схемы Arduino Mega 2560 ты сможешь только то что касается внешнего питания, ATmega8U2-MU можно заменить на тот-же ft232rl, CP2102 или любой другой чип USB-UART, но по цене на этом много не выиграешь.
Вообще исходить надо из того зачем оно тебе, если собираешься использовать плату для прототипирования или изучения работы с контроллером - лучше купи готовую.
Для определенного конечного устройства - собирай и шей по ISP.

При минимальном обвесе надо шить через ISP, выходы микросхемы SCK MOSI MISO RESET питание и землю смотришь по даташиту: http://www.atmel.com/dyn/resources/prod … oc2549.pdf. pl2303 кабель http://www.radiokot.ru/forum/viewtopic.php?t=14090 вроде подойдет. В Arduino IDE пишешь скетч, выбрав в настройках свою МС компилируешь (если нажать кнопку компиляции с шифтом снизу в окне логов можно увидеть путь к hex файлу), берешь хекс и шьешь программатором (в твоем случае видимо pl2303 кабель+PonyProg)

ATmega8U2-MU выполняет функцию USB-UART конвертера.

Вообщето такая уже есть: http://arduino.cc/en/Main/ArduinoBoardMega2560
Вот схема ее: http://arduino.cc/en/uploads/Main/ardui … ematic.pdf
Arduino IDE 022 ее поддерживает. Никто не мешает писать под нее в Arduino IDE, и шить через ISP. Минимальный обвес без доработки софта дуины - кварц 16МГц, резистор 10К ресет к плюсу.