#1 Проекты » Плата RP2040 Zero » 2024-03-29 16:16:50

AVKrobotics
відповідей: 0

RP2040-Zero 2МБ плата розробника, початок.
29.03.2024  Автор- Кравченко Олексій Володимирович (AVKrobotics).

На мою думку RP2040- це дуже дешевий та потужний мікроконтролер встановлений на платі розміром із поштову марку.

Мікроконтролер RP2040
Двоядерний Arm Cortex M0+ з гнучкою тактовою частотою до 133 МГц
264 КБ SRAM та 2 МБ вбудованої флеш-пам'яті USB-накопичувач із підтримкою UF2
Інтерфейс PICOBOOT — це низькорівневий протокол USB для взаємодії з RP2040, коли він перебуває в режимі BOOTSEL. Це інтерфейс можна використовувати одночасно з інтерфейсом накопичувача USB. Він забезпечує гнучке читання та запис у RAM або Flash, перезавантаження, виконання коду на пристрої та кілька інших функцій управління. Константи та структури, пов’язані з інтерфейсом, можна знайти в заголовку SDK https://github.com/raspberrypi/picosdk/
blob/master/src/common/boot_picoboot/include/boot/picoboot.h
Перезавантажує RP2040 з режиму BOOTSEL. Зауважте, що режим BOOTSEL може бути повторно ввімкнено, якщо перезавантажити флеш, а ні знайдено дійсний завантажувач другого етапу.
Роз'єм USB-C використовується для програмування та живлення плати.

Для початку написання програм на Python- на ПК встановити програму Thonny c сайту  https://thonny.org/
https://github.com/thonny/thonny/releases для різних операційних систем.

Щоб почати працювати з платою RP2040-Zero 2МБ треба встановити пакет Cirquitpython на плату, для цього:
1.Натиснути кнопку rp2040 - boot з'єднати кабель USB type C з ПК
2.Відкриється нова флеш пам'ять rp2040
3.Вкласти папку circuitpython-main флеш пам'ять rp2040 взяти з сайту https://github.com/adafruit/circuitpython вона містить 49мБайт
4. інсталяційний файл adafruit-circuitpython-waveshare_rp2040_zero-ru-8.2.10
взяти з сайту https://circuitpython.org/board/waveshare_rp2040_zero/
і вкласти у флешку rp2040.
5. C сайту https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
з папки Adafruit_CircuitPython_NeoPixel-main відкрити в Thonny файл neopixel.py та зберегти на rp2040, запустити в Thonny -натиснути зелений трикутник перевірити.
6. З сайту https://github.com/adafruit/Adafruit_CircuitPython_Pixelbuf взяти файл adafruit_pixelbuf.py
відкрити в Thonny і вкласти в rp2040 lib папку (папка відкривається якщо натиснути)
файл adafruit_pixelbuf.py, запустити перевірити.
7. зберегти файл main.py
8. видалити файл code.py
9. запустити файл main.py
З'єднати buzzer динамік і підключити до 14 пін та GND.
Спочатку вмикання живлення, запуститься вбудована програма миготіння білим кольором світлодіод ws2812. Потім запуститься програма main.py, її можна редагувати та змінювати. Спочатку блимає світлодіод червоним кольором, після блимання червоного світлодіода звучатиме мелодія play_melody(MELODY) шість нот. Якщо закоротити 5V і 29 пін, то відбудеться блимання зеленим кольором і синім. Але мелодія не звучатиме.
Проект створений для контролю води у водопроводі. Замість кнопки встановити датчик тиску, який працює на замикання контактів, якщо є тиск води. Якщо датчик води під тиском, скорочений
то блимає синій зелений, якщо води немає, то червоний з мелодією. Може працювати від батареї.



main.py

import board
import neopixel
import time
import digitalio
import array
import pulseio
import pwmio

# Define the number of LEDs
NUM_LEDS = 16

# Initialize pin 29
pin29 = digitalio.DigitalInOut(board.GP29)
pin29.switch_to_input(pull=digitalio.Pull.DOWN)

# Define the frequencies for each note
NOTES = {
    'C4': 262,
    'D4': 294,
    'E4': 330,
    'F4': 349,
    'G4': 392,
    'A4': 440,
    'B4': 494,
    'REST': 0  # Represents a rest
}

# Define the melody as a list of tuples (note, duration)
MELODY = [
    ('C4', 0.2),
    ('D4', 0.1),
    ('E4', 0.2),
    ('F4', 0.3),
    ('G4', 0.2),
    ('A4', 0.5),
    ('B4', 0.2)
]

# Initialize PWM output on pin GP14
#pwm = pulseio.PulseOut(board.GP14, frequency=440, duty_cycle=0)
pwm = pwmio.PWMOut(board.GP14, duty_cycle=0, frequency=440, variable_frequency=True)

# Function to play a note
def play_note(note, duration):
    if note == 'REST':
        time.sleep(duration)
        return
    frequency = NOTES[note]
    pwm.frequency = frequency
    pwm.duty_cycle = 65536 // 2  # 50% duty cycle
    time.sleep(duration)
    pwm.duty_cycle = 0  # Turn off the PWM

# Function to play the melody
def play_melody(melody):
    for note, duration in melody:
        play_note(note, duration)
        time.sleep(0.1)  # Add a short pause between notes

# Initialize the built-in neopixel
pixels = neopixel.NeoPixel(board.NEOPIXEL, NUM_LEDS, auto_write=False)

# Function to turn on all LEDs to red
def turn_on_red():
    pixels.fill((0, 255, 0))  # Red color
    pixels.show()
   
# Function to turn on all LEDs to red
def turn_on_green():
    pixels.fill((255, 0, 0))  # Red color
    pixels.show()
   
# Function to turn on all LEDs to red
def turn_on_blue():
    pixels.fill((0, 0, 255))  # Red color
    pixels.show()

# Function to turn off all LEDs
def turn_off():
    pixels.fill((0, 0, 0))  # Turn off
    pixels.show()
   
   
while True:
 
  if pin29.value:
      # Turn on the LEDs
       turn_on_green()

       # Wait for some time
       time.sleep(0.5)

       # Turn off the LEDs
       turn_on_blue()
       # Wait for some time
       time.sleep(0.5)
  else:
      # Turn on the LEDs
      turn_on_red()

      # Wait for some time
      time.sleep(0.5)

      # Turn off the LEDs
      turn_off()
      # Wait for some time
      time.sleep(0.5)
     
      # Play the melody
      play_melody(MELODY)

#2 Re: Проекты » Arduino hodkot » 2015-01-27 12:25:01

Проект уже собран и проверен, скоро появятся детали для сборки, кому интересно, пишите. Статья по сборке схема и описание двух вариантов уже готова, скоро выложу на сайт.

#3 Re: Проекты » Простой робот триколес » 2015-01-27 12:23:23

Пишите программы. Может есть мысли по сборке и компоновке робота, идеи по функционированию? Статья, схема и описание сборки скоро будет.

#5 Re: Різне » Собираю команду робототехников » 2014-12-31 10:28:27

Я пока сам разрабатываю роботов. Я автор книг 10 практических примеров на AVR контроллерах. Разрабатываю простые схемы на AVR с 2009 г.

#7 Re: Різне » Собираю команду робототехников » 2014-12-29 17:01:27

Если снимите размеры, то все это легко сделать в резке из фанеры или оргстекла. А как экструдер и пассики для ШД? Плата электроники через sd карту или USB?
Я хочу сделать свой принтер без штанг, без втулок, без пассиков.

#8 Re: Різне » Собираю команду робототехников » 2014-12-29 10:44:10

Какую конструкцию будете собирать? Я видел экструдер в Имрад, правда без датчиков температуры. Файлы для 3d принтера должны содержать команды для шаговых двигателей, сама структура файла другая чем в графических редакторах. Какое поле для принтера 450х450 мм?

#9 Re: Різне » Собираю команду робототехников » 2014-12-28 11:40:18

В aliexpress есть готовый 3d принтер, 7500 грн, как на это смотрите?
Как будете модели делать? Я уже конвертировал с autocad 2009 в Cura 14.2.1 через 3dmax
Autocad можно конвертировать в Solidworks, хотя автокад сам делает файлы литографии.
http://forum.arduino.ua/img/members/100/Cura_1.jpg
что касается робот сообщества, может устроим робот бои
https://www.youtube.com/watch?v=06WVojilmlo
https://www.youtube.com/watch?v=6egkrves8cg

#10 Re: Проекты » Arduino hodkot » 2014-12-28 11:21:01

Пока только прототип
https://www.youtube.com/watch?v=kGfjNqDFSaE
Но с резки тоже уже ходит, мучаюсь с ультразвуковой платой, никак не могу настроить. Детали робота уже скоро появятся в Arduino ua.
Вот видео
http://youtu.be/ld1WA7o3g-A.

#12 Проекты » Робот манипулятор » 2014-12-26 09:52:11

AVKrobotics
відповідей: 4

Всем привет я автор робота манипулятор.
Расскажу историю создания этого Украинского робота.
Идея создания робота манипулятора возникла два года назад.  Я создал клешню.
Сейчас я часто пользуюсь клешней для проверки новых серводвигателей.
В мае месяце 2014г я нарисовал первый 3d чертеж в Autocad 2009 учебная версия, разрешена для легального временного пользования.  В июне месяце я начал искать производителя, который бы сделал это устройство. Литье из пластика слишком дорого (начальный капитал 1000 грн), литье эпоксидной смолой еще дороже (начальный капитал 1500грн), лазерная резка очень дешево 4 грн метр. Я сразу обратился в несколько компаний по лазерной резке. Очень интересные предложения от компании на петровке. Принесите материал, и проект, который наш дизайнер переделает за отдельную сумму для установки программы на станок. Для массового тиражирования такой подход неприемлем. Наконец в августе, я с трудом нашел резку. Я только принес проект в автокаде, а дальше  резчик сделал все сам. Первые образцы робота были сплошным браком. Я заплатил за 3 резки и все напрасно. Много конструктивных недоработок. Я исправил все технологические недоработки и на 4-й резке получил полноценные детали робота. Потом начал эксперименты с серводвигателями SG90. Спалил 4 шт серводвигателей, скрутились шестерни в 2 шт. Потом Arduino Leonardo затер бутлоадер и так и не смог программатором записать новый загрузчик, пришлось купить новую плату. Сейчас я уже собрал двух роботов, проверил рабочий скетч, подобрал серводвигатели и получил полноценного, тиражируемого  робота манипулятор. Он подымает вес  всего в 150 гр.   Конечно Михаил прав платить большую сумму денег за пластик похоже на надувательство, но дешевле сделать пока невозможно. Зато с гордостью можно сказать что робот манипулятор сконструирован и производится на Украине – это пожалуй единственный положительный момент.

#13 Re: Проекты » Romeo V2 R3 Старт » 2014-12-25 18:04:36

Я тоже думал о таком проекте, но пока нет окончательных планов. Очень классно получилось. Я еще хочу видеокамеру поставить.
http://forum.arduino.ua/img/members/100/Tanketka4.jpg

#15 Проекты » Arduino hodkot » 2014-12-25 16:18:44

AVKrobotics
відповідей: 4

Создан новый проект на базе платы Arduino Uno. Робот похож на собаку, он ходит и катится, передняя часть робота имеет ноги, задняя часть имеет колеса.
Питание две кроны, лучше Duracell, по 9.0 В. 4 сервопривода, плата преобразователя, плана кон, плата ультразвукового дальномера. Робот уже ходит только вперед, пока настраиваю дальномер, что бы обходил препятствия. Поворачивает голову и дальномером измеряет дистанцию, если менее 1 метра формирует траекторию обхода по дуге.

Підвал форуму