Ovdje pročitajte kako se registrirati na forum.

SMS vaga za pčele problem

Zapeli ste s projektom? Ovdje je pravo mjesto za postaviti pitanje. Imajte na umu da ekipa e-radionice neće uvijek i/ili redovno odgovarati na pitanja postavljena u ovom podforumu.
Odgovorite
pepa347#3003
Novak
Novak
Postovi: 2
Pridružen/a: uto lis 22, 2019 11:12 pm

SMS vaga za pčele problem

Post Postao/la pepa347#3003 » uto lis 22, 2019 11:37 pm

Veliki pozdrav svima,

Imam problem sledeći:
Uradio sam sms vagu za pčele sa sim900 modulom i hteo bih da isto sve uradim to al sa sim800l v2.0. Namontiram to ali kada učitam cod koji sam uradio ne funkcioniše mi al neznam u čemu je problem. Ne funkcioniše u smislu kada pošaljem poruku.
,, Izmeri'' ne šaljemi podatke sa vage. A sa sim900 mi sve radi kao što trba. Evo i coda:

Kod: Označite sve

#include <SoftwareSerial.h>
#include <HX711_ADC.h>
#include <SimpleDHT.h>
#include <Wire.h>
#include <TimeLib.h> // Time by michael margolis
#include <DS1307RTC.h> // DS1307RTC by michael margolis
#include <RTClib.h> // RTClib by adafruit

//#define KORISTI_50K_UMESTO_33K 1                  /* obrises te duple zagrade na pocetku pre tarabe ako koristis 50k otpornik umesto 33k */
//#define DRUGI_NACIN_MERENJA_NAPONA 1      /* obrises te duple zagrade na pocetku pre tarabe da vidis oce li biti preciznije merenje napona ovako. ako ne vratis nazad te duple zagrade */

#define dht DHT22
#define pinDHT22 5
#define NEWLINE String("\n")

SimpleDHT22 dht22;
HX711_ADC LoadCell(2, 3);
SoftwareSerial SIM900(7, 8);

float weightGrams = 0.0;
float calibrationFactor = -22.0;
float voltage = 0.0;
float temperature = 0.0;
float humidity = 0.0;
int err = SimpleDHTErrSuccess;
String info = String("");

float ProslaTezina = 0.0;
float RazlikaTezine = 0.0;


String TrenutnoVremeText;
String VremeProslePorukeText;
tmElements_t TrenutnoVreme;
tmElements_t VremeProslePoruke;
time_t TrenutnoVremeUnix;
time_t VremeProslePorukeUnix;

DateTime TrenutnoVremeDT;
DateTime VremeProslePorukeDT;
TimeSpan RazlikaVremena;

void setup()
{
  Serial.begin(9600);
  LoadCell.begin();
  LoadCell.start(2000);
  LoadCell.setCalFactor(calibrationFactor);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
  SIM900.begin(19200);
  delay(20000);
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop()
{
  LoadCell.update();
  weightGrams = LoadCell.getData();
  calibrationFactor = LoadCell.getCalFactor();
  #ifdef DRUGI_NACIN_MERENJA_NAPONA
      voltage = (analogRead(A1) / 1023.0) * readVcc;
  #else
      voltage = (analogRead(A1) / 1023.0) * 5.0;
  #endif

  #ifdef KORISTI_50K_UMESTO_33K
      voltage = voltage * 3; 
  #else
      voltage = voltage * 4.03;
  #endif

  if ((err = dht22.read2(pinDHT22, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
  {
    Serial.print("Neuspesno ocitavanje DHT22 senzora, greska = ");
    Serial.println(err);
  }

  if (RTC.read(TrenutnoVreme)) {
     TrenutnoVremeText = timeElementsToString(TrenutnoVreme);
     TrenutnoVremeUnix = makeTime(TrenutnoVreme);
     TrenutnoVremeDT = DateTime(TrenutnoVremeUnix);
  }
  else
  {
     TrenutnoVremeText = String("Greska");
  }

  RazlikaVremena = TrenutnoVremeDT - VremeProslePorukeDT;
  RazlikaTezine = weightGrams - ProslaTezina;

  info = String("");
  info += String(" -PODACI SA SMS VAGE- ") + NEWLINE;
  info += String("Tezina: ") + String(weightGrams) + String("g") + NEWLINE;
  info += String("Prosla tezina: ") + String(ProslaTezina) + String("g") + NEWLINE;
  info += String("Razlika tezine: ") + String(ProslaTezina) + String("g") + NEWLINE;
  info += String("Faktor kalibracije: ") + String(calibrationFactor, 2) + NEWLINE;
  info += String("Temperatura: ") + String(temperature, 2) + String("*C") + NEWLINE;
  info += String("Vlaznost vazduha: ") + String(humidity, 2) + String("%") + NEWLINE;
  info += String("Napon: ") + String(voltage, 2) + String("V") + NEWLINE;
  info += String("Vreme slanja ove poruke: ") + TrenutnoVremeText + NEWLINE;
  info += String("Vreme slanja prosle poruke: ") + VremeProslePorukeText + NEWLINE;
  info += String("Razlika vremena izmedju poruka: ") + timeSpanToString(RazlikaVremena);

  if (SIM900.available() > 0)
  {
    String textMessage = SIM900.readString();
    if (textMessage.indexOf("Izmeri") >= 0)
    {
      if (RTC.read(VremeProslePoruke)) {
        VremeProslePorukeText += timeElementsToString(VremeProslePoruke);
        VremeProslePorukeUnix = makeTime(VremeProslePoruke);
        VremeProslePorukeDT = DateTime(VremeProslePorukeUnix);
      }
      else
      {
        VremeProslePorukeText += String("Greska");
      }
      ProslaTezina = weightGrams;
      sendSMS(info);
    }
  }
}

void sendSMS(String message)
{
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  SIM900.println("AT + CMGS = \"+380000000\""); // Upisujemo broj na koji9 saljemo sms vrednost
  delay(100);
  SIM900.println(message);
  delay(100);
  SIM900.println((char)26);
  delay(100);
  SIM900.println();
  delay(5000);
}


long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  

  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuringu
  
Avatar
david.zovko#6772
e-radionica.com team
e-radionica.com team
Postovi: 264
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: SMS vaga za pčele problem

Post Postao/la david.zovko#6772 » sri lis 23, 2019 8:19 am

Pozdrav

vrlo vjerojatno se drukčije verzije firmwarea nalaze na SIM900 i SIM800 i tu imate nekakav problemičić s AT komandom pa je potrebno malo debuggati da se to pronađe. To je vjerojatno najlakše tako da čitate što Vam SIM modul odgovara. Slično kao što imate ovaj dio:

Kod: Označite sve

  if (SIM900.available() > 0)
  {
    String textMessage = SIM900.readString();
.
.
.
On čita odgovor na serijskoj komunikaciji od SIM modula. Takav kod dodajte nakon slanja svake naredbe prema SIM-u i tu textMessage varijablu ispišite na Serial monitor:

Kod: Označite sve

Serial.println(textMessage);
Vidjet ćete gdje sve je okej, a gdje ima problema. S tom greškom, dobit ćete nekakav kod ili nekakvu indikaciju greške, nastavljate istraživati o čemu se radi te konačno riješavate problem.
pepa347#3003
Novak
Novak
Postovi: 2
Pridružen/a: uto lis 22, 2019 11:12 pm

Re: SMS vaga za pčele problem

Post Postao/la pepa347#3003 » ned lis 27, 2019 1:28 pm

Hvala puno. Uspeo sam.
Još jedno pitanje ako može;
Dali je moguće smanjiti još potrošnju meni trenutno vuče 50 mA

slika
Avatar
david.zovko#6772
e-radionica.com team
e-radionica.com team
Postovi: 264
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: SMS vaga za pčele problem

Post Postao/la david.zovko#6772 » sri lis 30, 2019 2:38 pm

Upravo je ključna stvar kod uređaja koji su napajani baterijom smanjiti potrošnju. Postoji nekoliko načina, a preporučam ova dva članka koji sadrže mnoštvo savjeta:
https://e-radionica.com/hr/blog/2015/09 ... -baterije/
https://e-radionica.com/hr/blog/2019/09 ... leep-mode/
Odgovorite