Introduction: The Automatic Catlaser
Voor een project voor school heb ik een Arduino Yun werkje gemaakt. Ik heb een hele lieve kat die soms alleen is en zich dan verveelt. Om haar wat meer vermaak te geven, heb ik een kattenlasertje gemaakt die automatisch beweegt en aangaat als iets voor de sonar komt!
Step 1: Getting Familiar With Arduino
Na de allereerste Arduino les ben ik begonnen met het aan krijgen van een lampje. Ik had echter mijn Arduino pakket nog niet binnen en heb dus de hele les moeten filmen. Ik ben later op school nog aan de hand van deze filmpjes gaan werken aan Arduino.Dit was slechts een kleine oefening en niet relevant in het eindproduct.
Step 2: Making the Motor
Het eerste wat ik nodig moest hebben was een motor. In de afbeeldingen zie je hoe ik die heb vastgemaakt. Ik heb drie lampjes er aan toegevoegd om te kijken of het wel echt werkt.
De code die hierbij hoort:
#include
Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position int letpinA = 10; int letpinB = 9; int letpinC = 8; int DelayA = 5;
void setup() { // put your setup code here, to run once: pinMode(letpinA, OUTPUT); pinMode(letpinB, OUTPUT); pinMode(letpinC, OUTPUT); myservo.attach(5); // attaches the servo on pin 5 to the servo object }
void loop() { // put your main code here, to run repeatedly: for(pos = 0; pos < 180; pos += 2) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position digitalWrite(letpinA,HIGH); delay(DelayA); digitalWrite(letpinA,LOW); delay(DelayA);
digitalWrite(letpinB,HIGH); delay(DelayA); digitalWrite(letpinB,LOW); delay(DelayA); } for(pos = 180; pos>=1; pos-=2) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position digitalWrite(letpinC,HIGH); delay(DelayA); digitalWrite(letpinC,LOW); delay(DelayA); }
}
Step 3: De Knop Van De Laser
We hebben de batterijen uit de laser gehaald en aangesloten op een andere voedingsbron die we kunnen onderbreken met een relais (schakelaar). Na de draadjes aangesloten te hebben kwamen we erachter dat het het niet deed.
We meten de voltage van de Arduino YUN. Uitkomst = 4,96 volt.
HIJ DOET HET. We kwamen erachter dat de plus op de behuizing moet. We hadden de gelijkspanning/voedingsbron eerst verkeerd om aangesloten.
Nu gaan we de knop vast tapen met stugge tape, zodat de laser altijd aan blijft.
Nu gaan we de draadjes solderen aan de voeding van de laser. Het lukt niet om er bij te komen, daarvoor is de soldeerbout te kort en te dik. Een optie is om een stukje van de laser te zagen.
Dat is gelukt en er zit nu een draadje aan vast. Voor de tweede moet er eerst een gaatje in de omhulling van de laser geboord worden. (Per ongeluk draadjes verkeerd om gedaan, dus moeten we ze opnieuw solderen)
We maken er een klem mechanisme van! Het boren was namelijk niet gelukt. Nu doet ie het wel. Daarna is het gefixeerd met een rubber elastiekje om het een beetje stevig te maken, zodat het niet losgaat.
De servomotor is opnieuw aangesloten aan de Arduino en bovenop de aandrijfas is de laser geplakt. Voor het prototype en het uitproberen heb ik simpelweg met tape de laser op de aandrijfas van de servomotor
Step 4: Het Relais En De Sonar
Relais
Het plus draadje van de laser is vastgemaakt op het relais en de min op het experimenteerboard. Nu kun je hem uit en aan doen zonder het knopje in te moeten drukken. Verder is het relais aangesloten aan de Arduino = computer.
Sonar
De sonar is geplaatst op het experimenteerboard en aangesloten op de Arduino.
Het aansluiten van de Arduino aan mijn laptop werd wat irritant, dus in plaats daarvan is een draagbare accu gekomen. Nu is het een stuk makkelijker om aan de hardware te werken.
Op de volgende pagina kun je de code met uitleg bezichtigen.
Step 5: Software
De bijbehorende bibliotheken zijn gedownload en geïnstalleerd in de libraryfolder voor de code zodat de sonar en de servo motor makkelijk zijn te programmeren.
De onderstaande code is met de arduino gecompileerd en geüpload in de arduino. Met de code kan de sonar zien dat als er iets in de buurt van de sonar komt dat de laser aan gaat en de motor heen en weer draait, waardoor de laser heen en weer schijnt. Dit is getest op mijn kat en het werkstuk is voor de test geslaagd! J
Code:
#include // standaard programma/bibliotheekje waarmee je makkelijk met de sonar kan omgaan.
#include // standaard programma/bibliotheekje waarmee je makkelijk met de servo motor kan omgaan.
int pos = 0; // variabele om de waarde van de servo positie op te slaan, begint bij 0 graden.
int DelayA = 30; //delay betekent dat de computer even wacht.
int RELAY_A = 9; //dit is pinnetje 9. Relay = het relais/schakelaartje.
int RELAY_B = 10; //dit is pinnetje 10. Dit is het tweede schakelaartje (((__DIE WE NU NIET GEBRUIKEN__)))
#define TRIGGER_PIN 8 // Arduino pin 8 = trigger van de ultrasonische sonar.
#define ECHO_PIN 7 // Arduino pin 7 = echo van ultrasonische sonar.
#define MAX_DISTANCE 75 // De maximale afstand die we willen meten met de sonar (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing standaard instellingen van de trigger pin (die een ping uit stuurt), de echo pin (die een ping binnen krijgt) en de max afstand.
Servo myservo; // myservo is de naam die we de motor gegeven hebben.
// a maximum of eight servo objects can be created
void setup() { // put your setup code here, to run once:
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. Bibliotheekje waarmee je het resultaat van de afstand kan uitprinten, naar bijv. een scherm.
pinMode(RELAY_A, OUTPUT); // attaches the relay A on pin 9
pinMode(RELAY_B, OUTPUT); // attaches the relay B on pin 10 (overbodig)
myservo.attach(5); // attaches the servo on pin 5 to the servo object
}
void loop() {
delay(50); // Wacht 50 miliseconden tussen elke sonar ping (ongeveer 20 pings/sec). 29ms is de kleinst mogelijke waarde tussen een ping. Hij moet eventjes wachten om tijd te hebben om de ping te lezen via de echo.
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). Er wordt een ping verstuurd en in de waarde "uS" komt de tijd terug dat de ping terug is gekomen.
unsigned int cm = uS / US_ROUNDTRIP_CM; // Zet de microseconden om in centimeters.
if (cm > 0) { // alleen een print opdracht sturen over de serial bus als de gemeten afstand binnen het afstandsbereik valt.
Serial.print("Afstand is "); //om te testen en om op het scherm te tonen wat de afstand is.
Serial.print(cm); // print result (0 = buiten de ingestelde afstandsbereik)
Serial.println(" cm");
for(pos = 0; pos < 180; pos += 2){ // gaat van 0 graden naar 180 graden in stapjes van 2 graden
myservo.write(pos); // vertel de servo om naar de positie te gaan in de variabele 'pos'
delay(DelayA); // wacht x ms op de servo zodat hij de positie kan behalen
digitalWrite(RELAY_A,LOW); // Laser aanzetten
}
}
else {
digitalWrite(RELAY_A,HIGH); // Laser uitzetten
}
}}
Step 6: Lasersnijden!
Dit vond ik heel leuk.
Ik moest een doosje hebben en dat was een beetje vroeg voor de deadline. Ik dacht daarom dat ik het met lego zou gaan maken, maar ik wilde ook heel graag gaan lasersnijden. Ik heb toch nog gekozen voor het lasersnijden en daar ben ik erg blij om, want het ziet er nu een stuk beter uit dan als ik het met lego had gemaakt! Zeer netjes en er konden mooie patronen op gesneden worden dankzij illustrator.
Het rondje heb ik o.a. met houten ringen gemaakt.
Step 7: Mislukt!
Ik heb geprobeerd de draadjes vast te solderen aan de plaat die je in de foto's ziet, dit koste echter te veel tijd en het ging kapot dus dat heb ik uiteindelijk niet gedaan. Als ik meer tijd over had dan was dit er waarschijnlijk wel ingekomen.
Step 8: Materials and Tools
- Arduino YUN
Ultrasonisch sensor HC-SR04
- Heel veel draadjes/kabeltjes
- Hout
- Illustrator
- Laserpennetje
- Zaag
- Servomotor
- Schroefjes en schroevendraaier
- Experimenteerboard
- Relais
- Kabelbegeleidertjes
- Scharnieren
- Een kat zou fijn zijn