Components and supplies
5 mm LED: Red
5 mm LED: Green
MLX90641
Buzzer
Resistor 1k ohm
Ultrasonic Sensor - HC-SR04 (Generic)
Jumper wires (generic)
5 mm LED: Yellow
Resistor 10k ohm
Arduino Nano R3
Custom PCB
Rotary Encoder with Push-Button
Standard LCD - 16x2 White on Blue
Tools and machines
Soldering iron (generic)
Solder Wire, Lead Free
Apps and platforms
Arduino IDE
Project description
Code
MLX90641_Buzzer Code
c_cpp
1/* Written by HuiQiao 2 */ 3 4 5 #include <EEPROM.h> 6#include <Wire.h> 7#include <LiquidCrystal.h> 8#include <Adafruit_MLX90614.h> 9#include "Adafruit_NeoPixel.h" 10#ifdef __AVR__ 11#include <avr/power.h> 12#endif 13 14 15 16 17LiquidCrystal lcd(6, 10, 9, 14, 15, 16); 18 19 20 21 22#define RGBPIN 4 23#define NUMPIXELS 4 24#define btnRIGHT 0 25#define btnUP 1 26#define btnDOWN 2 27#define btnLEFT 3 28#define btnSELECT 4 29#define btnSELECT1 6 30#define btnNONE 5 31#define BellStart 5 32#define CLOSEDIS 40 33Adafruit_MLX90614 mlx = Adafruit_MLX90614(); 34 35 36 37 38int musicpin=5; 39int bellFlag=0; 40int soundFlag=1; 41int startFlag=0; 42int TrigPin = 1; 43int EchoPin = 0; 44 45 46 47 48Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, RGBPIN, NEO_GRB + NEO_KHZ800); 49byte bell[8] = 50{ 51 B00010, 52 B00111, 53 B00111, 54 B00110, 55 B00111, 56 B10110, 57 B11110, 58 B01010 59}; 60byte bell1[8] = 61{ 62 B00001, 63 B00011, 64 B00100, 65 B01000, 66 B01000, 67 B01000, 68 B11111, 69 B00001 70}; 71 72byte bell2[8] = 73{ 74 B10000, 75 B11000, 76 B00100, 77 B00010, 78 B00010, 79 B00010, 80 B11111, 81 B10000 82}; 83byte bell3[8] = 84{ 85 B00001, 86 B00010, 87 B00100, 88 B01000, 89 B10000, 90 B11000, 91 B00111, 92 B00000 93}; 94byte bell4[8] = 95{ 96 B00001, 97 B00010, 98 B00100, 99 B01000, 100 B10000, 101 B11000, 102 B00111, 103 B00000 104}; 105byte bell5[8] = 106{ 107 B00000, 108 B00011, 109 B00111, 110 B11101, 111 B11101, 112 B00111, 113 B00011, 114 B00000 115}; 116byte bell6[8] = 117{ 118 B00001, 119 B00010, 120 B00100, 121 B01000, 122 B10000, 123 B11000, 124 B00111, 125 B00000 126}; 127byte freep[8] = 128{ 129 B00000, 130 B00000, 131 B00000, 132 B00000, 133 B00000, 134 B00000, 135 B00000, 136 B00000 137}; 138 139 140 141 142int mat1=0; 143int mat2=0; 144///////////////////////////////////////// 145struct bellTime{ 146 int thour; 147 int tmin; 148 int tsec; 149}; 150bellTime _bTime; 151bellTime _obTime; 152 153int wb_H=0; 154int wb_L=30; 155///////////////////////////////////////// 156void setup() { 157 158 int i; 159 160 float wTemp; 161 162 Serial.begin(9600); 163 164 pinMode (musicpin, OUTPUT); 165 166 pinMode (A0, INPUT); 167 168 pinMode (A1, INPUT); 169 170 pinMode (A2, INPUT); 171 172 pinMode (A3, INPUT); 173 174 pinMode (7, INPUT); 175 176 pinMode (8, INPUT); 177 178 pinMode(TrigPin, OUTPUT); 179 180 pinMode(EchoPin, INPUT); 181 182 mlx.begin(); 183 184 delay(100); 185 186 for(i=0;i<8;i++) 187 188 { 189 190 bell3[i] = ~bell1[i]; 191 192 bell4[i] = ~bell2[i]; 193 194 bell6[i] = ~bell5[i]; 195 196 } 197 198 lcd.createChar(0, bell); 199 200 lcd.createChar(1, bell1); 201 202 lcd.createChar(2, bell2); 203 204 lcd.createChar(3, bell3); 205 206 lcd.createChar(4, bell4); 207 208 lcd.createChar(5, bell5); 209 210 lcd.createChar(6, bell6); 211 212 lcd.begin(16, 2); 213 214 //////////////////////////////////// 215 216 wb_H = ReadCfg(0); 217 218 wb_L = ReadCfg(1); 219 220 wTemp = ((wb_H<<8)+wb_L)/10.0; 221 222 //////////////////////////////////// 223 224 char tmbuff[16]; 225 226 mat1 = 1; 227 228 lcd.setCursor(BellStart-3,1); 229 230 lcd.write(mat1); 231 232 mat2 = 2; 233 234 lcd.setCursor(BellStart-2,1); 235 236 lcd.write(mat2); 237 238 mat1 = 6; 239 240 lcd.setCursor(12,1); 241 242 lcd.write(mat1); 243 244 dtostrf(wTemp,2,1,tmbuff); 245 246 String s = String(tmbuff)+"*C"; 247 248 lcd.setCursor(BellStart,1); 249 250 lcd.print(s); 251 252 pixels.begin(); 253 254} 255 256int frmCnt=0; 257int crosPos=0; 258 259 260void loop() { 261 262 int frameDelay=25; 263 264 float boTemp; 265 266 float sum; 267 268 char tmbuff[2]; 269 270 char disbuff[16]; 271 272 String s; 273 274 char sHour[4]; 275 276 char sMin[4]; 277 278 char sSec[4]; 279 280 int i; 281 282 float distance; 283 284 285 286 287 // 10usTrigPin 288 289 digitalWrite(TrigPin, LOW); 290 291 delayMicroseconds(2); 292 293 digitalWrite(TrigPin, HIGH); 294 295 delayMicroseconds(10); 296 297 digitalWrite(TrigPin, LOW); 298 299 // 300 301 302 distance = pulseIn(EchoPin, HIGH) / 58.00; 303 304 Serial.print(distance); 305 306 Serial.print("cm"); 307 308 Serial.println(); 309 310 if(distance<10||distance>CLOSEDIS) 311 312 { 313 314 for( i=0;i<NUMPIXELS;i++){ 315 316 pixels.setPixelColor(i, pixels.Color(0,0,0)); 317 318 pixels.show(); 319 320 } 321 322 startFlag=0; 323 324 delay(1000); 325 326 return; 327 328 }else if(distance<CLOSEDIS) 329 330 { 331 332 for( i=0;i<NUMPIXELS;i++){ 333 334 pixels.setPixelColor(i, pixels.Color(200,255,0)); 335 336 pixels.show(); 337 338 } 339 340 startFlag = 1; 341 342 } 343 344 if(getKey()==btnSELECT) 345 346 { 347 SetClock(); 348 349 }else if(getKey()==btnLEFT) 350 351 { 352 soundFlag = 1; 353 354 mat1 = 5; 355 356 lcd.setCursor(12,1); 357 358 lcd.write(mat1); 359 360 }else if(getKey()==btnRIGHT) 361 362 { 363 soundFlag = 0; 364 365 mat1 = 6; 366 367 lcd.setCursor(12,1); 368 369 lcd.write(mat1); 370 371 } 372 373 if(startFlag) 374 375 { 376 sum=0.0; 377 378 if(startFlag==1) 379 380 { 381 s = "|"; 382 383 for(i=0;i<5;i++) 384 385 { 386 s+="-"; 387 388 sum+=mlx.readObjectTempC(); 389 390 delay(200); 391 392 lcd.setCursor(5,0); 393 394 lcd.print(s); 395 396 } 397 398 sum = sum/5.0; 399 400 dtostrf(sum,2,1,disbuff); 401 402 s = String(disbuff)+"*C; 403 404 lcd.setCursor(5,0); 405 406 lcd.print(s); 407 408 if((sum*10)>((wb_H<<8)+wb_L)) 409 410 { 411 for( i=0;i<NUMPIXELS;i++){ 412 413 pixels.setPixelColor(i, pixels.Color(255,0,0)); 414 415 pixels.show(); 416 417 } 418 Warnning(18); 419 420 }else{ 421 422 for( i=0;i<NUMPIXELS;i++){ 423 424 pixels.setPixelColor(i, pixels.Color(0,255,0)); 425 426 pixels.show(); 427 428 } 429 430 Warnning(2); 431 432 } 433 434 } 435 436 startFlag++; 437 438 if(startFlag==10) 439 440 startFlag=0; 441 } 442 443 delay(500); 444 445} 446void Warnning(int b) 447{ 448 int i; 449 450 for(i=0;i<b;i++) 451 452 { 453 if((i%2)==0) 454 { 455 mat1 = 3; 456 457 mat2 = 4; 458 459 }else{ 460 461 mat1 = 1; 462 463 mat2 = 2; 464 } 465 466 lcd.setCursor(BellStart-3,1); 467 468 lcd.write(mat1); 469 470 lcd.setCursor(BellStart-2,1); 471 472 lcd.write(mat2); 473 474 if(soundFlag) 475 476 { 477 478 digitalWrite(musicpin,(i%2)); 479 480 } 481 482 delay(1000/b); 483 } 484 485 digitalWrite(musicpin,0); 486 487 } 488// 489 490 491 492void SetClock(){ 493 494 int setCnt=0; 495 496 char tmbuff[16]; 497 498 String s; 499 500 int noact=0; 501 502 int aimDis = ((wb_H<<8)+wb_L); 503 504 float setVal; 505 506 crosPos = 1; 507 508 setCnt = 0; 509 510 lcd.setCursor(BellStart+crosPos+2,1); 511 512 lcd.blink(); 513 514 for(;;) 515 516 { 517 if(setCnt>3&&getKey()==btnSELECT1) 518 519 { 520 break; 521 } 522 523 if(getKey()==btnUP) 524 525 { 526 noact=0; 527 528 lcd.noBlink(); 529 530 if(aimDis<400) 531 532 aimDis++; 533 534 else 535 536 aimDis=0; 537 538 setVal = aimDis/10.0; 539 540 dtostrf(setVal,2,1,tmbuff); 541 542 s = String(tmbuff)+"*C"; 543 544 lcd.setCursor(BellStart+crosPos-1,1); 545 546 lcd.print(s); 547 548 lcd.setCursor(BellStart+crosPos+2,1); 549 550 lcd.blink(); 551 552 }else if(getKey()==btnDOWN) 553 554 { 555 noact=0; 556 557 lcd.noBlink(); 558 559 if(aimDis>0) 560 561 aimDis--; 562 563 else 564 565 aimDis=400; 566 567 setVal = aimDis/10.0; 568 569 dtostrf(setVal,2,1,tmbuff); 570 571 s = String(tmbuff)+"*C"; 572 573 lcd.setCursor(BellStart+crosPos-1,1); 574 575 lcd.print(s); 576 577 lcd.setCursor(BellStart+crosPos+2,1); 578 lcd.blink(); 579 580 }else if(getKey()==btnNONE) 581 582 { 583 noact++; 584 585 if(noact>50) 586 587 break; 588 589 } 590 591 delay(200); 592 593 setCnt++; 594 595 } 596 597 //RTC.begin(); 598 599 crosPos = 0; 600 601 lcd.noBlink(); 602 603 wb_H = aimDis>>8; 604 605 wb_L = aimDis&0xff; 606 607 WriteCfg(0,wb_H); 608 609 WriteCfg(1,wb_L); 610 611 Serial.println("set ok!"); 612 613} 614 615int getKey() { 616 617 if(!digitalRead(A0)) 618 619 { 620 delay(10); 621 622 if(!digitalRead(A0)) 623 624 return btnUP; 625 626 } 627 if(!digitalRead(A1)) 628 629 { 630 delay(10); 631 632 if(!digitalRead(A1)) 633 634 return btnRIGHT; 635 636 } 637 if(!digitalRead(A3)){ 638 639 delay(10); 640 641 if(!digitalRead(A3)) 642 643 return btnDOWN; 644 645 } 646 if(!digitalRead(A2)){ 647 648 delay(10); 649 650 if(!digitalRead(A2)) 651 652 return btnLEFT; 653 654 } 655 if(!digitalRead(7)) { 656 657 delay(10); 658 659 if(!digitalRead(7)) 660 661 return btnSELECT; 662 663 } 664 if(!digitalRead(8)) { 665 666 delay(10); 667 668 if(!digitalRead(8)) 669 670 return btnSELECT1; 671 672 } 673 return btnNONE; 674 675} 676 677unsigned char ReadCfg(unsigned char addr) 678 679 { 680 unsigned char val; 681 682 val = EEPROM.read(addr); 683 684 return val; 685 686 } 687 688 void WriteCfg(unsigned char addr,unsigned char val) 689 { 690 EEPROM.write(addr, val); 691 } 692
Downloadable files
Schematic for the project
Schematic for the project
Schematic for the project
Schematic for the project
Comments
Only logged in users can leave comments
WU_HuiQiao
0 Followers
•0 Projects
Table of contents
Intro
7
0