По результатам поиска в Google - Arduino в Украине не нашлось! Пусть этот блог будет началом!!!

пятница, 22 января 2010 г.

Кофеварка - The End!

      Вчера (21.01.2010) закончил проект модернизации кофеварки Saeco Aroma и сегодня решил дописать рассказ об этом проекте. Ниже пойдут фотографии с комментариями и может как нибудь засниму видео... на веб камеру ноута.
После изготовления корпуса блока управления (монтирование в него экрана и кнопок) стало видно как туда поместить Arduino mini и плату с "обвязкой портов"...

       Никакая общая плата туда естественно не влазила. Кроме того из-за торчащего кварца даже крышка полностью не закрывалась. Поэтому я решил все делать на "соплях" МГТФ 0,05. Это мой любимый провод... не горит, не рвется, не ломается, легко зачищается и паяется... Правда редко продается.



Для соединения с  Arduino mini я использовал штырьковый разъем (не знаю как он там называется) и наклеил на него двухсторонним скотчем бумажную памятку с назначением портов, выводы же, как можно сильнее загнул в бок чтобы уменьшить высоту.
    Не забыл впаять и разъем для програмирования Arduino mini, чтобы потом не доставать ее туда-сюда...
 
  Когда МГТФ закончился в ход пошел шлейф в итоге все внутри корпуса.

     С прошивкой Arduino mini возникли небольшие сложности т.к. я нашел описание прошивки через плату Arduino Diecimila а у меня Duemilanove, но там все еще проще... просто соединяешь TX, RX, GND, +5v, RES с соответствующими выводами на плате Duemilanove (не забыв вынуть саму микросхему) и все получилось... Скажу сразу Arduino mini более тормознутая...



     На плате обвязки - пару резисторов, подстроечный резистор для ЛСД, кнопка эмулятор датчика температуры и светодиод для проверки подачи напряжения на насос кофеварки (для проверки работоспособности блока без кофеварки). Вроде про эту коробочку все... но туда еще потом пришлось залезть...
Спустя какое-то время я купил корпус и необходимые детали для исполнительного блока.

Корпус помещался в нишу кофеварки справа от наклейки, за проводом. Провода будут заходить в отверстие вместе с проводом питания.

Что у нас внутри? блок питания от Nokia по всему видно не аутентичный или изначальна хреновая разработка... напряжение на выходе 7-8 вольт... а пишут 5... поэтому в схему плавно влился L7805CV (стабилизатор напряжения на 5в) и пара конденсаторов 0.225 мкФ, он выглядывает из-за реле которое управляется драйвером ULN 2003A еще там схема понижения напряжения с 220в до 5в... и оптопара - (оптотранзистор 4N25). Предыдущий выбор MOC 3061 - не подошел... и доставил много хлопот т.к. он (оптосимистор с переходом через 0 как и без перехода через 0 - купленный позже) открывается, а потом не закрывается ожидая другую полярность напряжения или спад до 0.... чего у нас нет... замена его на оптотранзистор принесла еще два резистора.
Схема:

И кроме того дала вместо HIGH на выходе -  LOW.... вот тут пришлось не только менять программу, но и перекидывать резистор на входе Arduino с " - " на " + ".
Раз уж я коснулся программы, то она претерпела изменения!  Теперь она не зависит от времени протекания воды, а только от датчика температуры, как я изначально и хотел (горячая течет, не горячая не течет)!

// include the library code:
#include


// constants won't change. They're used here to

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
const int buttonPin = 6; // set the number of the select pushbutton pin
const int button2Pin = 8; // set the number of the pushbutton-temp pin
const int button3Pin = 9; // set the number of the START pushbutton
const int ledPin = 7; // set the number of the led-pump pin

// variables will change:
int val = 0;// variable for reading the select pushbutton status
int buttonState;// variable to hold the select pushbutton state
int val2 = 1; //variable for reading pushbutton-temp status
int button2State;// variable to hold the pushbutton-temp state
int button2State2 = 0;// variable to hold the pushbutton-temp continuously  (triger)
int start = 0; //variable for reading START pushbutton status
int button3State;// variable to hold the START pushbutton state
int button3State2;// variable to hold the START pushbutton state continuously
int buttonPresses = 0;// how many times the select pushbutton has been pressed (# of programm)
int water = 0; //portions of water per cup

void setup() {

  pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input
  pinMode(button2Pin, INPUT); // initialize the pushbutton-temp pin as an input
  pinMode(button3Pin, INPUT); // initialize the start pushbutton pin as an input
  pinMode(ledPin, OUTPUT); // initialize the ledPin - pump pin as an output

  lcd.begin(16, 2);// set up the LCD's number of rows and columns:
      lcd.setCursor(5, 0);  // set the cursor to (column, line)
      lcd.print("Privet"); // print "Privet"
      delay (500);
      lcd.setCursor(3, 1);
      lcd.print("Vyberi cofe");
      delay (500);

}

void loop() {
 
  val = digitalRead(buttonPin);    // read input value and store it in val
        delay (50);
        if (val != buttonState) // If the button state has changed...
            {if (val == HIGH) {buttonPresses++;} // check if the button is now pressed
             if (buttonPresses == 6){buttonPresses = 0;}
             button3State2=0; // reseting button3State2 to avoid starting flowing water without selected program
            // selecting program, printing name of program (tipe of cup), seting amount of water, printing amount of water 
             if (buttonPresses == 0) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("1 small"); lcd.setCursor(4, 1); water = 1; lcd.print("water - "); lcd.print(water);}
             if (buttonPresses == 1) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("2 big"); lcd.setCursor(4, 1); water = 6; lcd.print("water - "); lcd.print(water);}
             if (buttonPresses == 2) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("1 big"); lcd.setCursor(4, 1); water = 3; lcd.print("water - "); lcd.print(water);}
             if (buttonPresses == 3) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("2 middle"); lcd.setCursor(4, 1); water = 4; lcd.print("water - "); lcd.print(water);}
             if (buttonPresses == 4) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("1 middle"); lcd.setCursor(4, 1); water = 2; lcd.print("water - "); lcd.print(water);}
             if (buttonPresses == 5) {lcd.clear(); lcd.setCursor(5, 0); lcd.print("2 small"); lcd.setCursor(4, 1); water = 2; lcd.print("water - "); lcd.print(water);}
     
       }
  buttonState = val;

  val2 = digitalRead(button2Pin); // reading temp sensor of cofffe machine (220v) if lamp lights temp is ok!
         delay (50);

  button2State = val2;

  start = digitalRead(button3Pin);
          delay (50);
          if (start != button3State){if (start == HIGH) {if (water>0){button3State2=HIGH;}}}
  button3State = start;
   // cheks  if temp-ok? if progr selected?,, if start button was pressed?, opens water, turnes on triger  
  if (val2<1){if (water>0){if (button3State2>0){digitalWrite(ledPin, HIGH); button2State2=1;}}}
  // cheks  if temp- NOT ok? cheks triger (is pump working&)? close water, decreases number of water, print the rest of water or end message
  if (val2>0){if (button2State2>0){digitalWrite(ledPin, LOW);
                                   button2State2=0; water--; lcd.setCursor(4, 1); lcd.print("water - "); lcd.print(water);
                                  if (water==0) {lcd.clear(); lcd.setCursor(1, 0); lcd.print("Coffe GOTOV!!!");}}}
}

 
Далее подсоединение всего вместе

Для этого (чтобы не портить кофеварку) я сделал клеммы - переходники и припаял к ним МГТФ 0,5. Все вышло красиво и надежно!



в общем все выглядит теперь так и второй день используется!!!