Modulen Touch - en robotic hund leksak. (5 / 6 steg)
Steg 5: Arduino kod - Test maskin
Innan integrera motorn, kan lysdioder och flex sensorer testas:
Det finns två lägen svårighetsgrader för Touch-modulen.
Först, alla 3 lysdioder lyser upp och hunden kan slå någon spak som de väljer att leverera en behandla från fördelaren.
Andra, en enda LED lyser och hunden måste slå spaken motsvarar ljuset för att leverera en behandla från fördelaren.
Andra nivån av svårigheter:
Den andra svårigheten är faktiskt det enklaste att program och koden är följande:
#include < TrueRandom.h > /* För lysdioder */ int ledPinG = 7. STIFT 7 är en grön LED void setup() { } void loop() x = TrueRandom.random (1, 4); Jag använde detta TrueRandom bibliotek jag hittade på nätet, int sens; } int SensorRead() { digitalWrite (ledPin, hög); Vänd på en lampa över den nivå som valdes slumpmässigt. int sensor; sensor = analogRead(analogPin); Läser på nuvarande spaken flex sensor värde och anger ett tröskelvärde på 3 medan (sensor < initValHigh & & sensor > initValLow) / / så länge värdet sensor läsa inom +/-6 av det initiala värdet, analog PIN-koden } Delay(del);
HÅRDVARA:
//
För Flex sensorer (inte att flex sensor stiften är utbytbara)
Givarstaven = GND
Givarstaven = Analog In, med 10K förkopplingsmotstånd till + 5V
+ stift = Digital In pin
-pin = 470 förkopplingsmotstånd till GND
int ledPinR = 6; STIFT 6 är en röd LED
int ledPinB = 5; STIFT 6 är en blå LED
int ledPin;
int analogPin;
int del = 1000;
int x;
Serial.BEGIN(9600);
pinMode (ledPinG, produktionen); Ställer in alla LED stift till utgång
pinMode (ledPinR, produktionen);
pinMode (ledPinB, produktionen);
pinMode (ledPin, produktionen);
{
digitalWrite (ledPinG, hög); Första LED-blixt att ange indata redo
digitalWrite (ledPinR, hög);
digitalWrite (ledPinB, hög);
Delay(del);
digitalWrite (ledPinG, låg);
digitalWrite (ledPinR, låg);
digitalWrite (ledPinB, låg);
på grund av ett känt fel med Arduinos slumpmässiga funktion är icke-slumpmässigt
Serial.println(x);
Sens = SensorRead(); Anropa funktionen SensorRead()
om (x == 1) / / här om-elseif stamement länkar slumptal (1, 2 eller 3) med en spak.
{
analogPin = 0; analoga PIN 0 aktiveras
ledPin = 7. Denna LED motsvarar med spaken ansluten till analogPin 0
}
annars om (x == 2)
{
analogPin = 1; Denna LED motsvarar med spaken ansluten till analogPin 1
ledPin = 6;
}
annars om (x == 3)
{
analogPin = 2; Denna LED motsvarar med spaken ansluten till analogPin 2
ledPin = 5;
}
int initVal = sensor;
int initValHigh = 6 + sensor;
int initValLow = sensor - 6.
fortsätter att läsa. Bryta while loop innebär att rätt spaken har tryckts.
{
sensor = analogRead(analogPin);
Serial.println(sensor);
Serial.println(initVal);
digitalWrite (ledPin, låg); Lysdioden är avstängd.
}
SLUTET AV KODEN
Här är några anteckningar om koden:
--Jag använde TrueRandom bibliotek i stället för inbyggda Arduino slumpmässiga kommandot på grund av en känd bugg där inbyggt slumpmässiga faktiskt inte är slumpmässigt alls. Webbplats för biblioteket är mycket tydlig på hur den skall uppnås.
--Du kan följa de pin avläsningarna på Serial bildskärmen med denna kod. Du kan se de ständigt uppdaterande avläsningarna för nuvarande givarstaven. Om din PIN-kod är varierar mer än +/-6 från det ursprungliga värdet utan beröring, kan du behöva öka värdet. Leka med den för att hitta det rätta trycket, där det inte går slumpmässigt, men också reagerar vid minsta beröring. Vi vill ha hunden till få en njutning varje gång det händer att köra mot rätt spaken.
Första nivån av svårigheter:
Den första nivån av svårigheter fungerar så länge någon av de tre spakarna trycks ner. Du kan uppnå detta genom att tejpa alla tre spakar tillsammans och använda följande kod (som i princip triplicates andra nivå koden ovan). Funktionen TrueRandom behövs inte längre.
Jag har också lagt i MOTOR funktionalitet i slutet av koden så att motorn blir i 1 sekund, nog för en dos av behandlar ska levereras.
/* HÅRDVARA: För lysdioder */ int ledPinG = 7. STIFT 7 är en grön LED void setup() {
//
För Flex sensorer (inte att flex sensor stiften är utbytbara)
Givarstaven = GND
Givarstaven = Analog In, med 10K förkopplingsmotstånd till + 5V
+ stift = Digital In pin
-pin = 470 förkopplingsmotstånd till GND
int ledPinR = 6; STIFT 6 är en röd LED
int ledPinB = 5; STIFT 5 är en blå LED
int analogPin0;
int analogPin1;
int analogPin2;
int del = 1000;
int PWM_B = 11; Dessa två stift är reserverade redan på den arduMoto skölden
int DIR_B = 13.
Serial.BEGIN(9600);
pinMode (ledPinG, produktionen); Ställer in alla LED stift till utgång
pinMode (ledPinR, produktionen);
pinMode (ledPinB, produktionen);
pinMode (PWM_B, OUTPUT); Ställa in kontroll stiften att utgångar
pinMode (DIR_B, OUTPUT);
}
void loop()
{
digitalWrite (ledPinG, hög); Första LED-blixt att ange indata redo
digitalWrite (ledPinR, hög);
digitalWrite (ledPinB, hög);
Delay(del);
digitalWrite (ledPinG, låg);
digitalWrite (ledPinR, låg);
digitalWrite (ledPinB, låg);
int sens;
Sens = SensorRead(); Anropa funktionen SensorRead()
}
int SensorRead() {
digitalWrite (ledPinG, hög);
digitalWrite (ledPinR, hög);
digitalWrite (ledPinB, hög);
int sensor1;
int sensor2;
int sensor3;
sensor1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
int initVal1 = sensor1;
int initVal2 = sensor2;
int initVal3 = sensor3;
int initValHigh1 = 6 + sensor1;
int initValHigh2 = 6 + sensor2;
int initValHigh3 = 6 + sensor3;
int initValLow1 = sensor1 - 6.
int initValLow2 = sensor2 - 6.
int initValLow3 = sensor3 - 6.
medan (sensor1 < initValHigh1 & & sensor1 > initValLow1)
{
sensor1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
Serial.println(sensor1);
Serial.println(initVal1);
}
digitalWrite (ledPinG, låg);
Delay(100);
digitalWrite (ledPinR, låg);
Delay(100);
digitalWrite (ledPinB, låg);
Delay(100);
digitalWrite (ledPinB, hög);
Delay(100);
digitalWrite (ledPinR, hög);
digitalWrite (ledPinB, låg);
Delay(100);
digitalWrite (ledPinG, hög);
digitalWrite (ledPinR, låg);
Delay(100);
digitalWrite (ledPinG, låg);
Delay(100);
digitalWrite (DIR_B, hög); Kan vara använda omvänd motor riktning, 1 - hög, 2 - låg
analogWrite (PWM_B, 255); Ställ motorn körs på 255/255 = 100% arbetscykel för att erhålla erforderligt moment.
Delay(1000);
analogWrite(PWM_B,0); stänga av motorn
Delay(1000);
}
END-KOD