W ostatniej misji (12 stycznia) poleciał prototyp naszego komputera pokładowego. Sprawdził się dobrze. Wyciągnęliśmy pewne wnioski i zdecydowaliśmy się wykonać SSTV jako dodatkowy moduł (wcześniej był na jednej płytce razem z zasilaniem).

Płytka zasilania jest modułem zaopatrzonym w Arduino Nano, które komunikuje się przez UART z sondą RS41 – otrzymuje z sondy dane z GPS odpowiadając w zamian danymi z podłączonych do Nano czujników. Można zrobić własny GPS, APRS i RTTY, ale zdecydowaliśmy, że będziemy wykorzystywać dobrodziejstwo jakim jest obfitość sond. Uznaliśmy, że powinny mieć nowe życie, bo stworzone zostały żeby działać, a nie leżeć na półce. Sonda otrzymane z Arduino dane dołącza do ramek APRS i RTTY. W drugiej wersji naszego komputera postawiliśmy też na rozmiar i wagę. Komputer i dołączane moduły będą miały wielkość pudełka zapałek – 53x35mm.

Zamieszczamy schematy, prototypy płytek oraz pierwszy wsad do Arduino (obsługa czujników oraz odcinanie poprzez serwo). Wszystko jeszcze w fazie projektowania.

Przewidywane źródło zasilania: Akumulator 18650-30b SAMSUNG

Moduł zasilania i komunikacji z RS41

 

Moduł SSTV

Pierwsza wersja oprogramowania do Arduino

Poza pomiarami środowiska program realizuje odcinanie na wcześniej zadanej długości geograficznej (wybranym południku). Nie możemy być pewni gdzie poleci, ale możemy nie pozwolić przekroczyć konkretnego południka. Bardzo często (nawet zazwyczaj) balony uciekają nam za wschodnią granicę. Odcinanie, zrealizowane na serwie zdało egzamin celująco.

Taka wersja kodu poleciała i zadziałała ostatnio. Do kolejnej misji “pisze się” nowa.

//konieczne biblioteki: czujniki termometry DS18B20 oraz termometr DHT 22
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Servo.h> 
#include <DHT.h>

#define DHTPIN 2 
#define ONE_WIRE_BUS 11
#define DHTTYPE DHT22

OneWire oneWire(ONE_WIRE_BUS);
Servo myservo;
DallasTemperature sensors(&oneWire);
DHT dht(DHTPIN, DHTTYPE);

String inputString = "";         
String nowy="";
int poludnik;
boolean stringComplete = false;  
boolean odciete = false;
void setup() {
myservo.attach(6);

//Ustawiamy serwo żeby głupio nie ruszyło, bo lipa może być
myservo.write(6);
  
Serial.begin(57600);
 
inputString.reserve(100);
sensors.begin();
dht.begin();
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);
 
  if (stringComplete) {
    //Serial.println(inputString);
     nowy="";
    for(int i = 39; i < 44; i++) nowy = nowy + inputString[i]; 
//Ramka ma taki format: #$$SP5WWL,06152828,15:28:28,5223.3018,02101.9480,85.0,244,09
//wyciągamy długość geograficzną - południk w tym przypadku otrzymamy string  02101

    //Serial.println(nowy);
   poludnik = nowy.toInt(); // zamieniamy string 02101 na int 2101 (jeżeli ramka jak wyżej w komentarzu)
    //Serial.println(poludnik);
    if (poludnik >= 2110) { //na tym południku zaplanowano odcinanie
   
myservo.write(70); //serwo wyciąga drucik z uchwytu. Serwo umieszczone w uchwycie wydrukowanym na drukarce 3D
odciete = true; 
}
//odczytujemy dane z czujników
sensors.requestTemperatures();  
float h = dht.readHumidity();
float t = dht.readTemperature();

//niżej wysyłamy na UART dane do ramki zarówno RTTY jak i APRS. Format danych: "# dowolne dane bez przecinków i bez krzyżyka /n"
if (odciete==true){ //jeżeli odcięte taka informacja pojawia się w ramce RTTY oraz APRS
  Serial.print("#odciete t1:");
}else{
  Serial.print("#t1:");
}
  Serial.print(sensors.getTempCByIndex(0));  //wysyłamy dane telemetryczne w ramkach
  Serial.print("C ");
  Serial.print("t2:");
  Serial.print(t);
  Serial.print("C ");
  Serial.print("w:");
  Serial.print(h);
  Serial.println("n"); 
  
    String nowy = "";
    inputString = "";
    stringComplete = false;
   
  
}

}

void serialEvent() {
  while (Serial.available()) {
    digitalWrite(LED_BUILTIN, HIGH);    
    char inChar = (char)Serial.read();
     
    inputString += inChar;
    
    
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

Comments are closed.

Skip to content