• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wtam wszystkich (Arduino Uno Lutownica SMD)
#1
Witam.
Z Arduino bawię się przelotnie od 2 lat (ale nadal jestem noob ), wykonując już czyjeś projekty, jak laser dla kota na serwo motorach.
Tym razem chciałem zrobić coś od podstaw, a mianowicie domową płytę grzewczą do lutowania jednostronnych układów smd wykorzystując do tego Arduino Uno, Max6675, przekażnik, potencjometr, lcd HD44780 16x2 z I2C oraz stare żelazko.
Kod to składak z podglądniętych rozwiązań, o ile się nie mylę to z czterech.
Kod:
#include <max6675.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>

#define BACKLIGHT_PIN 3

LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);

int soPin = 13;// SO=Serial Out
int csPin = 12;// CS = chip select CS pin
int sckPin = 11;// SCK = Serial Clock pin
int przekaznik = 2;
int potencjometr = A0;
int stanPotencjometru;
int ustawionaTemperatura;
int temperatura;


MAX6675 thermocouple(sckPin, csPin, soPin);

void setup()
{
  pinMode(przekaznik, OUTPUT);
  pinMode(potencjometr, INPUT);
  lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(1, 0);
  lcd.print("LUTOWNICA  SMD");
  lcd.setCursor(3, 1);
  lcd.print("wersja 0.3");
  delay(5000);
  lcd.clear();
  }

void loop()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("JEST:");
  lcd.setCursor(7,0); 
  lcd.print(temperatura);
  lcd.setCursor(14, 0);
  lcd.print((char)223);   
  lcd.setCursor(15, 0);
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("MA BYC:");
  lcd.setCursor(9,1); 
  lcd.print(ustawionaTemperatura);
  lcd.setCursor(14, 1);
  lcd.print((char)223);
  lcd.setCursor(15, 1);
  lcd.print("C");

  temperatura = thermocouple.readCelsius();
  stanPotencjometru = analogRead(potencjometr);
  ustawionaTemperatura = map(stanPotencjometru, 0, 1023, 0, 500);

  if (temperatura < ustawionaTemperatura) {
    digitalWrite(przekaznik, HIGH);
  }
  else {
    digitalWrite(przekaznik, LOW);
  }
delay(500);
}

Jedyny problem który napotkałem rozwiązałem przez dodanie delay(500)  na końcu pętli ale to spowodowało mruganie LCD.

Przed tym rozwiązaniem nie odczytywał w ogóle temperatury oraz jak ustawiałem potencjometrem temperaturę od 0 do 500, a potem wracałem z powrotem do zera na wyświetlaczu było widać poprzednie cyfry np. zamiast 0 było 034.

Przerobiłem kod ale wrócił problem z wyświetlaniem zbędnych liczb ..
Kod:
#include <max6675.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


#define BACKLIGHT_PIN 3

LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);

int soPin = 13;// SO=Serial Out
int csPin = 12;// CS = chip select CS pin
int sckPin = 11;// SCK = Serial Clock pin
int przekaznik = 2;
int potencjometr = A0;
int stanPotencjometru;
int ustawionaTemperatura;
int temperatura;

MAX6675 thermocouple(sckPin, csPin, soPin);

void setup()
{
  pinMode(przekaznik, OUTPUT);
  pinMode(potencjometr, INPUT);
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.setCursor(1, 0);
  lcd.print("LUTOWNICA  SMD");
  lcd.setCursor(3, 1);
  lcd.print("wersja 0.6");
  delay(5000);
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("JEST:");
  lcd.setCursor(14, 0);
  lcd.print((char)223);    
  lcd.setCursor(15, 0);
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("MA BYC:");
  lcd.setCursor(14, 1);
  lcd.print((char)223);
  lcd.setCursor(15, 1);
  lcd.print("C");
  }

void loop()
{

  temperatura = thermocouple.readCelsius();
  stanPotencjometru = analogRead(potencjometr);
  ustawionaTemperatura = map(stanPotencjometru, 0, 1023, 0, 300);

  lcd.setCursor(9,0);  
  lcd.print(temperatura);
  lcd.setCursor(9,1);  
  lcd.print(ustawionaTemperatura);

  if (temperatura < ustawionaTemperatura) {
    digitalWrite(przekaznik, HIGH);
  }
  else {
    digitalWrite(przekaznik, LOW);
  }
delay(500);
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości