Anti Kind Teddybeer

by Mees Hollebeek in Craft > Art

99 Views, 0 Favorites, 0 Comments

Anti Kind Teddybeer

anti kind teddybeer

Voor een school project heb ik een teddybeer gemaakt die niet bedoeld is voor kinderen. Als je op zijn neus drukt maakt hij een luid buzzer geluid en worden zijn ogen rood, en als je in zijn poot knijpt roep hij 'au' of 'fuck'. En wanneer je de teddybeer omdraait zegt hij; 'blijf van me af' of 'wegwezen!'

Supplies

Elektronische componenten

- arduino Uno

- ADXL345 Accelerometer

- Transistor BC547 NPN 45V / 0,1A

- Arcade knop 30mm

- Breadboard jumper kabeltjes

- Druk sensor FSR402

- 4 ohm 3 wat speaker

- 9 volt batterij met aansluit kabel

- 3x weerstand 120 ohm

Gereedschap

- schaar

- soldeerbout

- rol soldeertin

- boormachine

- lijm

- naald en draad

- oude teddybeer

Het Begin En De Accelerometer Testen

IMG_0683.JPG

Ik wist in het begin al wat ik wilde gaan doen, en de docent had mij aangeraden om naar een accelerometer te gaan kijken. Na wat research had ik er zelf een besteld en uitgeprobeerd. Ik had een youtube tutorial gevolgd die vertelde hoe alles in elkaar zat met de code erbij van hoe je de accelerometer kan aflezen en monitoren.

Alles Bij Elkaar Op Het Breadboard

IMG_0771.JPG
IMG_0763.JPG

Geluid

Als eerste ging ik aan de slag met het geluid. Ik had op internet ook een tutorial gevonden hoe je geluid moet afspelen met arduino, en ging aan de slag. Als eerste moest ik de library PCM.h uploaden naar mijn arduino, de PCM.h library kon ik via een zipfile downloaden die samen kwam met een audio converter. Vervolgens kon ik kleine 8 bit audio bestandjes opnemen en in de converter stoppen, die er een getallenlijst van frequenties van maakt om in mijn arduino code te gebruiken.

code:

#include <PCM.h>

const unsigned char turn[] PROGMEM = {

*insert frequentie list*

{

Vervolgens kon ik simpel het geluidsbestand aanroepen dat hij moet afspelen met een regel code.

startPlayback(turn, sizeof(turn));

accelerometer

Ik kan dan vervolgens zeggen dat als de accelerometer ondersteboven staat hij een geluidje moet afspelen.

code:

(trigger zorgt er voor dat de beer een keer terug gedraaid moet worden voordat hij nog een keer geluid mag maken)

 if (Y_out > 30){

  trigger = 0;

  }

  if (Y_out < 10 && trigger < 1 && 25 > sound){

  startPlayback(wegwezen, sizeof(wegwezen));

  delay(1500);   

  trigger = 1;

 }

 if (Y_out < 10 && trigger < 1 && 25 < sound){

  startPlayback(afblijven, sizeof(afblijven));

  delay(1500);   

  trigger = 1;

 }

Knop

Hetzelfde kan ik doen als de knop ingedrukt word

code:

if (buttonStatus != 1 && 25 < sound) {

  startPlayback(auw, sizeof(auw));

  delay(1300);

}

if (buttonStatus != 1 && 25 > sound) {

  startPlayback(fok, sizeof(fok));

  delay(1300);

}

afwisselen tussen geluid

je kan het al zien aan de code dat in de if statement staat dat als de random variabelen genaamd sound onder de 25 zit hij het ene geluid af moet spelen en boven de 25 het andere geluid. Zodat hij tussen 2 geluiden afwisselt. Ik heb dus een variabele gemaakt die een random getal pakt tussen de 1 en 50.

druk sensor en lampjes

als allerlaatste heb ik een druk sensor gebruikt, en als die ingedrukt wordt speelt hij een buzzer geluid af. En gaan de 2 ledlampen aan.

code:

if (fsrReading > 100){

 tone(buzzer, fsrReading * 2)

}

digitalWrite(LED1, fsrReading);

digitalWrite(LED2, fsrReading);

Solderen

IMG_0785.JPG
IMG_0784.JPG
IMG_0787.JPG
IMG_0779.JPG
IMG_3222.JPG

Als eerste heb ik voordat ik ging beginnen een circuit getekend op papier. En heb ik de soldeerbout er bij gepakt die ik heb liggen. Toen ik eenmaal een goed overzicht had van wat waar moest ben ik begonnen met solderen.

Ik heb als eerst een + en een - lijn gemaakt. En heb daarna heb ik de rest gesoldeerd. Bij de ledlampen, knop en druksensor heb ik een stuk van het bord afgeknipt. omdat die in het hoofd van de teddybeer gaan en los van de rest zitten. Het ging makkelijker om ze via het bord met de draadjes te solderen dan direct.

Tijdens het proces had ik wel een van mijn knoppen gesloopt en die vervangen met de arcade knop die ik momenteel gebruik.

In De Teddybeer Schuiven

IMG_0789.JPG
IMG_0788.JPG
IMG_0790.JPG

Als eerste heb ik de nek van de teddybeer opengesneden, en gaatjes in de ogen van de teddybeer geboord en de 2 ledlampen in beide ogen gelijmd. Vervolgens heb ik de druk sensor in de neus gevouwen, en met de schuimvulling van de teddybeer het op zijn plek gehouden. Ook heb ik een knop in zijn arm geschoven.

De arduino uno samen met de accelerometer heb ik in een kleine kartonnen doos gedaan. De bovenkant van de doos heeft een gat waar nog wat draadjes van de arduino uitsteken omdat het anders te krap was. Als laatst heb ik een klein gaatje in de onderkant van de beer gemaakt waar de batterij in past, daar komt ook het draadje uit waar je de batterij aan vast kan maken, en vervolgens kan je de batterij in de teddybeer duwen. En als aller laatste naaide ik de beer weer dicht!

Code


html werkt niet dus moet het helaas zo:


int buzzer = 11;

int fsrAnalogPin = 0;

int fsrReading;


int buttonStatus = 0;


int LED1 = 3;

int LED2 = 5;

#include <PCM.h> (gebruik library voor het geluid)

const unsigned char turn[] PROGMEM = { (geluid word herkent)

*insert frequentie list* (hier hoort de lang lijst met frequenties te staan die iets te lang is)

{

const unsigned char au[] PROGMEM = {

*insert frequentie list*

{

const unsigned char gvd[] PROGMEM = {

*insert frequentie list*

{

const unsigned char fok[] PROGMEM = {

*insert frequentie list*

{

const unsigned char wegwezen[] PROGMEM = {

*insert frequentie list*

{

const unsigned char afblijven[] PROGMEM = {

*insert frequentie list*

{

#include <Wire.h>

int trigger = 1 ;

int ADXL345 = 0x53;

int X_out, Y_out, Z_out;


void setup() {

 pinMode(2, INPUT_PULLUP);

 pinMode(LED1, OUTPUT); (ledlampjes)

 pinMode(LED2, OUTPUT);

  

 Serial.begin(9600);

  

 Wire.begin();


 Wire.beginTransmission(ADXL345); (accelerometer aflezen)

 Wire.write(0x2D); //talk to POWER_CTL Register - 0x2D

  

 Wire.write(8); // Bit D3 High for measuring enable (8dec -> 0000 1000 binary)

 Wire.endTransmission();

 delay(10);

}


void beep (){


  fsrReading = analogRead(fsrAnalogPin); (aflezen druk sensor)

 //  Serial.print("Analog reading = ");

 // Serial.println(fsrReading);

 

if (fsrReading > 100){

 tone(buzzer, fsrReading * 2); (buzzer geluid afspelen)

}

if (fsrReading < 100){

 noTone(buzzer);

}

}


Serial.println(fsrReading);


void loop() {

  

int sound = random(1, 50); (random getal tussen 1 - 50)


 //led lampjes

 int Brightness = fsrReading;


 digitalWrite(LED1, fsrReading); (ledlampjes aan bij druksensor)

 digitalWrite(LED2, fsrReading);

  

beep();


int pinValue = digitalRead(2); (button status aflezen)

 delay(10);

 if (buttonStatus != pinValue) {

  buttonStatus = pinValue;

  Serial.println(buttonStatus);

 }

  

if (buttonStatus != 1 && 25 < sound) {

  startPlayback(auw, sizeof(auw)); (geluid afspelen wanneer button ingedrukt word)

  delay(1300);

}

if (buttonStatus != 1 && 25 > sound) {

  startPlayback(fok, sizeof(fok)); (anderen geluid)

  delay(1300);

}

  

 Wire.beginTransmission(ADXL345);

 Wire.write(0x32);

 Wire.endTransmission(false);

 Wire.requestFrom(ADXL345, 6, true);


  if (Y_out > 30){ (zorgen dat er weer een geluidje kan worden afgespeelt als de teddy beer is omgedraaid)

  trigger = 0;

  }


  if (Y_out < 10 && trigger < 1 && 25 > sound){

  startPlayback(wegwezen, sizeof(wegwezen)); (geluid afspelen als hij omgedraait is en trigger op 1 zetten)

  delay(1500);   

  trigger = 1;

 }

 if (Y_out < 10 && trigger < 1 && 25 < sound){

  startPlayback(afblijven, sizeof(afblijven)); (2de geluid)

  delay(1500);   

  trigger = 1;

 }

   

 X_out = ( Wire.read() | Wire.read() << 8);

 Y_out = ( Wire.read() | Wire.read() << 8);

 Z_out = ( Wire.read() | Wire.read() << 8);


 Serial.print(X_out);

 Serial.print(" ");

 Serial.print(Y_out);

 Serial.print(" ");

 Serial.println(Z_out);

 delay(100);


 

 

}