Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
dfreeman
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. október 28. szombat, 20:31

Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: dfreeman »

Sziasztok!

Szinte most kezdtem foglalkozni az arduino világával, nagyon tetszik és rengeteg tervem volna vele.
Az első dolog amit kezdésként szerettem volna megvalósítani vele az egy elpusztult Whirlpool szárítógép vezérlése.
Volt aki már csinált ilyet (az eredeti szerzője a kódnak : jason, egy blogger) az ő kódja vázlatilag azonos azzal amire nekem szükségem volna.
A kód nyilvános és szerettem is volna kipróbálni... DE... az a bizonyos DE... amikor ellenőriztem a kódot, a fordítás hibaüzenettel meg is állt.

Ime a kód:

Kód: Egész kijelölése

 /* PINS */
#define MOTOR_DIR 5
#define MOTOR_EN  6
#define HEATER_EN    7
#define NTC1     A0
#define NTC2     A1
#define FULL    13
#define BUTTON  12
#define FAIL_X        9
#define OK_X          8
#define OK_PAUSE      4
#define DRY_NOIDEA   10
#define COOL_FILTER   3
#define END_FULL      2

/* Configuration */
int max_temp = 510;
int min_temp = max_temp - 150;


void lightPlay( int spins )
{
       for( int x=0;x
              digitalWrite(OK_X, 0);
              digitalWrite(FAIL_X, 1);

              digitalWrite(DRY_NOIDEA, 1);  digitalWrite(END_FULL, 0);
              delay(100);   
              digitalWrite(END_FULL, 1);digitalWrite(COOL_FILTER, 0);
              delay(100);
              digitalWrite(COOL_FILTER, 1); digitalWrite(DRY_NOIDEA, 0);
              delay(100);

              digitalWrite(OK_X, 1);
              digitalWrite(FAIL_X, 0);


              delay(100);   
              digitalWrite(DRY_NOIDEA, 1);digitalWrite(COOL_FILTER, 0);
              delay(100);
              digitalWrite(COOL_FILTER, 1); digitalWrite(END_FULL, 0);
              delay(100);
       }
}


#define LED_OK      0x10
#define LED_DRYING  (0x1 | LED_OK)
#define LED_COOLING (0x2 | LED_OK)
#define LED_END     (0x4 | LED_OK)
#define LED_PAUSED  (0x8 | LED_OK)

#define LED_FAN        (0x2 | LED_OK)
#define LED_FAN_HEAT   (0x3 | LED_OK)
#define LED_NOIDEA  0x1
#define LED_FILTER  0x2
#define LED_FULL    0x4

void set_led_status( int led_status )
{
       if(  led_status & LED_OK )  {
              digitalWrite(OK_X, 0);
              digitalWrite(FAIL_X, 1);
       }
       else {
              digitalWrite(OK_X, 1);
              digitalWrite(FAIL_X, 0);
       }
       digitalWrite(DRY_NOIDEA, led_status&1 ? 0 : 1);
       digitalWrite(COOL_FILTER, led_status&2 ?0 : 1);
       digitalWrite(END_FULL,led_status&4 ? 0 : 1 );
       digitalWrite(OK_PAUSE, led_status&8 ? 0 : 1);
}



void setup()
{
       Serial.begin(9600);

       pinMode(MOTOR_DIR, OUTPUT); 
       pinMode(MOTOR_EN, OUTPUT); 
       pinMode(HEATER_EN, OUTPUT); 
       pinMode(NTC1, INPUT); 
       pinMode(NTC1, INPUT); 
       pinMode(FULL, INPUT);
       pinMode(BUTTON, INPUT);  

       pinMode(FAIL_X, OUTPUT);
       pinMode(OK_X, OUTPUT);

       pinMode(OK_PAUSE, OUTPUT);
       pinMode(DRY_NOIDEA, OUTPUT);
       pinMode(COOL_FILTER, OUTPUT);
       pinMode(END_FULL, OUTPUT);

       /* All lights off */
       digitalWrite(OK_X, 0);
       digitalWrite(FAIL_X, 1);
       digitalWrite(OK_PAUSE, 1);
       digitalWrite(END_FULL, 1);
       digitalWrite(COOL_FILTER, 1);
       digitalWrite(DRY_NOIDEA, 1);

       Serial.println("Hello");
       lightPlay( 5 );  

}

typedef enum {
  UNDEFINED,
  READY,
  RUN,
  RUN_SPIN_HEAT,
  RUN_SPIN_NO_HEAT,
  FULL_PAUSE,
  REFRESH_SPIN_NO_HEAT,
} STATE;

STATE state = UNDEFINED;

int ntc1;
int ntc2;
int full;
int button_up;
int button_last;
int duration = 0;
 
void enter_ready()
{
    set_led_status( LED_PAUSED );

    digitalWrite(HEATER_EN, 0);
   
    digitalWrite(MOTOR_DIR, 0);   
    digitalWrite(MOTOR_EN, 0 );   
}

void enter_run()
{
   set_led_status( LED_FAN );

    digitalWrite(HEATER_EN, 0);

    digitalWrite(MOTOR_DIR, 0);   
    digitalWrite(MOTOR_EN, 1 );
  
}

void enter_run_spin_heat()
{
    digitalWrite(HEATER_EN, 1);
 
    set_led_status( LED_FAN_HEAT );
}

void enter_run_spin_no_heat()
{
    digitalWrite(HEATER_EN, 0);
 
    set_led_status( LED_FAN );
}

void enter_full_pause()
{
    digitalWrite(HEATER_EN, 0);
   
    digitalWrite(MOTOR_DIR, 0);   
    digitalWrite(MOTOR_EN, 0 );
 
    set_led_status( LED_FULL );
}

void enter_refresh_spin_no_heat()
{
    digitalWrite(HEATER_EN, 0);
   
    digitalWrite(MOTOR_DIR, 0);   
    digitalWrite(MOTOR_EN, 1 );
 
    set_led_status( LED_FAN | LED_END );
}

int do_ready()
{
  if( full ) {
    return FULL_PAUSE;
  }
  if( button_up ) {
    return RUN;
  }
  return state;
}

int do_run()
{
  if( button_up ) {
    return REFRESH_SPIN_NO_HEAT;
  }
  if( duration > 3 ) {
    if( full ) {
      return FULL_PAUSE;
    } 
    else {
      if( ntc1 < max_temp ){
        return RUN_SPIN_HEAT;      
      }else {
       return RUN_SPIN_NO_HEAT;
      } 
    }
  }
  return state;
}

int do_run_spin_heat()
{
  if( full ) {
    return RUN;
  }

  if( button_up ) {
    return REFRESH_SPIN_NO_HEAT;
  }

  if( ntc1 > max_temp ) {
    return RUN_SPIN_NO_HEAT;
  }

  return state;
}

int do_run_spin_no_heat()
{
  if( full ) {
    return RUN;
  }

  if( button_up ) {
    return REFRESH_SPIN_NO_HEAT;
  }

  if( ntc1 < min_temp ) {
     return RUN_SPIN_HEAT;
  }

  return state;
}

int do_full_pause()
{
  if( button_up && !full ) {
    return RUN;
  }
  return state;
}

int do_refresh_spin_no_heat()
{
  if( button_up ) {
    return READY;
  }
  if( duration > 10*60 ) {
    return READY;  
  }
  return state;
}

void loop()
{
       ntc1    = analogRead( NTC1 );
       ntc2    = analogRead( NTC2 );
       full    = digitalRead( FULL );

  /* Handle State */
  int new_state;
  switch( state )
  {
    case READY:
      new_state = do_ready();
      break;

    case RUN:
      new_state = do_run();
      break; 
     
    case RUN_SPIN_HEAT:
      new_state = do_run_spin_heat();
      break;

    case RUN_SPIN_NO_HEAT:
      new_state = do_run_spin_no_heat();
      break;

    case FULL_PAUSE:
      new_state = do_full_pause();
      break;

    case REFRESH_SPIN_NO_HEAT:
      new_state = do_refresh_spin_no_heat();
      break;

    case UNDEFINED:
    default:
    new_state = READY;
      break;
  }

  /* Handle State transition */
  if( new_state != state )
  {
    switch( new_state )
    {
      case READY:
        enter_ready();
        break;

      case RUN:
        enter_run();
        break; 

      case RUN_SPIN_HEAT:
        enter_run_spin_heat();
        break;

      case RUN_SPIN_NO_HEAT:
        enter_run_spin_no_heat();
        break;

      case FULL_PAUSE:
        enter_full_pause();
        break;

      case REFRESH_SPIN_NO_HEAT:
        enter_refresh_spin_no_heat();
        break;

      default:
        break;
    }
    state = new_state;
    duration = 0;
  }

  button_up = 0;
  for(int i=0;i
    int button  = digitalRead( BUTTON );
    button_up |= ( button==0 && button_last == 1 );
     button_last = button;
      delay(100);    
    if( button_up ) {
     break;
    }
  }


    Serial.print(state);Serial.print("\t");
    Serial.print(ntc1);Serial.print("\t");
    Serial.print(ntc2);Serial.print("\t");
    Serial.print(full);Serial.print("\t");
    Serial.print(button_up);Serial.print("\n");
    duration++;
}
1.8.5 verziójú arduinoval kezdtem, de próbáltam régebbi verziójú arduionval is (1.0).

És itt a hiba üzenet:

Kód: Egész kijelölése

sketch_oct29a.cpp: In function 'void lightPlay(int)':
sketch_oct29a:23: error: expected `;' before 'digitalWrite'
sketch_oct29a:23: error: expected `)' before ';' token
sketch_oct29a.cpp: At global scope:
sketch_oct29a:43: error: expected declaration before '}' token
Mivel nagyon kezdő vagyok a programozás világába, így fogalmam sincs hogy mi lehet a probléma. Kéredztem a kód szerzőjét is, de nem kaptam választ. Megpróbáltam a kézikönyv alapján is megérteni a problémát de valamit szerintem nagyon elnézek.
A kód magába teljesen értelemszerű és tudnám is hogy hogyan módosítsam az én gépemhez, de sajnos ennél megakadtam.
Minden segítséget szívesen fogadok.

Köszönöm
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: Robert »

A hivatkozott eljárás hiányos:

Kód: Egész kijelölése

Void lightPlay( int spins )
{
       for( int x=0;x....;....){
              digitalWrite(OK_X, 0);
              digitalWrite(FAIL_X, 1);

              digitalWrite(DRY_NOIDEA, 1);  digitalWrite(END_FULL, 0);
              delay(100);   
              digitalWrite(END_FULL, 1);digitalWrite(COOL_FILTER, 0);
              delay(100);
              digitalWrite(COOL_FILTER, 1); digitalWrite(DRY_NOIDEA, 0);
              delay(100);

              digitalWrite(OK_X, 1);
              digitalWrite(FAIL_X, 0);


              delay(100);   
              digitalWrite(DRY_NOIDEA, 1);digitalWrite(COOL_FILTER, 0);
              delay(100);
              digitalWrite(COOL_FILTER, 1); digitalWrite(END_FULL, 0);
              delay(100);
       }
}
Az elején jelölve:
for( int x=0;xx....;....){

Azaz a ciklus menjen 0....x? -ig (hiányzik a vége), és a lépésköz:
https://www.arduino.cc/en/Reference/For
Azaz pl a sorod így nézne ki:

Kód: Egész kijelölése

for (int x=0; x <= 255; x++){
http://www.tavir.hu - a gazda :)
dfreeman
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. október 28. szombat, 20:31

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: dfreeman »

Na erre biztos, hogy csak 1 hónap múlva jöttem volna rá.
Nagyon köszönöm a gyors választ, ki is próbáltam a kódot, sajnos több sebből vérzik ez a program. Kijavítva még több hiba van a kódba ellenőrzésnél.
Ezzel el leszek egy darabig. Úgy néz ki mintha szándékosan töröltek volna kódtöredékeket :(

Kód: Egész kijelölése

button_up |= ( button == 0 & amp; & button_last == 1 );
Ahogy nézem az "amp" dekralárása is hiányzik.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: Robert »

Nem. A & az a HTML kódba beillesztett kódbeli nem standard karakter ISO-8859 átírata:
& megfelel < jelnek.


Amúgy mi az eredeti oldal linkje?
http://www.tavir.hu - a gazda :)
dfreeman
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. október 28. szombat, 20:31

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: dfreeman »

Na ebből látszik, hogy van mit bepótolni.
Itt is van:
http://jtumbledryer.blogspot.hu/p/pins- ... toren.html

Ezek szerint ezeket átjavítva akár még működhet is?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: Robert »

Működhet - de tele van hibával....
Azaz hiányoznak kisebb-nagyobb jelek, zárójelek.
Plusz logikai leírás/vázlat sincs.

Biztosan ezen akarod megtanulni ?:)
http://www.tavir.hu - a gazda :)
dfreeman
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. október 28. szombat, 20:31

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: dfreeman »

Kedves Róbert!

Én teljes mértékben hallgatok rád, (hiszen te vagy a tanbáá :) ) ha te azt mondod, hogy kezdjem előröl, akkor így is lesz.
Logikai leírása tényleg nincs a dolognak, viszont a maga a vezérlő panel ill. maga a gép sokban hasonlít az én gépemre.
Maga a vázlata meg van, hogy hogy kellene működnie, mit kéne produkálnia. Az eredeti vezérlővel az volt a baj, hogy a szokásos széria hiba
előjött rajta (a vezérlő táprendszere kifeküdt, kijavítottam) csak sajnos az eredeti AVR is tönkre ment benne. Az eredeti hex-et meg képtelenség
megszerezni. Ezzel eltöltöttem 2 hónapot. Mivel nem szeretném a gép előlapját módosítani, nagy valószínűséggel érdemes volna egy teljesen új panelt csinálnom, amibe adaptálni tudom a NANO-t. A reléknek és a csatlakozóknak a helyét meghagynám viszont ezt a megbízhatatlan tápot biztos lecserélem. Ha teljesen előröl kezdem akkor szerinted hogyan kezdjek hozzá? Számítok a segítségedre.

Nagyon köszönöm az eddigieket is.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: Robert »

Ami a buktatója:
- védelmek/zavarérzékenységek kezelése
- tápvédelmek kezelése
- rendellenes tervezhető működés kezelése (nyomógombbal beavatkozás, áramszünet, meghiubásodó alkatrész következmény)
- előre nem tervezhető hibák kezelése (paraméter elállítódása, program "eltévedés")
- user error (hibás beállítás, hibás program, szőke-teszt)
- milyen beépített védelem van és mi az amit _utólag_ kellene belerakni?

És amit beletennék:
- eseménylogolás
- külső vezérlés/beavatkozás/kontroll kialakítása (Etrhernet/WiFi/Modbus)


A programtervezés:
- a rendszer alapműködési diagrammja és a kijelző/kezelőfelület ezzel összefüggésben,
- teljes felhazsnálói követelmény készítése és tesztelése,
- ha hálózati eszköz/vezérlés, akkor termék vagy saját hobbiként készülő az eszköz?
http://www.tavir.hu - a gazda :)
dfreeman
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2017. október 28. szombat, 20:31

Re: Kondenzációs szárítógép vezérlés Arduino Nano v3-mal

Hozzászólás Szerző: dfreeman »

Akkor itt az ideje atomjaira robbantani a gépet és mindent feljegyezni :)

Köszönöm és jelentkezek
Válasz küldése