Instrumentation Monitoring and Control INST81000 DESIGN AND DEVELOPMENT OF A CONTROL PROGRAM FOR A HEAT SEALING STATION
Dependencies: mbed C12832 LCD_fonts
Heat_Sealer.cpp@0:aab1b8cb4c13, 2020-07-30 (annotated)
- Committer:
- alejandromontes
- Date:
- Thu Jul 30 20:18:36 2020 +0000
- Revision:
- 0:aab1b8cb4c13
- Child:
- 1:fac1f476e7d4
Alejandro Montes Instrumentation, Monitoring and Control PROJECT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alejandromontes | 0:aab1b8cb4c13 | 1 | #include "mbed.h" |
alejandromontes | 0:aab1b8cb4c13 | 2 | #include "C12832.h" |
alejandromontes | 0:aab1b8cb4c13 | 3 | #include "Arial12x12.h" |
alejandromontes | 0:aab1b8cb4c13 | 4 | #include "Arial_9.h" |
alejandromontes | 0:aab1b8cb4c13 | 5 | #include "Small_7.h" |
alejandromontes | 0:aab1b8cb4c13 | 6 | #include "Small_6.h" |
alejandromontes | 0:aab1b8cb4c13 | 7 | |
alejandromontes | 0:aab1b8cb4c13 | 8 | Serial pc(USBTX, USBRX); |
alejandromontes | 0:aab1b8cb4c13 | 9 | C12832 lcd(p5, p7, p6, p8, p11); |
alejandromontes | 0:aab1b8cb4c13 | 10 | AnalogIn Pot1(p19); |
alejandromontes | 0:aab1b8cb4c13 | 11 | AnalogIn Pot2(p20); |
alejandromontes | 0:aab1b8cb4c13 | 12 | PwmOut spkr(p26); |
alejandromontes | 0:aab1b8cb4c13 | 13 | PwmOut r (p23); |
alejandromontes | 0:aab1b8cb4c13 | 14 | PwmOut g (p24); |
alejandromontes | 0:aab1b8cb4c13 | 15 | PwmOut b (p25); |
alejandromontes | 0:aab1b8cb4c13 | 16 | BusOut leds(LED1,LED2,LED3,LED4); |
alejandromontes | 0:aab1b8cb4c13 | 17 | Timer timer1; |
alejandromontes | 0:aab1b8cb4c13 | 18 | InterruptIn joystickcenter(p14); |
alejandromontes | 0:aab1b8cb4c13 | 19 | InterruptIn button(p9); |
alejandromontes | 0:aab1b8cb4c13 | 20 | float force, temperature; |
alejandromontes | 0:aab1b8cb4c13 | 21 | int k,v; |
alejandromontes | 0:aab1b8cb4c13 | 22 | |
alejandromontes | 0:aab1b8cb4c13 | 23 | // HMI function. Interface to control and initiate the system |
alejandromontes | 0:aab1b8cb4c13 | 24 | void HMI(){ |
alejandromontes | 0:aab1b8cb4c13 | 25 | |
alejandromontes | 0:aab1b8cb4c13 | 26 | pc.printf("HEAT SEAL OPERATION\n TO START OPERATION PRESS 's'\n FOR SET UP PRESS 'p'"); |
alejandromontes | 0:aab1b8cb4c13 | 27 | lcd.locate(10,0); |
alejandromontes | 0:aab1b8cb4c13 | 28 | lcd.set_font((unsigned char*)Arial12x12); |
alejandromontes | 0:aab1b8cb4c13 | 29 | lcd.printf("HEAT SEAL\n"); |
alejandromontes | 0:aab1b8cb4c13 | 30 | char c = pc.getc(); |
alejandromontes | 0:aab1b8cb4c13 | 31 | |
alejandromontes | 0:aab1b8cb4c13 | 32 | if(c=='s'){ |
alejandromontes | 0:aab1b8cb4c13 | 33 | timer1.start(); // start timer1 counting |
alejandromontes | 0:aab1b8cb4c13 | 34 | pc.printf("CYLCE STARTED\n"); |
alejandromontes | 0:aab1b8cb4c13 | 35 | lcd.locate(85,0); |
alejandromontes | 0:aab1b8cb4c13 | 36 | lcd.set_font((unsigned char*)Small_7); |
alejandromontes | 0:aab1b8cb4c13 | 37 | lcd.printf("STARTED\n"); |
alejandromontes | 0:aab1b8cb4c13 | 38 | } |
alejandromontes | 0:aab1b8cb4c13 | 39 | if(c=='p') { |
alejandromontes | 0:aab1b8cb4c13 | 40 | pc.printf("SYSTEM READY\n"); |
alejandromontes | 0:aab1b8cb4c13 | 41 | lcd.locate(85,0); |
alejandromontes | 0:aab1b8cb4c13 | 42 | lcd.set_font((unsigned char*)Small_7); |
alejandromontes | 0:aab1b8cb4c13 | 43 | lcd.printf("READY!!\n"); |
alejandromontes | 0:aab1b8cb4c13 | 44 | } |
alejandromontes | 0:aab1b8cb4c13 | 45 | } |
alejandromontes | 0:aab1b8cb4c13 | 46 | |
alejandromontes | 0:aab1b8cb4c13 | 47 | //Cycle within specs |
alejandromontes | 0:aab1b8cb4c13 | 48 | void good(){ |
alejandromontes | 0:aab1b8cb4c13 | 49 | leds=0xf; |
alejandromontes | 0:aab1b8cb4c13 | 50 | wait(0.5); |
alejandromontes | 0:aab1b8cb4c13 | 51 | leds=!leds; |
alejandromontes | 0:aab1b8cb4c13 | 52 | } |
alejandromontes | 0:aab1b8cb4c13 | 53 | |
alejandromontes | 0:aab1b8cb4c13 | 54 | //Cycle out of Specs |
alejandromontes | 0:aab1b8cb4c13 | 55 | void bad(){ |
alejandromontes | 0:aab1b8cb4c13 | 56 | spkr.period(5.0/2000); |
alejandromontes | 0:aab1b8cb4c13 | 57 | spkr=(0.5); |
alejandromontes | 0:aab1b8cb4c13 | 58 | wait(0.5); |
alejandromontes | 0:aab1b8cb4c13 | 59 | spkr=0.0; |
alejandromontes | 0:aab1b8cb4c13 | 60 | } |
alejandromontes | 0:aab1b8cb4c13 | 61 | |
alejandromontes | 0:aab1b8cb4c13 | 62 | // Joystick centre button. Activates the Emergency stop. System require Reset after E-stop activated. |
alejandromontes | 0:aab1b8cb4c13 | 63 | void flip() { |
alejandromontes | 0:aab1b8cb4c13 | 64 | timer1.stop(); |
alejandromontes | 0:aab1b8cb4c13 | 65 | pc.printf("CYLCE STOPPED\n"); |
alejandromontes | 0:aab1b8cb4c13 | 66 | lcd.locate(85,0); |
alejandromontes | 0:aab1b8cb4c13 | 67 | lcd.set_font((unsigned char*)Small_7); |
alejandromontes | 0:aab1b8cb4c13 | 68 | lcd.printf("STOPPED\n"); |
alejandromontes | 0:aab1b8cb4c13 | 69 | r.period(0.001); |
alejandromontes | 0:aab1b8cb4c13 | 70 | g=1; |
alejandromontes | 0:aab1b8cb4c13 | 71 | r=0; |
alejandromontes | 0:aab1b8cb4c13 | 72 | wait(2); |
alejandromontes | 0:aab1b8cb4c13 | 73 | timer1.reset(); |
alejandromontes | 0:aab1b8cb4c13 | 74 | } |
alejandromontes | 0:aab1b8cb4c13 | 75 | |
alejandromontes | 0:aab1b8cb4c13 | 76 | |
alejandromontes | 0:aab1b8cb4c13 | 77 | // HEAT SEAL OPERATION |
alejandromontes | 0:aab1b8cb4c13 | 78 | int main(){ |
alejandromontes | 0:aab1b8cb4c13 | 79 | |
alejandromontes | 0:aab1b8cb4c13 | 80 | k=1; |
alejandromontes | 0:aab1b8cb4c13 | 81 | v=1; |
alejandromontes | 0:aab1b8cb4c13 | 82 | HMI(); |
alejandromontes | 0:aab1b8cb4c13 | 83 | joystickcenter.rise(&flip); |
alejandromontes | 0:aab1b8cb4c13 | 84 | button.mode(PullUp); |
alejandromontes | 0:aab1b8cb4c13 | 85 | button.rise(&flip); |
alejandromontes | 0:aab1b8cb4c13 | 86 | |
alejandromontes | 0:aab1b8cb4c13 | 87 | while(1){ |
alejandromontes | 0:aab1b8cb4c13 | 88 | |
alejandromontes | 0:aab1b8cb4c13 | 89 | r=b=1; |
alejandromontes | 0:aab1b8cb4c13 | 90 | force=Pot1*5500; |
alejandromontes | 0:aab1b8cb4c13 | 91 | temperature=Pot2*300+30; |
alejandromontes | 0:aab1b8cb4c13 | 92 | lcd.locate(0,12); |
alejandromontes | 0:aab1b8cb4c13 | 93 | lcd.set_font((unsigned char*)Small_7); |
alejandromontes | 0:aab1b8cb4c13 | 94 | lcd.printf("Force=%.1fN\n",force); |
alejandromontes | 0:aab1b8cb4c13 | 95 | lcd.locate(70,12); |
alejandromontes | 0:aab1b8cb4c13 | 96 | lcd.set_font((unsigned char*)Small_7); |
alejandromontes | 0:aab1b8cb4c13 | 97 | lcd.printf("Temp=%.1fC\n",temperature); |
alejandromontes | 0:aab1b8cb4c13 | 98 | |
alejandromontes | 0:aab1b8cb4c13 | 99 | if(force>=4700.0 && temperature>=230.0 && timer1.read()>=5.0){ |
alejandromontes | 0:aab1b8cb4c13 | 100 | good(); |
alejandromontes | 0:aab1b8cb4c13 | 101 | lcd.locate(15,24); |
alejandromontes | 0:aab1b8cb4c13 | 102 | lcd.set_font((unsigned char*)Small_6); |
alejandromontes | 0:aab1b8cb4c13 | 103 | lcd.printf("Pass=%d\n",k); |
alejandromontes | 0:aab1b8cb4c13 | 104 | k++; |
alejandromontes | 0:aab1b8cb4c13 | 105 | timer1.reset(); |
alejandromontes | 0:aab1b8cb4c13 | 106 | } |
alejandromontes | 0:aab1b8cb4c13 | 107 | else if(timer1.read()>=5.0){ |
alejandromontes | 0:aab1b8cb4c13 | 108 | bad(); |
alejandromontes | 0:aab1b8cb4c13 | 109 | lcd.locate(70,24); |
alejandromontes | 0:aab1b8cb4c13 | 110 | lcd.set_font((unsigned char*)Small_6); |
alejandromontes | 0:aab1b8cb4c13 | 111 | lcd.printf("Fail=%d\n",v); |
alejandromontes | 0:aab1b8cb4c13 | 112 | v++; |
alejandromontes | 0:aab1b8cb4c13 | 113 | timer1.reset(); |
alejandromontes | 0:aab1b8cb4c13 | 114 | } |
alejandromontes | 0:aab1b8cb4c13 | 115 | } |
alejandromontes | 0:aab1b8cb4c13 | 116 | } |