Zamieszanyyazjack
Rozpoczęto2017-06-15
Status
Tagi

Urządzenie losowo emitujące dźwięk na podstawie odczytów z czujnika PIR.

Założenia

Mój synek dość niespokojnie śpi, najczęściej wybudza się co jakiś czas i trzeba brać go na ręce, ponownie usypiać itd. To wszystkow czasie, kiedy kręgosłup odmawiał mi posłuszeństwa. Jedyną opcją było "szuszanie", kiedy słyszał ten dźwięk, uspokajał się i ponownie zasypiał. Są nawet badania, wskazujące na korzystne działanie białego szumu na sen u dzieci. Nie ważne, działało. Z tym mankamentem, że trzeba było obserwować małego, kiedy zaczynał się poruszać we śnie, to był moment na "szuszanie".

Pomysł był dość prosty, zrobić czujkę, która "obserwuje" malucha za mnie i "szusza" w odpowiednim momencie.

Iteracje

Iteracja I

Na zdjęciu pierwszy test bojowy. Działało idealnie, drzemki trwały bez przerw. 10/10, używam do tej pory. Efekty uboczne - straszy mroz ;P

img_20170615_152405.jpg

Zaczęło się i skończyło na prototypie na płytce. Bo działało i wystarczyło. Za układ starujący posłużyło Arduino Nano, za odtwarzanie dźwięku DFPlayer z głośnikiem, za wykrywanie ruchu i dźwięku czujnik PIR i mikrofon. Arduino przyjmowało sygnał z PIR i odtwarzało losowo cykl pięciu z dziesięciu czterosekundowych nagrań. Takie rozwiązanie pozwalało na odtworzenie dość naturalnego, niepowtarzalnego "szuszania". Mikrofon miał wykrywać płacz i zwiększać głośność, ewentualnie dawać znać do odbiornika przez wifi, ale nie oddalam się nigdy na tyle, żeby było to konieczne.

Hardware

  • Arduino Nano
  • DFPlayer
  • zasilacz do płytek prototypowych
  • czujnik PIR
  • mikrofon

Kod

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
 
int pirPin = 2;
int readPir;
int randNumber;
int redLed = 3;
int greenLed = 4;
int blueLed = 5;
int x;
int micPin = A0;
 
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
 
void printDetail(uint8_t type, int value);
 
void redOn(){
  digitalWrite(redLed, LOW);
  digitalWrite(greenLed, HIGH);
  digitalWrite(blueLed, HIGH);
}
 
void greenOn(){
  digitalWrite(redLed, HIGH);
  digitalWrite(greenLed, LOW);
  digitalWrite(blueLed, HIGH);
}
 
void blueOn(){
  digitalWrite(redLed, HIGH);
  digitalWrite(greenLed, HIGH);
  digitalWrite(blueLed, LOW);
}
 
void allOff(){
  digitalWrite(redLed, HIGH);
  digitalWrite(greenLed, HIGH);
  digitalWrite(blueLed, HIGH);
}
void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  pinMode(redLed, OUTPUT);
  digitalWrite(redLed, HIGH);
  pinMode(greenLed, OUTPUT);
  digitalWrite(greenLed, HIGH);
  pinMode(blueLed, OUTPUT);
  digitalWrite(blueLed, HIGH);
  pinMode(pirPin, INPUT);
  pinMode(micPin, INPUT);
  randomSeed(analogRead(0));
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
 
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
 
  for (x=1; x < 40; x++){
   blueOn();
   delay(500);
   allOff();
   delay(500);
  }
}
 
void loop()
{
  readPir = digitalRead(pirPin);
  if (readPir == HIGH) {
    redOn();
    randNumber = random(1,9);
    //Serial.println("Motion!");
    //Serial.println(randNumber);
    myDFPlayer.play(randNumber);
    delay(4000);
    allOff();
  } else {
    greenOn();
    //myDFPlayer.pause();
    //Serial.println("no motion");
    delay(1000);
    allOff();
  }
}

Kosztorys

Worklog

  • 15.06.2017 - testy i zakończenie prac
  • obudowa i proste UI
  • czujnik mikrofalowy zamiast/oraz PIR
  • dodanie funkcjonalności "niani" po WiFi z jakimś odbiornikiem na bazie sygnału z czujnika ruchu i mikrofonu
  • wyjście na zewnętrzny głośnik
  • apka na telefon z IU do nagrywania sampli; zamiast DFPlayera
  • projekty/szuszacz.txt
  • ostatnio zmienione: 2018/05/28 11:47
  • przez yazjack